部門 > PHP > RSSを読んでTwitterに投稿する

東大物理学専攻の講義情報のRSSを
http://www.s.u-tokyo.ac.jp/ja/current/lecture.html?department=grad-phys
から取ってきて、Twitterに投稿するbot(というほどでもない)を4月につくったのだけど、
http://twitter.com/#!/utphys
twitterfeedやGoogleのなんとかとかを使おうとしてもうまくいかないので、仕方ないから自分で書いた。なぜか使い慣れたRubyではなく、PHPで書いてみた。まあGoogle先生に聞いてコピペしただけだが。

ソース

  1. <?php
  2.  
  3. // twitteroauth.phpを読み込む。パスはあなたが置いた適切な場所に変更してください
  4. require_once("abraham-twitteroauth-052b55e/twitteroauth/twitteroauth.php");
  5.  
  6. // Consumer keyの値
  7. $consumer_key = "こんしゅーまーきー";
  8. // Consumer secretの値
  9. $consumer_secret = "こんしゅーまーしーくれっと";
  10. // Access Tokenの値
  11. $access_token = "あくせすとーくん";
  12. // Access Token Secretの値
  13. $access_token_secret = "あくせすとーくんしーくれっと";
  14.  
  15. // OAuthオブジェクト生成
  16. $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
  17.  
  18.  
  19.  
  20. $out_file =fopen("guids.txt","a+");
  21. $i=0;
  22. $guid=array();
  23. $title=array();
  24. $desc=array();
  25. $rssdata = simplexml_load_file("http://www.s.u-tokyo.ac.jp/feed/lecture.xml?department=grad-phys");
  26. foreach ($rssdata->channel->item as $rssrow) {
  27. // print "【";
  28. // print $rssrow->title;
  29. // print "】";
  30. // print $rssrow->description;
  31. // print "http://www.s.u-tokyo.ac.jp/lecture/index.html\n";
  32.  
  33. $guid[$i] = "$rssrow->guid";
  34. $title[$i] = "$rssrow->title";
  35. $desc[$i] = "$rssrow->description";
  36. $i=$i+1;
  37. }
  38. // var_dump($guid);//配列の中身を表示
  39. $i=0;
  40.  
  41. while (isset($guid[$i])){
  42. // while ($guid[$i] != NULL){
  43. // var_dump($guid[$i]
  44. rewind($out_file);//ファイルポインタを最初に戻す http://www.standpower.com/php_analyz.html
  45. while (!feof($out_file)){
  46. $fileline = fgets($out_file);
  47. // print "$fileline";
  48. // print "$guid[$i]\n";
  49. if ($fileline == "$guid[$i]\n"){
  50. // print "break!!\n";
  51. break 1;
  52. }
  53. if (feof($out_file)){
  54. fputs($out_file,"$guid[$i]\n");
  55. $req = $to->OAuthRequest("http://api.twitter.com/1/statuses/update.xml","POST",array("status"=>"【$title[$i]】$desc[$i] http://www.s.u-tokyo.ac.jp/lecture/index.html"));
  56. }
  57. }
  58. $i=$i+1;
  59. }
  60. fclose($out_file);
  61.  
  62. ?>
  63.  

参考にしたサイト

(OK)
名前:
コメント:

すべてのコメントを見る
  • 今のままだと一度Tweetに失敗するとそれっきりなので、工夫したい。$reqをechoしたときに、tweet成功の時は<status>...</status>となるのに対して、失敗の時は<hash>...</hash>となるのを利用したい。なんかtrueかfalseで分かるメソッドもあると思うんだけど、このPHPのやつは詳しくメソッドが載ってるサイトがなさげ。。 -- (OK) 2012-07-05 16:34:18
  • while ($guid[$i] != NULL)としてたのがよくなかったようで、issetを使うように変えた。 cf.【PHP】Undefined offsetエラーの根絶: rikimaruのPG/SEしょーもない備忘録 -- (OK) 2012-06-06 00:44:22
  • だがしかし手元のMacでは動くものの研究室のRedhatや@PAGESのサーバーではうまくいかないので作った意味がない疑惑。 -- (OK) 2012-06-05 23:18:31

タグ:

PHP Twitter
最終更新:2012年06月06日 00:44