PHP

PHP と TwitterOAuth で Twitter の Bot を作る

More than 3 years have passed since last update.


今回の環境

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