Twitterを100倍楽しむためのbot開発基礎講座

第4回 あらかじめ定められた時間につぶやく時報botを作成する

この記事を読むのに必要な時間:およそ 2.5 分

今回から,いくつかのパターンのbotを実際にプログラムで実装します。今回はただひたすらつぶやくbotを作成してみます。

まずは時報bot

まずは,1時間に1回などの頻度で現在時刻をつぶやく時報botです。

リスト 時報botのサンプル

<?php
require_once("twitteroauth.php");

// OAuthアプリ登録で取得したConsumer keyを設定
$consumer_key="";
// OAuthアプリ登録で取得したConsumer secretを設定
$consumer_secret="";
// OAuthトークン取得プログラムで取得したoauth_tokenを設定
$oauth_token="oauth_token";
// OAuthトークン取得プログラムで取得したoauth_token_secretを設定
$oauth_token_secret="oauth_token_secret";

// 発言を行うメソッドを指定
$method = "statuses/update";

// TwitterOAuthのインスタンスを生成
$twitter = new TwitterOAuth(
  $consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret
);

// 最大3回までリトライを試みる。
$retries = 3;
for($count = 0; $count < $retries; $count++) {
  
  $date = date("Y/m/d H:i:s");
  // プログラムの文字コードがUTF-8の場合はこのまま
  $status = sprintf("只今の時刻は%sです", $date);
  // プログラムの文字コードがSJISの場合はUTF-8に変換
  //$status = mb_convert_encoding($status, "UTF-8", "SJIS");
  // パラメータを指定(ここでは発言内容を指定)
  $parameters = array("status" => $status);

  // Twitterに発言をPOST
  $response = $twitter->post($method, $parameters);
  $http_info = $twitter->http_info;
  $http_code = $http_info["http_code"];

  // HTTPコードが200か304で,かつエラーメッセージがなければ成功
  if(
    ($http_code == "200" || $http_code == "304") &&
    !array_key_exists("error", $response)
  ) {
    break;
  }
  // 1秒待つ
  sleep(1);
}
?>

このPHPプログラムをcronなどで定期的に実行すれば,時報botができあがります。どうでしょうか,案外簡単だと思いませんか?

上で挙げた時報botは日付部分がつぶやく時間によって変わる例ですが,たとえばつぶやく内容を複数パターン用意し,ランダムにつぶやくようにすれば名言botの出来上がりです。

不定期に小倉百人一首をつぶやくbot

次に示す例は,不定期に小倉百人一首をつぶやくbotです。

乱数を用いることで不定期につぶやくように実装しています。

リスト 小倉百人一首bot

<?php
require_once("twitteroauth.php");

// 1から6までの乱数を生成し,1でなければつぶやかないことで
// 6分の1の頻度で不定期なつぶやきを実現する
if(rand(1, 6) != 1) {
  exit(0);
}

// OAuthアプリ登録で取得したConsumer keyを設定
$consumer_key="";
// OAuthアプリ登録で取得したConsumer secretを設定
$consumer_secret="";
// OAuthトークン取得プログラムで取得したoauth_tokenを設定
$oauth_token="oauth_token";
// OAuthトークン取得プログラムで取得したoauth_token_secretを設定
$oauth_token_secret="oauth_token_secret";

// 発言を行うメソッドを指定
$method = "statuses/update";

// TwitterOAuthのインスタンスを生成
$twitter = new TwitterOAuth(
  $consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret
);

$wakas = array(
  "秋の田の かりほの庵の 苫をあらみ 我が衣手は 露にぬれつつ",
  "春過ぎて 夏来にけらし 白妙の 衣ほすてふ 天の香具山",
  "あしびきの 山鳥の尾の しだり尾の ながながし夜を ひとりかも寝む",
  "田子の浦に うちいでてみれば 白妙の 富士の高嶺に 雪は降りつつ",
  "奥山に もみぢふみわけ なく鹿の 声聞く時ぞ 秋はかなしき"
);

// 最大3回までリトライを試みる。
$retries = 3;
for($count = 0; $count < $retries; $count++) {
  
  // つぶやく首を選定
  $waka = $wakas[rand(0, count($wakas) - 1)];
  // プログラムの文字コードがUTF-8の場合はこのまま
  $status = $waka;
  // プログラムの文字コードがSJISの場合はUTF-8に変換
  //$status = mb_convert_encoding($waka, "UTF-8", "SJIS");
  // パラメータを指定(ここでは発言内容を指定)
  $parameters = array("status" => $status);

  // Twitterに発言をPOST
  $response = $twitter->post($method, $parameters);
  $http_info = $twitter->http_info;
  $http_code = $http_info["http_code"];

  // HTTPコードが200か304で,かつエラーメッセージがなければ成功
  if(
    ($http_code == "200" || $http_code == "304") &&
    !array_key_exists("error", $response)
  ) {
    break;
  }
  // 1秒待つ
  sleep(1);
}
?>

このプログラムをcronを用いて10分間隔で実行すると,平均1時間に1回,不定期に発言するbotを実現できます。今回は分量の都合から5首だけ載せましたが,後述する二重投稿対策を考えて発言パターンはもっと増やしておくことをオススメします。

botを作成する上でのTIPS

ここではbotを作成する上でのいくつかのテクニックを紹介します。

二重投稿対策

とくに気をつけないといけないのは,二重投稿です。Twitterでは過去に行ったツイートとまったく同じ文面のツイートは,一定期間(具体的な期間は不明です)エラーになって発言できません。botは同じ発言を何度も行うことがあるため,工夫が必要です。

たとえば,現在時刻やランダムな数字をツイートに含めるのも有効ですが,会話/返答するbotであれば語彙を増やしたり,語尾に変化もたせるのをオススメします。そうすることでbotをキャラクターとしての個性が生まれ,深みも出ます。

その他,先ほどの百人一首であれば,小倉百人一首以外の和歌なども用意してバリエーションを持たせるのも手です。

エラー処理をしっかりやりましょう。

Twitterを毎日のように使っている方はご存知かもしれませんが,Twitterのサービスはよく止まります。止まるのはWebインターフェースだけでなく,APIも同様に止まる場合があります。早めのうちにエラー処理を実装してしまいましょう。

定期的につぶやくbotはどの程度の頻度つぶやくべきか?

あまりフォローしていない人のタイムラインの場合,botの発言で埋め尽くされてしまいます。botの特性にもよりますが,定期的につぶやくbotのの場合は,筆者の経験的には1時間から2時間おきにつぶやくぐらいが目安になると思います。

また,寝てる間にタイムラインがbotで埋まるのを避けるため,夜間はつぶやかないなども有効な手段です。

次回は,返答(mentions)を用いて会話をおこなうbotのサンプルを紹介する予定です。

著者プロフィール

松鵜琢人(まつうたくと)

1980年生まれの大阪府出身。通信会社に就職後,転職してサーバ管理者兼プログラマーに。よく使う言語はシェルスクリプトとPerl。プラスワンデジタル所属。Gentoo Linux Developerでもある。

コメント

コメントの記入