gmailの既読フラグについて。
popでbodyをfetchすると、内部的にフラグが立つ。
headerをfetchしただけでは既読にならない。
で、disconnect したタイミングでサーバー側にフラグの設定が反映されるようだ。
いったん既読にマークされてしまうと、api側からメッセージを取得できなくなる。
いや、何か方法があるのかも知れんが、今のところ見つかってない。
ので、メッセージ一覧を取得したら必ずheaderを見てから取得するメッセージを選別してbodyをfetchすること。
以上。
write a note about troubles of programming,working day by day. ま、日々仕事でつまづいた事をメモ書き程度にまとめていきますよー。
2010年5月24日月曜日
2010年5月11日火曜日
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";
?>
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";
?>
2010年4月13日火曜日
Zendのインストールでハマる
Zend Server CEをダウンロードしてきて、インストーラーを起動すると、ウインドウは開くものの、いくら待っても制御が戻ってこない。
タスクマネージャで見てみると、CPUパワーの30%以上消費してる。
処理中なのかと思って1時間程度待ってみたけど変化なし。
強制終了させて改めて考えてみる。
Google先生も適切な答えを発見できず。
ふと。
マルチコア非対応?
まずインストーラを起動して、タスクマネージャーからプロセスを選択。
関係性の設定で割り当てCPUを0のみにしてみる。
大当たり。
インストールできました。
・・・バグじゃねぇかよ。
タスクマネージャで見てみると、CPUパワーの30%以上消費してる。
処理中なのかと思って1時間程度待ってみたけど変化なし。
強制終了させて改めて考えてみる。
Google先生も適切な答えを発見できず。
ふと。
マルチコア非対応?
まずインストーラを起動して、タスクマネージャーからプロセスを選択。
関係性の設定で割り当てCPUを0のみにしてみる。
大当たり。
インストールできました。
・・・バグじゃねぇかよ。
2010年4月9日金曜日
【めも】mysqlでcsv出力
mysqldump --tab=[出力先ディレクトリ名] --fields-terminated-by=, --fields-optionally-enclosed-by=\" databasename tablename
[出力先ディレクトリ名]に
テーブル名.sql
テーブル名.txt
テーブル名.log
の3ファイルが作成される。
[出力先ディレクトリ名]に
テーブル名.sql
テーブル名.txt
テーブル名.log
の3ファイルが作成される。
2010年4月7日水曜日
is_numeric
今まで何にも考えずに使っちゃってた is_numeric。
そのis_numeric()は適切ですか?
もう2年以上前のエントリなんだけど、ちょっと考えさせられた。
PHPの組み込み関数の動作を正確に知らずに思い込みで使っちゃうとエラい目にあうことがある、と。
そもそもPHPなんて動作遅いんだから、オーバーヘッドなんて考えずに文字判定は全部 preg_match でやっちゃう方がいいね。
そのis_numeric()は適切ですか?
もう2年以上前のエントリなんだけど、ちょっと考えさせられた。
PHPの組み込み関数の動作を正確に知らずに思い込みで使っちゃうとエラい目にあうことがある、と。
そもそもPHPなんて動作遅いんだから、オーバーヘッドなんて考えずに文字判定は全部 preg_match でやっちゃう方がいいね。
登録:
投稿 (Atom)