twitter BOT作成しようとしてみた その2
追記 4/14
色々やってみた結果、セッションは使用できない事が判明!!(SESSION IDが保持できないため)
なので、下記はあんまり当てになりませんが、せっかく書いたので、とりあえず置いときます
ちゃんと動くのはこちら→
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
自分の好きなブログのRSSを取得して、ツイートできるようにしようと思います。
1,ここから最新版をダウンロードします
2,外部ファイルなのでvenderに展開したファイルを入れます
→rss_cache.inc
→rss_fetch.inc
→rss_parse.inc
→rss_utils.inc
→extlib
★重要
・venderでincファイルも読み込めるみたいですが、後々なにかとややこしそうだったので
incファイルの拡張子を全部phpに変えてしまいます
extlibフォルダに入ってるincファイルもです・incファイルの中でincファイルをrequireしているので、その部分もphpに変更してしまいます
これで、RSSを取得する準備はできたので、コントローラで色々いじっていきます
・app/controllers/tweets_controller.php
前回で続きでいえばfunction seach()に取得する文を記述します。function search(){
//rssを取得するために読み込みます
App::import('Vendor', 'rss_fetch');//文字コードセットするみたいです
define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');
//好きなブログのrssのURLを記述(これはここのrssです)
$url = 'http://d.hatena.ne.jp/megane_bomb/rss';
$rss = fetch_rss($url);
//ブログタイトルはこんな感じでとれます
$title = $rss->channel['title'];
echo "<h3>$title</h3>";//セッションで記事のタイトルを保存して、
最新と保存しているの記事の比較で記事の更新の有無を確認します
//セッションが入っているか確認。
入っていなかったら書き込む、入っていたら最新のタイトルと比較する
if(!$this->Session->check('title')){
$title = h($rss->items['0']['title']);
$this->Session->write('title',$title);
}else{
//セッションがはいっていて、最新の記事と一致しなかったら、ツイートする。
if(h($rss->items['0']['title']) !== $this->Session->read('title')){
$url = h($rss->items['0']['link']);
$text = $title.$url;
$this->Twitter = ConnectionManager::getDataSource('twitter');
//ここでツイートしてます
$this->Twitter->status_update($text);
//念のため削除してから、書き込む
unset( $_SESSION["title"] );
$this->Session->write('title',$title);
}
}
}
これで大丈夫だとおもうんだけどなー・・・
なぜかわからないけど、記事を更新してもrssが反映してくれない。
キャッシュも消したけど、変わらず。
rssって反映されるまで、時間がかかるのかな><?
とりあえず、これをタスクスケジューラーで
時間ごとに呼び出してあげればきっとBOTが完成するはず!!
タスクスケジューラー使うのはわかるけど、どのファイルを指定すればいいのかわからない。