高橋式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>

できたー。

実際にはあちこち行ったり来たりしてるけど、2時間ほどで遊びツールが出来たのはいいかなーと思う。