PHP と TwitterOAuth で Twitter の Bot を作る

  • 19
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

今回の環境

Raspbian (apache インストール済み)です.ドキュメントルートはここでは /var/www/ になりますが,自分の環境に合わせてください.

Twitter 側の設定

Twitter App を登録してアクセストークンを取得します.
まず, http://apps.twitter.com にアクセスし,Create New App をクリック.
すると以下の画面が出るので,アプリケーション名,アプリの説明,ウェブサイトの URL を入力します.(適当でもだいじょうぶです)
screencapture-apps-twitter-com-app-new-1438069396752.png

そして,Yes, I agree にチェックを入れて,Create your Twitter application をクリック.

※ プロフィールに電話番号を登録していないので登録しましょう.
(いつから電話番号求めるようになったんだろう…)
Screen Shot 2015-07-28 at 16.39.18.png

※※ Description は最低 10 文字のようです.Bot とだけ書いたら怒られましたw
Screen Shot 2015-07-28 at 23.17.34.png

これで Twitter App の登録ができました.
Screen Shot 2015-07-28 at 23.25.48.png

↑の画像に出ている,Keys and Access Tokens をクリックすると Consumer Key, Consumer Secret, Access Token, Access Token Secret が表示されます.
Access Level が Read and write (今回は write でも可)になっていることを確認して,4つの文字列をコピーしてください.

TwitterOAuth を clone し,PHP ファイルを用意

ドキュメントルートで git clone https://github.com/abraham/twitteroauth twitteroauth
そしてドキュメントルートに以下の内容の PHP ファイルを作成します.

twitter-bot.php
<?php
    require_once('twitteroauth/autoload.php');
    require_once('twitteroauth/src/TwitterOAuth.php');
    require_once(dirname(__FILE__) . '/config.php');
    use Abraham\TwitterOAuth\TwitterOAuth;

    $message = "test";
    $connection = new TwitterOAuth(consumer_key, consumer_secret, access_token, access_token_secret);
    $request = $connection->post("statuses/update", array("status"=> $message ));
    var_dump($request);
?>
config.php
<?php
define("consumer_key", "コピーした consumer_key");
define('consumer_secret', 'コピーした consumer_secret');
define('access_token', 'コピーした access_token');
define('access_token_secret', 'コピーした access_token_secret');
?>

するとディレクトリ構造は以下のようになります.

/var/www
├── config.php
├── index.html
├── phpinfo.php
├── twitter-bot.php
└── twitteroauth
    ├── autoload.php
    ├── composer.json
    ├── LICENSE.md
    ├── phpmd.xml
    ├── phpunit.xml
    ├── README.md
    ├── src
    │   ├── cacert.pem
    │   ├── Config.php
    │   ├── Consumer.php
    │   ├── HmacSha1.php
    │   ├── Request.php
    │   ├── Response.php
    │   ├── SignatureMethod.php
    │   ├── Token.php
    │   ├── TwitterOAuthException.php
    │   ├── TwitterOAuth.php
    │   ├── Util
    │   │   └── JsonDecoder.php
    │   └── Util.php
    └── tests
        ├── AbstractSignatureMethodTest.php
        ├── bootstrap.php
        ├── ConsumerTest.php
        ├── HmacSha1Test.php
        ├── kitten.jpg
        ├── sample_env
        ├── TokenTest.php
        ├── TwitterOAuthTest.php
        └── Util
            └── JsonDecoderTest.php

5 directories, 29 files

ここまで来たらドキュメントルートで php twitter-bot.php を叩きます.
長々とログが出てきて,ツイートされれば成功です.

Screen Shot 2015-07-29 at 16.23.00.png

遭遇したエラー

その1

PHP Notice:  Use of undefined constant CURLOPT_SSL_VERIFYPEER - assumed 'CURLOPT_SSL_VERIFYPEER' in /var/www/twitteroauth/src/TwitterOAuth.php on line 304
PHP Notice:  Use of undefined constant CURLOPT_TIMEOUT - assumed 'CURLOPT_TIMEOUT' in /var/www/twitteroauth/src/TwitterOAuth.php on line 305
PHP Notice:  Use of undefined constant CURLOPT_URL - assumed 'CURLOPT_URL' in /var/www/twitteroauth/src/TwitterOAuth.php on line 306
PHP Notice:  Use of undefined constant CURLOPT_USERAGENT - assumed 'CURLOPT_USERAGENT' in /var/www/twitteroauth/src/TwitterOAuth.php on line 307
PHP Notice:  Use of undefined constant CURLOPT_ENCODING - assumed 'CURLOPT_ENCODING' in /var/www/twitteroauth/src/TwitterOAuth.php on line 308
PHP Notice:  Use of undefined constant CURLOPT_POST - assumed 'CURLOPT_POST' in /var/www/twitteroauth/src/TwitterOAuth.php on line 323
PHP Notice:  Use of undefined constant CURLOPT_POSTFIELDS - assumed 'CURLOPT_POSTFIELDS' in /var/www/twitteroauth/src/TwitterOAuth.php on line 324
PHP Fatal error:  Call to undefined function Abraham\TwitterOAuth\curl_init() in /var/www/twitteroauth/src/TwitterOAuth.php on line 339

解決方法

curl に関する変数や関数が定義されていないエラーのようなので,php5-curl をインストールします.
php5-curl をインストールし php.ini に extension=curl.so を書いて apache を再起動します.
http://stackoverflow.com/questions/8014482/php-curl-enable-linux

その2

PHP Fatal error:  Call to private method Abraham\TwitterOAuth\TwitterOAuth::OAuthRequest() from context ''

解決方法

private method を呼べないエラーみたいです.
TwitterOAuth.php の private function oAuthRequest($url, $method, $parameters) の private を消します.

参考

誰でも作れる「つぶやきbot」や「ダイレクトメッセージ送信機」 PHPでTwitterを操作する方法【TwitterAPI 1.1 REST&TwitterOAuth】 ≫ 使い方・方法まとめサイト - usedoor