PHP
Twitter

twitter botを作ってみる(第1回〜twitteroauth導入編)

More than 3 years have passed since last update.

記事の概要

twitter botを作ってみたくなったので、そのときの作業ログ
ここではPHPを使ってtwitter botの開発をしてみようと思います。

下調べ

まずは検索ワードを「twitter bot 開発」とかして
適当にGoogle先生に問い合わせ。こんな記事が出てきました。
http://gihyo.jp/dev/serial/01/twitterbot/0003

なるほど、自作のフルPHPスクリプトで開発するとなると、
OAuthあたりがちょい面倒そうなんですね。

とりわけ、ここは上記の記事を参考に。

githubにtwitteroauthなるものがあるようです。
こちらをお借りしましょう。

事前準備

twitterにbot用のアカウントを作成

メールアドレスが必要となるため、事前に用意しておく。
スクリーンショット 2014-01-09 9.36.42.png

スクリーンショット 2014-01-09 9.43.53.png
できた

作成するアプリケーションの登録

twitterアカウントでデベロッパーサイトにログインする

デベロッパーサイトはこちらから。
https://dev.twitter.com/apps

スクリーンショット 2014-01-09 9.53.54.png

必要事項を記入してアプリケーションを登録する

既にデベロッパーに登録されているアプリケーション名は登録できないので注意

スクリーンショット 2014-01-09 9.59.53.png

登録完了したら、AccessLevelを「Read and write」に変更する

これをやっておかないと、後で以下のようなエラーで弾かれる。

object(stdClass)#5 (2) {
  ["request"]=>
  string(25) "/1.1/statuses/update.json"
  ["error"]=>
  string(34) "Read-only application cannot POST."
}

変更は「Settings」タブより。
スクリーンショット 2014-01-09 10.02.23.png

ここまで準備できたら、アクセストークンを発行する

「Details」タブに戻り、「Create my access token」ボタンをクリックすると、「Access token」と「Access token secret」が発行される。(後でOAuthの認証部分で使用する)

twitteroauthを導入し、プログラムからtwitterに投稿してみる

1.githubのソースコードをFork -> clone

s git clone git@github.com:hoge/twitteroauth.git

中身はこんなん。

s cd twitteroauth/
s ls -l
合計 60
-rw-rw-r-- 1 mtaji mtaji  1100  3月 24 14:26 2013 LICENSE
-rw-rw-r-- 1 mtaji mtaji  5118  3月 24 14:26 2013 README.md
-rw-rw-r-- 1 mtaji mtaji  1503  3月 24 14:26 2013 callback.php
-rw-rw-r-- 1 mtaji mtaji   245  3月 24 14:26 2013 clearsessions.php
-rw-rw-r-- 1 mtaji mtaji   240  3月 24 14:26 2013 config-sample.php
-rw-rw-r-- 1 mtaji mtaji   748  3月 24 14:26 2013 connect.php
-rw-rw-r-- 1 mtaji mtaji  1261  3月 24 14:26 2013 html.inc
drwxrwxr-x 2 mtaji mtaji  4096  3月 24 14:26 2013 images
-rw-rw-r-- 1 mtaji mtaji  1360  3月 24 14:26 2013 index.php
-rw-rw-r-- 1 mtaji mtaji   954  3月 24 14:26 2013 redirect.php
-rw-rw-r-- 1 mtaji mtaji 11913  3月 24 14:26 2013 test.php
drwxrwxr-x 2 mtaji mtaji  4096  3月 24 14:26 2013 twitteroauth

2.twitterに投稿するコードを書く

例えばこんな感じ。意外とシンプル。

s sudo vim TweetTest.php
s cat TweetTest.php 
<?php

    require_once(dirname(__FILE__)."/twitteroauth/twitteroauth/twitteroauth.php");

    // developer info
    $consumerKey       = ‘XXXXXXXXXXXXXXXX;
    $consumerSecret    = 'XXXXXXXXXXXXXXXX';
    $accessToken       = 'XXXXXXXXXXXXXXXX';
    $accessTokenSecret = 'XXXXXXXXXXXXXXXX’;

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

    // oAuth認証を利用し、twitterに投稿する
    $TWITTER_STATUS_UPDATE_URL = "http://api.twitter.com/1.1/statuses/update.json";
    $method  = 'POST';
    $message = 'テスト';

    $response = $oAuth->post('statuses/update', array('status' => $message));

    // 結果出力
    var_dump($response);

?>

3.実行

実行してみたらエラーが。

s php TweetTest.php 
<pre>object(stdClass)#5 (1) {
  ["errors"]=>
  array(1) {
    [0]=>
    object(stdClass)#6 (2) {
      ["message"]=>
      string(23) "Timestamp out of bounds"
      ["code"]=>
      int(135)
    }
  }
}
</pre>

「Timestamp out of bounds」
サーバの時間がずれているのが原因っぽい。

時間を設定。

s sudo date -s "01/09 10:15 2014"
2014年  1月  9日 木曜日 10:15:00 JST

再度実行。
成功すると長ったらしいjsonが返ってくる。

s php TweetTest.php 
<pre>object(stdClass)#5 (22) {
  ["created_at"]=>
  string(30) "Thu Jan 09 01:35:06 +0000 2014"
  ["id"]=>
  int(XXXXXXXXXXXXXX)
  ["id_str"]=>
  string(18) “XXXXXXXXXXXXXXXXXX”
  ["text"]=>
  string(9) "テスト"
・・・

4.表示確認

https://twitter.com/otajisan_bot

スクリーンショット 2014-01-09 10.37.14.png

大丈夫そう!

twitter botを作ってみる(第1回〜twitteroauth導入編)
twitter botを作ってみる(第2回〜応用編-メッセージのランダマイズ)
twitter botを作ってみる(第3回〜作成したスクリプトを自動実行する)