高橋式RSSリーダ
すらどでのネタをぱくって作ってみた。
材料:
- PHP5.1.4
- Ethna2.1.2
- HTTP_Request
PHPのインストールにはXAMPPを使った。めんどくさいから。
機能としては、
「特定のRSSのタイトルを高橋メソッドで表示する」
となるので、2画面のアプリ。
アクション
- RSS feed入力
- 高橋画面
動作
RSS feed入力画面で入力されたアドレスからRSSを取得し、ひたすらタイトルの高橋式表示を行う。
作ってみよう
とりあえずいつも通りにadd-projectしてみる。
ethna add-proiject takarss
...ほげほげほげ
コントローラでHTTP_Requestをincludeする。
takarss/app/Takarss_Controller.php: include_once('HTTP/Request.php');
IndexアクションでURLを入力させるので、テンプレートにテキストフィールドを追加する。
takarss/template/ja/index.tpl: <div id="main"> <h2>解析するRSSのURLを入力して下さい</h2> <form method=POST action=index.php> <input type="hidden" name="action_show" value="1"> <input type="text" name="url" size="50" value="http://www3.asahi.com/rss/index.rdf"> <input type="submit" value="解析"> </form> </div>
showアクションにアクションフォーム定義を追加し、バリデータを呼び出す。
takarss/app/action/Show.php: 'url' => array( 'type' => VAR_TYPE_STRING, 'form_type' => FORM_TYPE_TEXT, 'name' => 'URL', 'required' => false, 'regexp' => 'http:.*', ),
ほげほげ・・・
function prepare() { + if ($this->af->validate() > 0) { + return('index'); + } return null; }
URLはセッションにいれとく。
takarss/app/action/Show.php: function perform() { + $es = $this->backend->getSession(); + if (!$es->isstart()) { + $es->start(); + $es->set('url', $this->af->get('url')); + } return 'show'; }
激しく手抜きで作るので、HTTP_Requestでページを取得して、<title>が入っている行だけを抜き出す。
app/view/Show.php: class Takarss_View_Show extends Ethna_ViewClass { /** * 遷移前処理 * * @access public */ function preforward() { + $es = $this->backend->getSession(); + $count = $es->get('count'); + if (strlen($count) == '0') { + $count = 0; + } + + $request = new HTTP_Request($es->get('url')); + + $ec = $this->backend->getConfig(); + if ($ec->get('proxy_host')) { + $request->setProxy($ec->get('proxy_host'), $ec->get('proxy_port')); + } + $response = $request->sendRequest(); + $rss_data = split("\n", $request->getResponseBody()); + + foreach($rss_data as $key => $value) { + if (preg_match('/<title>/', $value)) { + $value = preg_replace('/^\s+|<\/{0,1}title>/', '', $value); + $titles[] = $value; + } + + } + + $this->af->setApp('disp', $titles[$count]); + $count++; + $es->set('count', $count); } }
こそっとプロクシ対応もしてみる。
何個目を表示しているか、をカウントする為に、countをセッションに放り込んでる。
最後に、表示するテンプレートを作成する。
templates/ja/show.tpl: <p align="center"> <a href="index.php?action_show=1"> <font color="black"> <span style="font-size : 80pt">{$app.disp}</span> </font></a></p> <a href="index.php">戻る</a>