...pudding - diary

この日記は https://yapud.hatenablog.com/ に引っ越し中


2008-10-07

_ [Software] XML操作して何をやりたかったか

atom の feed をパースして、必要な箇所だけ表示したかった。

gmail の新着が atom でとれるのだ↓

https://mail.google.com/mail/feed/atom

このなかから必要情報だけ取り出して表示するページ、すなわち新着メールのさわりだけ表示するページを作りたかった。

もちろん複数アカウントまとめてな。

Basic Authentication の情報を、見たいアカウント分変更しながら atom の feed を取れば、新着メールまとめページが作れる!と思ったの。

こんなコード。

$url = 'https://mail.google.com/mail/feed/atom';

$accounts = array(
    'account1' => 'password1',
    'account2' => 'password2',
    'account3' => 'password3',
);

while(list ($username, $password) = each($accounts)) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $xml_data = curl_exec($ch);
    $parser = new XML_Unserializer(array('parseAttributes' => true, 'forceEnum' => array('entry')));
    $parser->unserialize( $xml_data );
    $data = $parser->getUnserializedData();

    if($data['fullcount']>0){
        print("<strong>$username ($data['fullcount'])</strong><br>");
        while(list ($key, $val) = each($data['entry'])) {
            print ('<a href="'. $val['link attr']['href'] .'">'.$val['title'] . "</a><br>\n");
            print ($val['author']['email'] . "<br>\n");
            print ($val['summary'] . "<br>\n");
            }
    }
    print("<hr>\n");
    curl_close($ch);
}


2008年
10月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Twitter : @moriya_jp