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

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

今回から、いくつかのパターンの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のサンプルを紹介する予定です。

おすすめ記事

記事・ニュース一覧