TT-RSS+はてなアンテナ

RSSに対応しているサイトは、
そのまま「Tiny Tiny RSS」(以下TT-RSS)に設定しておけば、
常に最新の情報を取得出来ているんだけど、
RSSに対応していないサイトは、自動で巡回して
更新を知らせてくれる「はてなアンテナ」を使ってる。

一応はてなアンテナのアンテナを更にRSSで出力する機能があって、
TT-RSSでアンテナもまとめて見られると良いんだけど・・・
はてなアンテナ RSS
アンテナを非公開に設定してるせいか、
ログインしておかないとフィードが開けない・・・!
Googleリーダーを使ってたときは、この時点で諦めていたけど、
TT-RSSだとフィードの設定で認証情報を入力出来る!
で、「もしかして!」と思って、はてなアンテナの認証を入れてみたけど、
やっぱりダメだった・・・
どうもはてなアンテナの認証には使えない模様(´・ω・`)

少し調べてみると、こんなサービスを見つけた。
はてなアンテナRSS
非公開のアンテナもRSS出力してくれる!

・・・が、よく見ると外部サービスだし、
そこにパスワードとか入れるのはちょっと・・・
と思いつつも使ってみたんだけど、
生成されるデータがちょっとおかしい。
TT-RSSに登録してもエラー・・・
どうも末尾にゴミがあるのが原因っぽい。
HTMLを解析して動的に生成してるっぽいから、
ちょっとした違いですぐにゴミが出ちゃうよね・・・

でも間に立って代わりに出力してくれるのは悪くない。
で、考えた挙げ句、ウチのサーバに
「はてなにログイン→公式のフィードを取得して出力」
をやらせれば良いじゃん!って考えに辿り着く!

早速色々なサイトを参考にしつつ、PHPでこさえてみた。
ログインにクッキーを使うのでcURL必須。
(改良版は、こちら

<?php
// ログイン情報
$data = array(
	'name' => 'はてなIDを入れてネ',		// はてなID
	'password' => 'パスワードを入れてネ'	// パスワード
);

// cURLを初期化
$ch = curl_init();
// クッキーを保存するための一時ファイルを作成
$meta = stream_get_meta_data($fp = tmpfile());

// URLを設定
curl_setopt($ch, CURLOPT_URL, 'https://www.hatena.ne.jp/login'); 
// 応答を文字列で受け取る
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
// クッキーの保存先を指定
curl_setopt($ch, CURLOPT_COOKIEFILE, $meta['uri']);
// POSTメソッド
curl_setopt($ch, CURLOPT_POST, TRUE);
// POSTメソッドのデータを設定
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// ログイン
curl_exec($ch);

// 応答をそのまま出力
curl_setopt($ch, CURLOPT_RETURNTRANSFER, FALSE);
// フィードのURLを設定
curl_setopt($ch, CURLOPT_URL, 'http://a.hatena.ne.jp/'.$data['name'].'/rss');
// フィードを取得
curl_exec($ch);

// 一時ファイルを破棄
fclose($fp);
// cURLを破棄
curl_close($ch);
?>

これだけ。cURLって楽チンだなあー
やってることはログイン情報をPOSTして、
受け取ったクッキーを使ってフィードを取得して垂れ流してるだけ。
これなら公式のフィードをそのまま出してるだけだから、
仕様変更の影響も受けにくいし、
余計な解析処理等が無いからサーバへの負荷も少ない。

他のサイト見てると、1回の通信毎にいちいちcURLを破棄して
生成し直してるけど、使い回しても問題なさそう?
そっちの方が効率良さそう。
どうせならクッキーもメモリ上で再利用してくれれば良いのにー

使い方は、cURLの使えるPHPが入ったサーバに配置して、
4,5行目のはてなID、パスワードを書き換えるだけで、
どんな環境でも使えるんじゃないかな? 多分。
勿論アンテナの中身が丸見えになるので配置場所には注意!

これをTT-RSSに登録すればバッチリ取得も出来た!

じゃ、ゲームして寝るー
バイニー☆

test?

TT-RSS+はてなアンテナ」への1件のフィードバック

  1. ピンバック: TT-RSS+はてなアンテナ(クッキー再利用版) | みつ(@@@)の雑記

コメントを残す