MySQLからツイートを選択してツイートするPHPコード
この記事の所要時間:約9分34秒
Twitter escultura de arena / Rosaura Ochoa
Apple信者の毒舌な妹botを作ったので、そこでわかったことなどをメモ。
目的や前提は以下のとおり。
- cronで2時間毎に実行し、
/var/log/autotweet.log
にログを記録 - ツイートはMySQLデータベースから、重み付きランダムで取り出す
- 呟くTwitterアカウントは既にdev.twitter.comに登録済み
- abraham氏のtwitteroauthライブラリを使用
- 重み付きランダムを取り出す関数はweighted_random(別エントリ)
MySQLのユーザbot
、パスワードpassword
、データベースtwitterbot
、テーブルtweets
に、例えば以下のようにツイートを保存しておく。date
はタプルを追加した日付、num_of_times
はつぶやいた回数。
ID | tweet | date | num_of_times |
1 | おはよう! | 2013-06-13 | 0 |
2 | こんにちは! | 2013-06-13 | 4 |
3 | こんばんは! | 2013-06-15 | 2 |
4 | そう、iPhoneならね | 2013-06-16 | 1 |
API1.0は先日廃止されたので、twitteroauth-master/twitteroauth/twitteroauth.php
の21行目のpublic $host
をhttps://api.twitter.com/1.1/
にした。twitteroauth-master
ディレクトリを同じディレクトリに入れておく。botfunction.php
という外部ファイルをrequireしていて、その中にweighted_random
という関数が入っている。中身については別エントリで。
<?php print date('Y-m-d H:i:s '); // twitteroauthを読み込む require_once("twitteroauth-master/twitteroauth/twitteroauth.php"); // 外部関数を読み込み require_once("botfunction.php"); // dev.twitter.comを見るとわかるキーたち $consumer_key = "************************"; $consumer_secret = "************************"; $access_token = "************************"; $access_token_secret = "************************"; // OAuthオブジェクト生成 $to = new TwitterOAuth( $consumer_key, $consumer_secret, $access_token, $access_token_secret); // MySQLに接続 $MySQLlink = mysql_connect('localhost','bot','password'); if (!$MySQLlink) { die('MySQLへの接続に失敗しました。'); } // データベースの選択 $db_selected = mysql_select_db('twitterbot',$MySQLlink); if (!$db_selected) { die('データベースの選択に失敗しました。'); } // ツイートを重み付きランダムに取得 $tweetnum = mysql_query('SELECT ID,num_of_times FROM tweets ORDER BY ID;'); // ツイートIDとつぶやかれた回数の読み込み $itr = 0; while ($row = mysql_fetch_assoc($tweetnum,MYSQL_NUM) ) { $num_of_times[$itr] = $row[1]; $itr = $itr + 1; } // 回数の逆?を重みに。 // つぶやかれた回数が少ないものに大きな重みをもたせる。 foreach ($num_of_times as $key => $num) { $weights[$key] = max($num_of_times)-$num+1; } $tmp = weighted_random($weights); $tweetid = $tmp+1; //インデックスを1始まりに // 改めてツイート内容を取得 $select_tweet = "SELECT tweet FROM tweets WHERE ID = $tweetid ;"; $tweet_ = mysql_fetch_assoc(mysql_query($select_tweet)); $tweet = $tweet_['tweet']; // TwitterへPOST $req = $to->OAuthRequest( "https://api.twitter.com/1.1/statuses/update.json", "POST", array("status"=>"$tweet") ); // Twitterから返されたJSONをデコードする $result = json_decode($req); // echo "<pre>"; // var_dump($result); // ツイート回数を更新 $numoftimes = mysql_fetch_assoc( mysql_query( 'SELECT num_of_times AS num FROM tweets WHERE ID = '."$tweetid".';' ) ); $numoftimes = (int) $numoftimes['num']; $increment = 'UPDATE tweets SET num_of_times = ' ."$numoftimes+1".' WHERE ID = '."$tweetid".' ;'; $count_twinum = mysql_query($increment); if ($count_twinum) { $tmp = $numoftimes +1; print "Tweet $tweetid was incremented to $tmp.\n"; } else { print "Cannot incremented."; }; $close_flag = mysql_close($MySQLlink); if (!$close_flag) die('Cannot disconnect MySQL.'); } ?>
非常に粗いですが、今のところ問題なく動いてくれている。
自動でツイートさせたければcronに登録する。コードは/usr/share/php
に入れておくとする。もちろんtwitteroauth-masterも。エラー以外のログは/var/log/autotweet.log
に書くとする。エラーが出たらcronから登録したメールアドレスにメールが届くようになっている。
# crontab -e (cronのエディタ) # 毎日の深夜以外に一時間ごとに実行 00 6-23 * * * /usr/bin/php /usr/share/php/autotweet.php 1 >> /var/log/autotweet.log
ツイートを追加はphpMyAdminを使ってブラウザ上で行うので非常に便利。ツイートの内容ごとにテーブルを分けて、一日につぶやかれる内容のバランスをコントロールするのも良いかもしれない。
[amazonjs asin=”486146188X” locale=”JP” title=”誰でもできるTwitter Botの作り方―人気キャラにつぶやかせる”]
関連記事
-
NVR500にプロバイダの固定IPサービスを設定する手順
ついに私も、固定IPサービスを使うことにしました。ルータへの設定で若干詰まったのでメモ。自鯖
-
2dayで新規事業を創る 初めてインターンというものに参加した
昨日一昨日と、とあるベンチャー企業の二日間のサマーインターンに行ってきました。 インターン
-
新サーバにMaildirディレクトリを移動させたときのトラブル
サーバを作りなおした件で、Postfix・Dovecotサーバもリストアしました。 新サーバで
-
USB外付けHDDをext4にフォーマットする手順
前エントリの玄人志向のHDDケースを買った。で出来上がった外付けHDDをフォーマットして、Cent
-
iPhone3GSを綾波レイ仕様にしてみた。
iPhone5を買ってからも、音楽やポッドキャストを聞くときはiPhone3GSがまだ使えるのでまだ
-
3月に受けたTOEICの結果が返ってきた。
TOEICの結果が封筒で返ってきた。860点だった。 今まで2回受けたが、どちらも全くの無勉強
-
最強ツールと誉れの高いXtraFinderをインストールしてみたが・・・・
今日はMacのお話。 XtraFinderというものがすごいらしい。 http://www.
-
ApacheでSSLを有効に(mod_ssl)
動機は、ownCloudをインストールしたこと。自分しか使わないとはいえブラウザでアクセスできるオン
-
BackWPupでWordPressブログの全てをリストアした
サーバの再構築をした関係で、WordPressブログ(このブログ)の移動をしたのでその時のログ。以下
-
DockからHDMIに出力するコネクタ
Keynoteから研究室の大型ディスプレイに出力して発表したくて前に買いました。 Apple