こんにちは。SiMです。
なんとなく、WordPressを魔改造してTwitterBotを作ってみようかなとおもったので、つくってみました。
聞けば答えるちまきBotをつくる
今回モルモットになっていただくキャラクターはちまきちゃん
私が運営している「おたくば!-日本全国オタクバー案内所-」のマスコットキャラクターです。
お恥ずかしながらイラストも私が描いております。
まぁ、ただしゃべるだけのTwitterBotならべつにWPを使わなくてもいいだろうという事で、WPのコンテンツに絡めたBotにしてみます。
この「おたくば!」というサイトは日本全国のオタクバーの情報を集めたポータルサイトなので、ちまきちゃんに話しかけると自動でお店の情報を教えてくれる感じにしたいですね。
大まかな流れとしてはこんなかんじ
- ちまきちゃんのTwitterアカウントを作る
- WPからアカウントにOAUTHする。
- TwitterApiでリプライを取得
- リプライの内容からWP内コンテンツを取得
- 結果を返信する
ってなところで。
ちまきちゃんのTwitterアカウントを作る
まぁこれはいいでしょう。
ふつうにアカウント作るだけです。
API使う場合は電話番号を登録しないといけないのでそこだけ注意ですね。
ついでにアプリケーション登録までしときます。
書き込みをするので、権限はread&writeですね。
とりあえず呼べば答えるちまきちゃんにする
WPからアカウントにOAUTHする。
oauthの方法はいくつかあるんですが、今回はtmhOAuthを使います。
↓ここからDLしてテーマのディレクトリ内にアップロードしておきます。
https://github.com/themattharris/tmhOAuth
で、function.phpに記述
require_once dirname(__FILE__) . '/tmhOAuth-master/tmhOAuth.php'; function chimabot(){ //トークンなどの設定 $tmhOAuth = new tmhOAuth(array( "consumer_key" => 'カスタマーキー', "consumer_secret" => 'カスタマーシークレットキー', "user_token" => 'ユーザートークン', "user_secret" => 'ユーザーシークレット', 'curl_ssl_verifypeer' => false //SSL対応に必要 ));}
とりあえずこれで認証はできます。
認証はできますが、これだけだと特になにもする事がないので、ここからアクションをつくっていきます。
TwitterApiで自分宛のメンションを取得
// 1回に取得する件数を指定 $params = array( 'count' => 50, ); // 最後に取得したIDがあれば、それ以降を取る if( $last_id = (int)get_option('chimabot_since_id', 0) ){ $params['since_id'] = $last_id; } $mentions = $chima->request('GET', 'https://api.twitter.com/1.1/statuses/mentions_timeline.json', $params); // APIはJSON形式で返ってくるのでデコードする $json = $chima->response['response']; $mentions = json_decode($json); if( $mentions ){ $current_latest_id = false; foreach( $mentions as $mention ){ $tweet = $mention->text; $status_id = $mention->id_str; $screen_name = $mention->user->screen_name; $user_id = $mention->user->id; $user_name = $mention->user->name; if( !$current_latest_id ){ $current_latest_id = $status_id; update_option('chimabot_since_id', $current_latest_id ); }
今回は1回に取得するメンションの数を50に設定してありますが、200までで自由に設定できますが、このあとcronで1分に1回起動する処理を追加するのでそんなに多くなくてもいいと思います。
また、前回最後に取得したIDを記憶しておいて、それ以降のメンションのみを取得しています。
そうしないと何回も同じメンションに反応しちゃってすごいことになる。
メンションに対して返信する
自分宛のメンションを取得できたので、今度はそれに対してお返事します。