TT-RSS+はてなアンテナ(クッキー再利用版)

昨日PHPで作った、非公開のはてなアンテナのRSSを取得して、
垂れ流すだけのスクリプトを少し改良した。
(詳しい経緯はこちら

接続する度に「ログイン→RSS取得」という手順を踏んでいたのを、
ログイン時に取得したクッキーを置いておいて、
必要なとき以外はログイン処理を実行しないようにしてみた。

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

// はてなにログイン
function LoginHatena($ch) {
	global $data;
	// ログインページのURLを設定
	curl_setopt($ch, CURLOPT_URL, 'https://www.hatena.ne.jp/login'); 
	// POSTメソッド
	curl_setopt($ch, CURLOPT_POST, TRUE);
	// POSTメソッドのデータを設定
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
	// ログイン
	curl_exec($ch);
}

// フィードを取得
function GetFeed($ch) {
	global $data;
	// フィードのURLを設定
	curl_setopt($ch, CURLOPT_URL, 'http://a.hatena.ne.jp/'.$data['name'].'/rss');
	// フィードを取得
	return curl_exec($ch);
}

// クッキーのパスを生成
$cookiePath = sys_get_temp_dir().DIRECTORY_SEPARATOR.'hatena_cookie';

// cURLを初期化
$ch = curl_init();
// 応答を文字列で受け取る
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
// クッキーの保存先を指定
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiePath);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiePath);

$stat = 'ok';
// クッキーのファイルが存在するかどうか
if (!file_exists($cookiePath)) {
$stat = 'login';
	// クッキーのファイルを作成
	touch($cookiePath);
	// 存在しない場合はログイン
	LoginHatena($ch);
}

// フィード取得
$con = GetFeed($ch);
// ステータスを確認
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) === 403) {
$stat = 'forbidden';
	// 認証エラーのため再ログイン
	LoginHatena($ch);
	// フィード取得
	$con = GetFeed($ch);
}

// 結果を出力
echo $con;

// cURLを破棄
curl_close($ch);

echo '<!-- '.$stat.' -->';
?>

基本的にやってることは変わらない。
ただクッキーがあるかないかを確認したり、
403エラーが返ってきたときに再ログインするようにしたり。

正常に取得できてるけど、本当に使い回せてるのか分からないってコトで、
末尾に状態を表すコメントを出力するように。

<!-- ok -->
↑使い回せた
<!-- login -->
↑ログインした
<!-- forbidden -->
↑403エラーが返ってきて再ログインした

確認してると1回目だけloginで、
それ以降はokが返ってきてるから成功っぽい!
出力が不要なら41,44,55,68行目を削ればおk。

これで普段は1回の通信で済むからサーバの負荷も減るし、
取得速度も速くなったはず!

ただログイン失敗時とかエラー処理をしてないから、
なにか起こると、どんな動きするか不明^^;
まぁ普段は問題なく取得出来てるし、
個人で使う分には問題ないんじゃないかな・・・(汗

そもそも、ここまで頑張る必要があったのだろうか・・・?(笑

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

test?

TT-RSS+はてなアンテナ(クッキー再利用版)」への1件のフィードバック

  1. ピンバック: TT-RSS+はてなアンテナ(guid対応版) | みつ(@@@)の雑記

コメントを残す