JLINE.create();

2013.11.22(Fri)

in PHP

PHPで公式RTするTwitterBOTを作った

会社で運営しているサイトで、大阪府内のイベントを収集・発信しているのですが、情報源が検索して探す、もしくは駅構内の広告が主なのでなかなか数が集まりません。

Twitterで情報収集したら、もう少し効率的になるのかなぁと思い(あと個人的にこういうBOTがあればいいなぁと思ったので)、PHPを使ってBOTを作ってみました。

今後また使うかもしれないので、メモとして残しておきます。


作ったもの

@osaka_art_bot

大阪府内のアートイベントや展覧会、美術館などアートに関する情報を公式RTするBOT。1時間に1度動きます。

参考サイト

BOTを作るにあたって、下記のサイトを何度も参考にいたしました。本当にありがとうございました。

作成手順

アプリケーションの登録

まずアプリケーションの登録を行います。

  1. 普通にTwitterのアカウントを作成
  2. Twitter Developersへアクセス
  3. 右上の「Sign in」から、先ほど作成したアカウントでログイン
  4. 右上の自分のアイコンにマウスオーバーして、「My applications」をクリック
  5. 「Create a new application」というボタンをクリック
  6. 「Create an application」というページに変わるので、アプリケーションの情報を登録する。
    アスタリスクが付いている項目は入力必須。登録内容は後で変更可能です。
    Name アプリケーションの名前(日本語でもOK) ex. Osaka Art Bot
    Description アプリケーションの概要(日本語でもOK) ex. 大阪のアートイベント等を収集するBOT
    Website アプリケーションのサイトのURL。ダウンロードページや説明書のURL。
    無い場合は仮のものでもOKですが、後で変更してくださいとのこと。

    利用規約にチェックを入れて、「Create your Twitter application」をクリックします。

  7. 画面が切り替わるので、一番下の「create my access token」をクリック。
  8. 忘れないうちにアプリケーションの権限を変更。タブから「Setting」を選択。

    スクロールすると「Application type」という項目があるので、ここを「Read and Write」に変更する。

    twitter_bot4
  9. タブから「Details」を選択。このページの以下の項目をこの後で利用します。
    • Consumer key
    • Consumer secret
    • Access token
    • Access token secret

twitteroauthをダウンロード

  1. 「bot」と適当なフォルダを作成
  2. OAuthライブラリの「twitteroauth」をダウンロード
  3. 展開して出てきた「twitteroauth」フォルダを丸ごとbotフォルダへ入れる

PHPファイル作成

このようなコードを書いて、とりあえず適当な名前で保存します。

// ライブラリを読み込む
require_once('./twitteroauth/twitteroauth.php');

// アプリケーション登録時に控えておいた項目をそれぞれ入力
$consumerKey = '';
$consumerSecret = '';
$accessToken = '';
$accessTokenSecret = '';

$twObj = new TwitterOAuth(
  $consumerKey,
  $consumerSecret,
  $accessToken,
  $accessTokenSecret
);

// 指定した条件で検索、10件取得
$req = $twObj->OAuthRequest('https://api.twitter.com/1.1/search/tweets.json','GET',
array(
  'lang' => 'ja',
  'q' => '大阪+イベント', // 検索ワード
  'count'=>'10', // 取得する件数
  'include_entities'=>'true'
));

$tweets = json_decode($req);
$tweets = $tweets->{'statuses'};

  if ( isset($tweets) && empty($tweets->errors) ){

  foreach ($tweets as $val) {

    $usr_name = $val->user->name;
    $tweet_text = $val->text;

    // 特定の語句を含むかチェック(ユーザー名にhogeもしくはツイートにpiyoを含むものは除外)
    if( !(preg_match('/(hoge)/',$usr_name) || preg_match('/(piyo)/',$tweet_text )) ){
      $twObj->OAuthRequest( 
        'https://api.twitter.com/1.1/statuses/retweet/'.$tweet_id.'.json','POST',''
      );
    }
  }
}

除外ワードは検索時に設定することができるのですが、時々引っかかるか引っかからないかというようなワードを除外したいのでこのようにしています。

検索のオプションは公式が参考になります。(そのうち自分でもまとめられたら良いのですが)

実際に動かしてみる

PHPの動くサーバーに設置して、上で作ったファイルにアクセスしてみます。
条件に合うツイートがあれば、公式RTされます。

毎回手動でアクセスするわけにもいかないので、cronで自動実行させます。間隔は1時間に1度で十分だと思います。

セキュリティ

第三者がPHPファイルにアクセスしまくって、気づいたらタイムラインが大変なことになっていた…という風にならないように、ディレクトリ名とファイル名をなるべく分かりにくいものにしておきます。

また、Basic認証をかけておくと更に安全性が高まるのではないかと思います(気休め程度かもしれませんが)。

最後に

実際に作ったBOTでは、同じユーザーのツイートを頻繁にRTしないよう設定をしているのですが、コードにかなり無駄がありそうなので今回はそこは省きました。
またPHPに慣れてきた頃に、自動フォロー返し機能と併せて記事を書けたらなぁと思います。


Kanae Sakai
Designer
デザイナー2年目。ガンダムみたいなキーボードが欲しい。
More posts from this author