フォト蔵のRSSからclippへAtomPub経由でインポートしてみる
clippがこっそりアンドキュメントなAPI公開してて、マニュアル書いたら正式にリリースしたいとか言ってるので、その前に同じ会社特権でいじってみました。(一応、日記にかいていい?って聞いたらOKもらいました。)
今回、Feedの読み込みに何つかおうかなーと悩んでたのですが、ZendFrameworkをいじってみたかったのでZend_Feed周りを使ってみました。
clipp api自体は、AtomPub+clippのネームスペースな実装になってるみたいです。
眠たいのでとりあえずソース全文です。
<?php require_once 'Zend/Feed.php'; require_once 'Zend/Feed/Entry/Atom.php'; require_once 'Zend/Http/Client.php'; try { $feed = Zend_Feed::import("http://photozou.jp/feed/photo_list/44520/all.xml"); } catch (Zend_Feed_Exception $e) { echo $e->getMessage(); } $client = new Zend_Http_Client(); $client->setAuth('account@example.com', 'password', Zend_Http_Client::AUTH_BASIC); // Zend_Feed_Entry_Atom bug http://framework.zend.com/issues/browse/ZF-3418 $client->setHeaders('Content-Type', 'application/atom+xml'); Zend_Feed::setHttpClient($client); foreach ($feed as $item) { $entry = new Zend_Feed_Entry_Atom(); $entry->{'title'} = $item->title(); $entry->{'link'} = $item->link(); $entry->{'link'}['rel'] = 'related'; $entry->{'description'} = $item->description(); $entry->{'description'}['type'] = 'html'; Zend_Feed::registerNamespace('clipp', 'http://clipp.in/service/ns'); $entry->{'clipp:imageAddress'} = ''; $entry->{'clipp:imageAddress'}['href'] = $item->{'media:group'}->{'media:content'}['url']; $entry->{'clipp:quote'} = $item->description(); $entry->{'clipp:quote'}['type'] = 'html'; $entry->{'clipp:publicity'} = ''; $entry->{'clipp:publicity'}['value'] = '2'; //プライベート try { $entry->save('http://clipp.in/service/add'); } catch(Exception $e) { print $e->getMessage(); } break; //自重 }
Feedの読み込みは、
$feed = Zend_Feed::import("http://photozou.jp/feed/photo_list/44520/all.xml");
ここ一行だけですおもったより楽チンでした。
あとは、HTTPClientに認証するためのユーザ名パスワードを入れて(clippのAPIの認証は、Basic認証です。)Zend_Feed_Entry_Atomに値を配置してsaveメソッドを実行するだけです。
わかってみるとえれー簡単でした。(細かくはまりどころはあったのですが・・。)
環境
- PHP 5.2.5
- ZendFramework 1.5.2
ちなみに
clipp.in完全招待制ではなくて、申し込むとしばらくするとメールが届くようになっているのでぜひ、お申し込みください。という宣伝エントリ。