るいすときのこの物語

オタクエンジニアの雑記

「PHP Simple HTML DOM Parser」を使って、田村ゆかりさんの更新通知的なのを作ってみた


phplogo-highres

PHPで何かできる事ないかなと思いまして、これが思いついた。

PHP Simple HTML DOM Parser というのはPHPでスクレイピングするライブラリですごい便利だった。 使い方は http://so-zou.jp/web-app/tech/programming/php/library/simplehtmldom/

田村ゆかりさんの公式サイトの更新通知をTwitterにツイートするようなのです。 http://www.tamurayukari.com/

cron か何かで数分単位で実行すれば最速通知完璧だね♡() と思って放置された Raspberry Pi に入れようと思ったけど Microsoft Azure の Monaco が便利すぎて

どうにか出来ないかな~と思ったら Web cron を思いついて、調べていくと GAS(Google Apps Script) というのを知った。 よく分かってませんが多分 javascript 版でスケジュール機能がある。 Web cron サービスの javascript 版みたいな(知らない)

javascript で定期的に PHP を叩くようにしたんですけど、書いた javascript をどっから開くの分からなくて困惑してる...。実行はされてるけど。

[php] <?php require_once 'simple_html_dom.php';

$html = file_get_html( 'http://www.tamurayukari.com/' ); //比較対象更新日時 if(is_file('date.txt')){ $value = file_get_contents('date.txt'); }else{ require_once("twitteroauth.php"); $sConsumerKey = ""; $sConsumerSecret = ""; $sAccessToken = ""; $sAccessTokenSecret = ""; $twObj = new TwitterOAuth($sConsumerKey,$sConsumerSecret,$sAccessToken,$sAccessTokenSecret); //Tweet内容 $sTweet = "@lu_iskun 何かしらエラーが出てるよ"; $vRequest = $twObj->OAuthRequest("https://api.twitter.com/1.1/statuses/update.json","POST",array("status" => $sTweet)); } //最終更新日時 $date = $html->find('dl.#news dt', 0)->plaintext; //更新内容 $tmp_content = $html->find('dl.#news dd', 0)->plaintext; //置き換え処理 $title = str_replace("更新しました", "更新されました", $tmp_content);

if($value == $date){ //何もしない }else if($value != $date){ //Twitterへ吐き出し処理 require_once("twitteroauth.php"); $sConsumerKey = ""; $sConsumerSecret = ""; $sAccessToken = ""; $sAccessTokenSecret = ""; $twObj = new TwitterOAuth($sConsumerKey,$sConsumerSecret,$sAccessToken,$sAccessTokenSecret); //Tweet内容 $sTweet = "♡♡【田村ゆかり公式サイト更新】♡♡\n".$title."\n詳しくは公式サイトへ http://tamurayukari.com"; $vRequest = $twObj->OAuthRequest("https://api.twitter.com/1.1/statuses/update.json","POST",array("status" => $sTweet)); //date.txt の内容を更新日時に変更 file_put_contents('date.txt', $date); }

?> [/php]

更新の際の処理は id=news の <dl> の中の <dt> だけを抜き出して、これを基準となる日時と比較して~という流れにした。 ずっと、このコードの中に埋め込んでて更新があった際に更新日時を書き換えるってどうしたらいいんだ・・・と考えてた。 日時だけが記述されたファイルを作成すれば(という助言をもらった)出来た。ずっとここの処理で迷ってた。