2010年5月25日火曜日

Service_Twitter と json

手軽に使える、という理由でしばらくはデフォルト設定のまま、json出力で Service_Twitterクラスを使ってました。
でも、なんか挙動がおかしい。

で、調べてみると、みんなstatus idとかが同じ値になってる。
しかも見たことある数字!!

どうやら、statusのidがphpで扱えるintegerの範囲を飛び出してしまっているために、jsonのエンコーダに丸め込まれてしまったらしい。
ははーん。こんな事に納品当日の数時間を無駄に使っちまったぜ!

つわけで、Twitterクラスの標準フォーマットを xmlに変更して一件落着・・・

かと思いきや!

SimpleXMLElementとかいう意味不明なオブジェクト配列で返って来るわ、このオブジェクト、serializeしてセッションに突っ込んだら復元不能でFATAL ERROR吐くわ、もうほんと意味不明。
こんなオブジェクト、誰が作った?

とりあえず、戻り値のSimpleXMLElement配列を通常のオブジェクト配列に変換して対処。

もーめんどくさいなぁ・・・

2010年5月24日月曜日

php => pop + gmail (続)

gmailの既読フラグについて。

popでbodyをfetchすると、内部的にフラグが立つ。
headerをfetchしただけでは既読にならない。

で、disconnect したタイミングでサーバー側にフラグの設定が反映されるようだ。
いったん既読にマークされてしまうと、api側からメッセージを取得できなくなる。

いや、何か方法があるのかも知れんが、今のところ見つかってない。

ので、メッセージ一覧を取得したら必ずheaderを見てから取得するメッセージを選別してbodyをfetchすること。

以上。

2010年5月11日火曜日

facebook

phpからバックグラウンド処理でfacebookに投稿する用事があったので調べたんだが。
facebook connectは使えそうで使えない。
2010年4月に公開された新しい仕組み、Facebook Graph APIを使うとできるっぽい。
oAuth認証が必須になるけど、いったん認証が済んでしまえば好き勝手できる。
ちょっと便利かも。
でもI/F側にoAuthの認証を用意しなければならないのが面倒。

はぁ・・・

メールも返って来なくなったら終わりだよな。
吹っ切るしかないか。

2010年5月6日木曜日

php => pop + gmail

なんだか厄介だ。
atomによる取得は、ラベルの区別が出来て便利だと思ったけど、取得件数が制御できなかったり、なんだかんだで、パス。
で、普通に pop経由で gmail にアクセスすることになったんだけど、pop経由でも、1回に296件のメッセージしか取得できない。
なので、LIST取得してから、bodyを読み込んで connectionをクローズした時点で、bodyを読み込んだメッセージが既読扱いになって、LISTに出てこなくなる。
なんだろうね、この仕様。厳密にはpopとは違うよね。

ま、いいや。今回の使い方ではこのほうが便利だし、メッセージはどーせローカルに保管するから問題ないし。

というわけで、以下、popでgmailから取得するphp。

mb_language("Japanese");
mb_internal_encoding("UTF-8");
ob_end_clean();

require_once("Net/POP3.php");

$GM_POP_SERVER = "ssl://pop.gmail.com";
$GM_POP_PORT = "995";

$USER = "hoge";
$PASS = "foo";

$pop = new Net_POP3();
$num = 1;

while (true) {
$pop->connect($GM_POP_SERVER, $GM_POP_PORT);
$pop->login($USER, $PASS);
$message = $pop->getListing();

if ($message) {
echo $pop->numMsg() . " messages here.\n";
echo $pop->getSize() . " size what unit?\n";

foreach ($message as $k=>$row) {
echo "$num : ".$row["msg_id"] . " (".$row["uidl"].")\n";

$header = $pop->getParsedHeaders($row["msg_id"]);
$body = $pop->getBody($row["msg_id"]);

$subject = mb_decode_mimeheader($header["Subject"]);
$body = mb_convert_encoding($body, mb_internal_encoding(), "auto");

echo "Subject: $subject";
echo "\n";
echo "Date: ".$header["Date"];
echo "\n";

++$num;
}
} else {
break;
}
$pop->disconnect();
}

echo "Retrieved $num message(s).\n";


?>