1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 20854 -->
4 <sect1 id="zend.service.delicious">
5 <title>Zend_Service_Delicious</title>
6 <sect2 id="zend.service.delicious.introduction">
9 <classname>Zend_Service_Delicious</classname> は、
10 <ulink url="http://del.icio.us">del.icio.us</ulink>
11 の <acronym>XML</acronym> および <acronym>JSON</acronym>
12 ウェブサービスを使用するためのシンプルな <acronym>API</acronym> です。
13 このコンポーネントによって、del.icio.us への投稿のうち、
14 権限を持っているものについての読み書きが可能になります。
15 全ユーザの公開データへの読み込み専用のアクセスも可能です。
17 <example id="zend.service.delicious.introduction.getAllPosts">
18 <title>すべての投稿の取得</title>
19 <programlisting language="php"><![CDATA[
20 $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
21 $posts = $delicious->getAllPosts();
23 foreach ($posts as $post) {
25 echo "タイトル: {$post->getTitle()}\n";
26 echo "URL: {$post->getUrl()}\n";
31 <sect2 id="zend.service.delicious.retrieving_posts">
34 <classname>Zend_Service_Delicious</classname> には、投稿を取得するメソッドとして
35 <methodname>getPosts()</methodname>、<methodname>getRecentPosts()</methodname>
36 および <methodname>getAllPosts()</methodname> の三種類があります。
37 これらはすべて <classname>Zend_Service_Delicious_PostList</classname>
38 のインスタンスを返します。ここに、取得したすべての投稿が含まれます。
40 <programlisting language="php"><![CDATA[
42 * 引数にマッチする投稿を取得する。日付や url を省略した場合は
45 * @param string $tag オプションで、タグによる絞込みを行う
46 * @param Zend_Date $dt オプションで、日付による絞込みを行う
47 * @param string $url オプションで、url による絞込みを行う
48 * @return Zend_Service_Delicious_PostList
50 public function getPosts($tag = null, $dt = null, $url = null);
55 * @param string $tag オプションで、タグによる絞込みを行う
56 * @param string $count 返す投稿の最大数 (デフォルトは 15)
57 * @return Zend_Service_Delicious_PostList
59 public function getRecentPosts($tag = null, $count = 15);
64 * @param string $tag オプションで、タグによる絞込みを行う
65 * @return Zend_Service_Delicious_PostList
67 public function getAllPosts($tag = null);
70 <sect2 id="zend.service.delicious.postlist">
71 <title>Zend_Service_Delicious_PostList</title>
73 <classname>Zend_Service_Delicious</classname> のメソッド <methodname>getPosts()</methodname>、<methodname>getAllPosts()</methodname>、
74 <methodname>getRecentPosts()</methodname> および <methodname>getUserPosts()</methodname>
78 データへのアクセスを簡単に行うため、このクラスは
79 <code>Countable</code>、<code>Iterator</code> および
80 <code>ArrayAccess</code> の三つのインターフェイスを実装しています。
82 <example id="zend.service.delicious.postlist.accessing_post_lists">
83 <title>投稿一覧へのアクセス</title>
84 <programlisting language="php"><![CDATA[
85 $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
86 $posts = $delicious->getAllPosts();
92 foreach ($posts as $post) {
94 echo "タイトル: {$post->getTitle()}\n";
95 echo "URL: {$post->getUrl()}\n";
98 // 配列風のアクセス方式で投稿を取得します
99 echo $posts[0]->getTitle();
104 メソッド <methodname>ArrayAccess::offsetSet()</methodname> および <methodname>ArrayAccess::offsetUnset()</methodname>
105 は、この実装では例外をスローします。つまり、<methodname>unset($posts[0]);</methodname>
106 や <code>$posts[0] = 'A';</code> といったコードを書くと例外が発生するということです。
107 というのも、これらのプロパティは読み込み専用だからです。
111 投稿一覧オブジェクトには、二種類のフィルタリング機能が組み込まれています。
112 タグによるフィルタリングと、<acronym>URL</acronym> によるフィルタリングです。
114 <example id="zend.service.delicious.postlist.example.withTags">
115 <title>タグの指定による投稿一覧のフィルタリング</title>
117 特定のタグで投稿を絞り込むには、<methodname>withTags()</methodname> を使用します。
118 ひとつのタグでだけ絞り込みを行う際に便利なように、
119 <methodname>withTag()</methodname> も用意されています。
121 <programlisting language="php"><![CDATA[
122 $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
123 $posts = $delicious->getAllPosts();
125 // タグ "php" および "zend" が指定されている投稿のみを表示します
126 foreach ($posts->withTags(array('php', 'zend')) as $post) {
127 echo "タイトル: {$post->getTitle()}\n";
128 echo "URL: {$post->getUrl()}\n";
132 <example id="zend.service.delicious.postlist.example.byUrl">
133 <title>URL の指定による投稿一覧のフィルタリング</title>
135 指定した正規表現にマッチする <acronym>URL</acronym> で投稿を絞り込むには
136 <methodname>withUrl()</methodname> メソッドを使用します。
138 <programlisting language="php"><![CDATA[
139 $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
140 $posts = $delicious->getAllPosts();
142 // URL に "help" を含む投稿のみを表示します
143 foreach ($posts->withUrl('/help/') as $post) {
144 echo "タイトル: {$post->getTitle()}\n";
145 echo "URL: {$post->getUrl()}\n";
150 <sect2 id="zend.service.delicious.editing_posts">
152 <example id="zend.service.delicious.editing_posts.post_editing">
154 <programlisting language="php"><![CDATA[
155 $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
156 $posts = $delicious->getPosts();
159 $posts[0]->setTitle('新しいタイトル');
164 <example id="zend.service.delicious.editing_posts.method_call_chaining">
165 <title>メソッドコールの連結</title>
167 すべての設定用メソッドは post オブジェクトを返すので、
168 「流れるようなインターフェイス」を使用してメソッドコールを連結できます。
170 <programlisting language="php"><![CDATA[
171 $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
172 $posts = $delicious->getPosts();
174 $posts[0]->setTitle('新しいタイトル')
180 <sect2 id="zend.service.delicious.deleting_posts">
184 投稿の URL を指定するか、post オブジェクトの
185 <methodname>delete()</methodname> メソッドを実行するかのいずれかです。
187 <example id="zend.service.delicious.deleting_posts.deleting_posts">
189 <programlisting language="php"><![CDATA[
190 $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
193 $delicious->deletePost('http://framework.zend.com');
195 // あるいは、post オブジェクトのメソッドをコールします
196 $posts = $delicious->getPosts();
199 // deletePost() を使用する、もうひとつの方法
200 $delicious->deletePost($posts[0]->getUrl());
204 <sect2 id="zend.service.delicious.adding_posts">
205 <title>新しい投稿の追加</title>
207 投稿を追加するには <methodname>createNewPost()</methodname> メソッドをコールする必要があります。
208 このメソッドは <classname>Zend_Service_Delicious_Post</classname> オブジェクトを返します。
209 投稿を編集したら、それを del.icio.us のデータベースに保存するために
210 <methodname>save()</methodname> メソッドをコールします。
212 <example id="zend.service.delicious.adding_posts.adding_a_post">
214 <programlisting language="php"><![CDATA[
215 $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
217 // 新しい投稿を作成し、保存します (メソッドコールの連結を使用します)
218 $delicious->createNewPost('Zend Framework', 'http://framework.zend.com')
219 ->setNotes('Zend Framework Homepage')
222 // 新しい投稿を作成し、保存します (メソッドコールの連結を使用しません)
223 $newPost = $delicious->createNewPost('Zend Framework',
224 'http://framework.zend.com');
225 $newPost->setNotes('Zend Framework Homepage');
230 <sect2 id="zend.service.delicious.tags">
232 <example id="zend.service.delicious.tags.tags">
234 <programlisting language="php"><![CDATA[
235 $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
238 print_r($delicious->getTags());
240 // タグ ZF の名前を zendFramework に変更します
241 $delicious->renameTag('ZF', 'zendFramework');
245 <sect2 id="zend.service.delicious.bundles">
247 <example id="zend.service.delicious.bundles.example">
249 <programlisting language="php"><![CDATA[
250 $delicious = new Zend_Service_Delicious('ユーザ名', 'パスワード');
253 print_r($delicious->getBundles());
255 // someBundle というバンドルを削除します
256 $delicious->deleteBundle('someBundle');
259 $delicious->addBundle('newBundle', array('tag1', 'tag2'));
263 <sect2 id="zend.service.delicious.public_data">
266 del.icio.us のウェブ <acronym>API</acronym> を使用すると、全ユーザの公開データにアクセスできるようになります。
268 <table id="zend.service.delicious.public_data.functions_for_retrieving_public_data">
269 <title>公開データを取得するためのメソッド</title>
280 <entry><methodname>getUserFans()</methodname></entry>
281 <entry>あるユーザのファンを取得します</entry>
285 <entry><methodname>getUserNetwork()</methodname></entry>
286 <entry>あるユーザのネットワークを取得します</entry>
290 <entry><methodname>getUserPosts()</methodname></entry>
291 <entry>あるユーザの投稿を取得します</entry>
292 <entry>Zend_Service_Delicious_PostList</entry>
295 <entry><methodname>getUserTags()</methodname></entry>
296 <entry>あるユーザのタグを取得します</entry>
305 <classname>Zend_Service_Delicious</classname> オブジェクトの作成時に
306 ユーザ名とパスワードを指定する必要はありません。
309 <example id="zend.service.delicious.public_data.retrieving_public_data">
310 <title>公開データの取得</title>
311 <programlisting language="php"><![CDATA[
313 $delicious = new Zend_Service_Delicious();
315 // someUser のファンを取得します
316 print_r($delicious->getUserFans('someUser'));
318 // someUser のネットワークを取得します
319 print_r($delicious->getUserNetwork('someUser'));
321 // someUser のタグを取得します
322 print_r($delicious->getUserTags('someUser'));
325 <sect3 id="zend.service.delicious.public_data.posts">
328 公開投稿を <methodname>getUserPosts()</methodname> メソッドで取得すると、
329 <classname>Zend_Service_Delicious_PostList</classname> オブジェクトが返されます。ここには
330 <classname>Zend_Service_Delicious_SimplePost</classname> オブジェクトが含まれ、
331 その中には <acronym>URL</acronym> やタイトル、メモ、タグといった投稿に関する基本情報が含まれます。
333 <table id="zend.service.delicious.public_data.posts.SimplePost_methods">
334 <title>Zend_Service_Delicious_SimplePost クラスのメソッド</title>
345 <entry><methodname>getNotes()</methodname></entry>
346 <entry>投稿のメモを返します</entry>
347 <entry>String</entry>
350 <entry><methodname>getTags()</methodname></entry>
351 <entry>投稿のタグを返します</entry>
355 <entry><methodname>getTitle()</methodname></entry>
356 <entry>投稿のタイトルを返します</entry>
357 <entry>String</entry>
360 <entry><methodname>getUrl()</methodname></entry>
361 <entry>投稿の <acronym>URL</acronym> を返します</entry>
362 <entry>String</entry>
369 <sect2 id="zend.service.delicious.httpclient">
370 <title>HTTP クライアント</title>
372 <classname>Zend_Service_Delicious</classname> は、<code>Zend_Rest_Client</code>
373 を使用して del.icio.us ウェブサービスへの <acronym>HTTP</acronym> リクエストを作成します。
374 <classname>Zend_Service_Delicious</classname> が使用する <acronym>HTTP</acronym>
375 クライアントを変更するには、<classname>Zend_Rest_Client</classname>
376 の <acronym>HTTP</acronym> クライアントを変更する必要があります。
378 <example id="zend.service.delicious.httpclient.changing">
379 <title>Zend_Rest_Client の HTTP クライアントの変更</title>
380 <programlisting language="php"><![CDATA[
381 $myHttpClient = new My_Http_Client();
382 Zend_Rest_Client::setHttpClient($myHttpClient);
386 <classname>Zend_Service_Delicious</classname> で複数のリクエストを作成する際に
387 それを高速化するなら、接続をキープするように <acronym>HTTP</acronym> クライアントを設定するとよいでしょう。
389 <example id="zend.service.delicious.httpclient.keepalive">
390 <title>HTTP クライアントを、接続を保持し続けるように設定する</title>
391 <programlisting language="php"><![CDATA[
392 Zend_Rest_Client::getHttpClient()->setConfig(array(
399 <classname>Zend_Service_Delicious</classname> オブジェクトを作成する際に、
400 <classname>Zend_Rest_Client</classname> の <acronym>SSL</acronym> トランスポートは
401 <code>'ssl'</code> と設定されます。デフォルトの <code>'ssl2'</code>
402 ではありません。これは、del.icio.us 側の問題で、
403 <code>'ssl2'</code> を使用するとリクエストの処理に時間がかかる