CSVに定義したメッセージをランダムに投稿させる
前回作成したスクリプトは、固定のメッセージを一つ出力するのみでした。
これを改良し、複数のメッセージをランダムに出力するようにしたいと思います。
1.CSVを読み込むクラスを作成する
下記のような感じ。ここでは「lib」ディレクトリに配置しています。
s mkdir lib
s cd lib
s sudo vim CSVReader.php
s sudo cat CSVReader.php
<?php
class CSVReader{
/**
* CSVファイルを読み込む
*/
public function read($csv){
// CSVを読み込む
$data = file_get_contents($csv);
// 一時ファイルに書き込み
$tmp = tmpfile();
$csv = array();
fwrite($tmp, $data);
rewind($tmp);
// CSVを読み込む
while (($data = fgetcsv($tmp, 0, ',')) !== FALSE) {
$csv[] = $data;
}
fclose($tmp);
return $csv;
}
}
2.前回作成した投稿スクリプトを拡張し、CSVのメッセージを投稿するようにする
下記の2点を追加
- 1で作成したCSVReaderクラスを読み込むように修正
- 読み込んだCSVから、メッセージをランダム(mt_rand(min, max))に出力するよう修正
例えば下記のようになります。
s sudo cat TweetBot.php
<?php
require_once(dirname(__FILE__).'/twitteroauth/twitteroauth/twitteroauth.php');
require_once(dirname(__FILE__).'/lib/CSVReader.php');
// developer info
$consumerKey = ‘XXXXXXXXXXXXXXX’;
$consumerSecret = 'XXXXXXXXXXXXXXX';
$accessToken = 'XXXXXXXXXXXXXXX';
$accessTokenSecret = 'XXXXXXXXXXXXXXX';
$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 = getMessage();
var_dump($message);
$response = $oAuth->post('statuses/update', array('status' => $message));
// 結果出力
var_dump($response);
/**
* 投稿メッセージを取得する
*/
function getMessage(){
$reader = new CSVReader();
$csv = './lib/csv/test.csv';
$csv = $reader->read($csv);
$i = mt_rand(1, 4);
return (isset($csv[$i][1])) ? $csv[$i][1] : '';
}
?>
3.実行
s php TweetTest.php
s php TweetTest.php
うまくいったようです。
5分でできますねw
twitter botを作ってみる(第1回〜twitteroauth導入編)
twitter botを作ってみる(第2回〜応用編-メッセージのランダマイズ)
twitter botを作ってみる(第3回〜作成したスクリプトを自動実行する)