はてブニュースみたいなプログラム
はてブニュースみたいなHTMLを出力するプログラムを作ってみた.
HBnews.ota
ただ単純にXML文書(simplexml_load_file関数)を使ってみたかったので手っ取り早く作れそうなものを選んだつもりです.
PHPもXMLもそんなに触ったことがないので,結構苦労はしたけれど…
本プログラムは自分のはてなブックマークをニュース風に表示してくれるものです.
はてブRSSの中身(XML)
<item rdf:about=""> <title>Title</title> <link>URL</link> <description></description> <content:encoded></content:encoded> <dc:date>time</dc:date> <dc:creator>id</dc:creator> </item>
PHPでXMLを読み取る
<?php $rss = simplexml_load_file("http://b.hatena.ne.jp/n_euler666/rss"); ?>
といっても,この一行で読み取れたりします.すごいw
<?php foreach ($rss->item as $item) { $dc = $item->children('http://purl.org/dc/elements/1.1/'); $link = $item->link; $title = $item->title; $date = $dc->date; } ?>
こんな感じでXMLにアクセスできます.
URLからHTMLを取得しカテゴリを判別する
<?php /////////カテゴリを判定する///////// $URL = 'http://b.hatena.ne.jp/entry/'.$link; $fp = fopen($URL, 'r');//HTML取得 $category = "";//カテゴリを保存する while (! feof($fp)) {//カテゴリを判別する $buffer = fread($fp, 1024) or die("READ"); $point = strpos($buffer, "cname"); if($point != FALSE){ $point = $point+6; for(;;$point++){ if($buffer{$point}=="\"") break; $category = $category.$buffer{$point}; } } } fclose($fp) or die("CLOSE"); ?>
参考にしたはてブニュースの方では違う形でカテゴリを判定していたのですが,利用の仕方がわからなくって(もしくは利用できない)無理矢理はてなのカテゴリを取得しました.
オブジェクトを配列で管理する
<?php class RSSname{ var $link; var $title; function setRSS($link1,$title1){ $this->link = $link1; $this->title = $title1; } function getLink(){ return $this->link; } function getTitle(){ return $this->title; } } $RSSArray = array();//この配列にオブジェクトを突っ込む (中略) /////オブジェクトを生成する///// $newRSS = new RSSname(); $newRSS->setRSS($link,$title); //オブジェクトを管理する array_push($RSSArray,$newRSS); ?>
PHPでオブジェクトを管理してみた.こーゆー管理の仕方でいいのかな?
C言語的にいえば,RSSnameという名前の構造体を作って,new RSSname()って形でmallocして,単方向リストで管理している…そんな感じ.
定期的に起動させる
cron タスクの設定 【 webcron の利用】 | ≡ Drupal Japan ≡
を使って6時間ごとにHTMLファイルを生成してくれるPHPファイルを起動させてくれるように設定しました.
無限ループを作ってsleepさせて一定時間ごとにwakeupさせようかとも思いましたが,サーバーに常駐させるのは如何なものかということで,cronを使う方向で検討しました.
しかしcronを設定するのは,サーバーの設定ファイルを弄らなきゃいけないらしい…無料サーバーじゃ難しい……
っと思ったら面白いサービスを提供しているところがあったんで,使いました.
最新情報はこちら(ソースとか)→作ったプログラム一覧 - WebLab.ota