1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 20779 -->
4 <sect1 id="zend.gdata.youtube">
5 <title>YouTube Data API の使用法</title>
8 YouTube data <acronym>API</acronym> は、YouTube のコンテンツを読み書きする機能を提供します。
9 認証済みでないリクエストを Google Data フィードに実行し、
10 人気のある動画やコメント、YouTube 登録ユーザの公開情報
11 (たとえばプレイリストや購読内容、コンタクトなど)
16 YouTube Data <acronym>API</acronym> についての詳細は、code.google.com の
17 <ulink url="http://code.google.com/apis/youtube/developers_guide_php.html">
18 <acronym>PHP</acronym> Developer's Guide</ulink> を参照ください。
21 <sect2 id="zend.gdata.youtube.authentication">
24 YouTube Data <acronym>API</acronym> は、公開データへの読み取り専用アクセス機能を提供しており、
25 認証は不要です。書き込みリクエストを行う場合は、ClientLogin
26 あるいは AuthSub でのユーザ認証が必要となります。詳細は
27 <ulink url="http://code.google.com/apis/youtube/developers_guide_php.html#Authentication">
28 <acronym>PHP</acronym> Developer's Guide の認証のセクション</ulink>
33 <sect2 id="zend.gdata.youtube.developer_key">
34 <title>Developer Keys および Client ID</title>
36 デベロッパーキーは、<acronym>API</acronym> リクエストを行う YouTube
37 開発者を識別するためのものです。クライアント ID
38 は、ログの記録やデバッグなどの際にアプリケーションを識別するものです。
39 <ulink url="http://code.google.com/apis/youtube/dashboard/">http://code.google.com/apis/youtube/dashboard/</ulink>
40 でデベロッパーキーとクライアント ID を取得できます。
41 下の例は、デベロッパーキーとクライアント ID を
42 <ulink url="http://framework.zend.com/apidoc/core/Zend_Gdata/Zend_Gdata_YouTube.html">Zend_Gdata_YouTube</ulink>
45 <example id="zend.gdata.youtube.developer_key.example">
46 <title>Developer Key と ClientID を Zend_Gdata_YouTube に渡す</title>
47 <programlisting language="php"><![CDATA[
48 $yt = new Zend_Gdata_YouTube($httpClient,
56 <sect2 id="zend.gdata.youtube.videos">
57 <title>公開動画フィードの取得</title>
60 YouTube data <acronym>API</acronym> はさまざまなフィードを提供しており、
61 たとえば標準の動画一覧や関連する動画一覧、動画への返信一覧、
62 アップロードした動画の一覧、お気に入りの動画一覧などを取得できます。
63 たとえばアップロードした動画一覧のフィードは、
64 指定したユーザがアップロードしたすべての動画を返します。
65 どのようなフィードが取得できるのかについては
66 <ulink url="http://code.google.com/apis/youtube/reference.html#Video_Feeds">
67 YouTube <acronym>API</acronym> リファレンスガイド</ulink> を参照ください。
70 <sect3 id="zend.gdata.youtube.videos.searching">
71 <title>メタデータによる動画の検索</title>
74 指定した条件にマッチする動画の一覧を、YouTubeQuery
76 たとえば次のクエリは、メタデータに "cat" という単語を含む動画を探し、
77 その結果の 10 番目から 1 ページあたり 20 件ずつ表示します。
80 <example id="zend.gdata.youtube.videos.searching.example">
82 <programlisting language="php"><![CDATA[
83 $yt = new Zend_Gdata_YouTube();
84 $query = $yt->newVideoQuery();
85 $query->videoQuery = 'cat';
86 $query->startIndex = 10;
87 $query->maxResults = 20;
88 $query->orderBy = 'viewCount';
90 echo $query->queryUrl . "\n";
91 $videoFeed = $yt->getVideoFeed($query);
93 foreach ($videoFeed as $videoEntry) {
94 echo "---------動画----------\n";
95 echo "タイトル: " . $videoEntry->getVideoTitle() . "\n";
97 echo $videoEntry->getVideoDescription();
105 <ulink url="http://code.google.com/apis/youtube/reference.html#Searching_for_videos">
106 リファレンスガイド</ulink>を参照ください。
107 <ulink url="http://framework.zend.com/apidoc/core/Zend_Gdata/Zend_Gdata_YouTube_VideoQuery.html">
108 <classname>Zend_Gdata_YouTube_VideoQuery</classname></ulink>
109 には、これらのパラメータ用のヘルパー関数もあります。詳細は
110 <ulink url="http://code.google.com/apis/youtube/developers_guide_php.html#SearchingVideos"><acronym>PHP</acronym> Developer's Guide</ulink>
115 <sect3 id="zend.gdata.youtube.videos.searchingcategories">
116 <title>カテゴリやタグ/キーワードによる動画の検索</title>
120 <ulink url="http://code.google.com/apis/youtube/reference.html#Category_search">
121 専用の <acronym>URL</acronym> を作成します</ulink>。たとえば、dog
122 というキーワードを含むコメディーの動画を検索するには次のようにします。
124 <example id="zend.gdata.youtube.videos.searchingcategories.example">
125 <title>指定したカテゴリの動画の検索</title>
126 <programlisting language="php"><![CDATA[
127 $yt = new Zend_Gdata_YouTube();
128 $query = $yt->newVideoQuery();
129 $query->category = 'Comedy/dog';
131 echo $query->queryUrl . "\n";
132 $videoFeed = $yt->getVideoFeed($query);
137 <sect3 id="zend.gdata.youtube.videos.standard">
138 <title>標準のフィード</title>
141 YouTube Data <acronym>API</acronym> が提供する
142 <ulink url="http://code.google.com/apis/youtube/reference.html#Standard_feeds">
143 標準フィード</ulink> にはさまざまなものがあります。
144 これらの標準フィードは、<acronym>URL</acronym> を指定することで
145 <ulink url="http://framework.zend.com/apidoc/core/Zend_Gdata/Zend_Gdata_YouTube_VideoFeed.html">Zend_Gdata_YouTube_VideoFeed</ulink>
146 オブジェクトとして取得できます。<acronym>URL</acronym> の指定には
147 <ulink url="http://framework.zend.com/apidoc/core/Zend_Gdata/Zend_Gdata_YouTube.html">Zend_Gdata_YouTube</ulink>
149 (たとえば Zend_Gdata_YouTube::STANDARD_TOP_RATED_URI)
150 を使用するか、あるいは定義済みヘルパーメソッド
151 (下のコードを参照ください) を使用します。
155 評価の高い動画を取得するヘルパーメソッドは次のようになります。
157 <example id="zend.gdata.youtube.videos.standard.example-1">
158 <title>標準の動画フィードの取得</title>
159 <programlisting language="php"><![CDATA[
160 $yt = new Zend_Gdata_YouTube();
161 $videoFeed = $yt->getTopRatedVideoFeed();
165 取得する標準フィードの期間を指定するクエリパラメータもあります。
169 たとえば、今日いちばん評価の高い動画を取得するには次のようにします。
171 <example id="zend.gdata.youtube.videos.standard.example-2">
172 <title>Zend_Gdata_YouTube_VideoQuery を使用した動画の取得</title>
173 <programlisting language="php"><![CDATA[
174 $yt = new Zend_Gdata_YouTube();
175 $query = $yt->newVideoQuery();
176 $query->setTime('today');
177 $videoFeed = $yt->getTopRatedVideoFeed($query);
181 あるいは、次のように <acronym>URL</acronym> を使用してフィードを取得することもできます。
184 <example id="zend.gdata.youtube.videos.standard.example-3">
185 <title>URL からの動画フィードの取得</title>
186 <programlisting language="php"><![CDATA[
187 $yt = new Zend_Gdata_YouTube();
188 $url = 'http://gdata.youtube.com/feeds/standardfeeds/top_rated?time=today'
189 $videoFeed = $yt->getVideoFeed($url);
194 <sect3 id="zend.gdata.youtube.videos.user">
195 <title>指定したユーザがアップロードした動画の取得</title>
198 指定したユーザがアップロードした動画の一覧を取得するヘルパーメソッドもあります。
199 次の例は、ユーザ 'liz' がアップロードした動画の一覧を取得します。
201 <example id="zend.gdata.youtube.videos.user.example">
202 <title>指定したユーザがアップロードした動画の取得</title>
203 <programlisting language="php"><![CDATA[
204 $yt = new Zend_Gdata_YouTube();
205 $videoFeed = $yt->getUserUploads('liz');
210 <sect3 id="zend.gdata.youtube.videos.favorites">
211 <title>指定したユーザのお気に入り動画の取得</title>
214 指定したユーザのお気に入り動画の一覧を取得するヘルパーメソッドもあります。
215 次の例は、ユーザ 'liz' のお気に入り動画の一覧を取得します。
217 <example id="zend.gdata.youtube.videos.favorites.example">
218 <title>指定したユーザのお気に入り動画の取得</title>
219 <programlisting language="php"><![CDATA[
220 $yt = new Zend_Gdata_YouTube();
221 $videoFeed = $yt->getUserFavorites('liz');
227 <sect3 id="zend.gdata.youtube.videos.responses">
228 <title>動画に対する返信動画の取得</title>
231 指定した動画に対する動画の返信の一覧を取得するヘルパーメソッドもあります。
232 次の例は、ID 'abc123813abc' の動画に対する返信動画を取得します。
234 <example id="zend.gdata.youtube.videos.responses.example">
235 <title>動画への返信のフィードの取得</title>
236 <programlisting language="php"><![CDATA[
237 $yt = new Zend_Gdata_YouTube();
238 $videoFeed = $yt->getVideoResponseFeed('abc123813abc');
244 <sect2 id="zend.gdata.youtube.comments">
245 <title>動画のコメントの取得</title>
248 YouTube の動画に対するコメントを取得するにはいくつかの方法があります。
249 ID 'abc123813abc' の動画に対するコメントを取得するコードは、次のようになります。
251 <example id="zend.gdata.youtube.videos.comments.example-1">
252 <title>動画 ID からの動画へのコメントのフィードの取得</title>
254 <programlisting language="php"><![CDATA[
255 $yt = new Zend_Gdata_YouTube();
256 $commentFeed = $yt->getVideoCommentFeed('abc123813abc');
258 foreach ($commentFeed as $commentEntry) {
259 echo $commentEntry->title->text . "\n";
260 echo $commentEntry->content->text . "\n\n\n";
267 <ulink url="http://framework.zend.com/apidoc/core/Zend_Gdata/Zend_Gdata_YouTube_VideoEntry.html">Zend_Gdata_YouTube_VideoEntry</ulink>
268 オブジェクトがあるのなら、それを用いてその動画のコメントを取得することもできます。
270 <example id="zend.gdata.youtube.videos.comments.example-2">
271 <title>Zend_Gdata_YouTube_VideoEntry からの動画へのコメントのフィードの取得</title>
273 <programlisting language="php"><![CDATA[
274 $yt = new Zend_Gdata_YouTube();
275 $videoEntry = $yt->getVideoEntry('abc123813abc');
276 // 動画の ID がわからなくても、このようにして URL を取得できます
277 $commentFeed = $yt->getVideoCommentFeed(null,
278 $videoEntry->comments->href);
284 <sect2 id="zend.gdata.youtube.playlists">
285 <title>プレイリストフィードの取得</title>
288 YouTube data <acronym>API</acronym> を使用すると、
289 プロファイルやプレイリスト、購読内容といったユーザ情報を取得できます。
292 <sect3 id="zend.gdata.youtube.playlists.user">
293 <title>指定したユーザのプレイリストの取得</title>
296 このライブラリには、指定したユーザのプレイリストを取得するためのヘルパーメソッドがあります。
297 ユーザ 'liz' のプレイリストを取得するには、次のようにします。
299 <example id="zend.gdata.youtube.playlists.user.example">
300 <title>指定したユーザのプレイリストの取得</title>
302 <programlisting language="php"><![CDATA[
303 $yt = new Zend_Gdata_YouTube();
304 $playlistListFeed = $yt->getPlaylistListFeed('liz');
306 foreach ($playlistListFeed as $playlistEntry) {
307 echo $playlistEntry->title->text . "\n";
308 echo $playlistEntry->description->text . "\n";
309 echo $playlistEntry->getPlaylistVideoFeedUrl() . "\n\n\n";
315 <sect3 id="zend.gdata.youtube.playlists.special">
316 <title>指定したプレイリストの取得</title>
320 指定したプレイリストの動画一覧を取得するヘルパーメソッドがあります。
321 指定したプレイリストエントリの動画一覧を取得するには、次のようにします。
323 <example id="zend.gdata.youtube.playlists.special.example">
324 <title>指定したプレイリストの取得</title>
325 <programlisting language="php"><![CDATA[
326 $feedUrl = $playlistEntry->getPlaylistVideoFeedUrl();
327 $playlistVideoFeed = $yt->getPlaylistVideoFeed($feedUrl);
333 <sect2 id="zend.gdata.youtube.subscriptions">
334 <title>指定したユーザの購読内容の一覧の取得</title>
337 ユーザは、チャンネルやタグ、お気に入りなどの内容を購読できます。
338 <ulink url="http://framework.zend.com/apidoc/core/Zend_Gdata/Zend_Gdata_YouTube_SubscriptionEntry.html">Zend_Gdata_YouTube_SubscriptionEntry</ulink>
343 ユーザ 'liz' のすべての購読内容を取得するには、次のようにします。
345 <example id="zend.gdata.youtube.subscriptions.example">
346 <title>指定したユーザのすべての購読の取得</title>
348 <programlisting language="php"><![CDATA[
349 $yt = new Zend_Gdata_YouTube();
350 $subscriptionFeed = $yt->getSubscriptionFeed('liz');
352 foreach ($subscriptionFeed as $subscriptionEntry) {
353 echo $subscriptionEntry->title->text . "\n";
359 <sect2 id="zend.gdata.youtube.profile">
360 <title>ユーザのプロファイルの取得</title>
363 任意の YouTube ユーザの公開プロファイル情報を取得できます。
364 ユーザ 'liz' のプロファイルを取得するには、次のようにします。
366 <example id="zend.gdata.youtube.profile.example">
367 <title>ユーザのプロファイルの取得</title>
369 <programlisting language="php"><![CDATA[
370 $yt = new Zend_Gdata_YouTube();
371 $userProfile = $yt->getUserProfile('liz');
372 echo "ユーザ名: " . $userProfile->username->text . "\n";
373 echo "年齢: " . $userProfile->age->text . "\n";
374 echo "出身地: " . $userProfile->hometown->text . "\n";
379 <sect2 id="zend.gdata.youtube.uploads">
380 <title>YouTube への動画のアップロード</title>
383 アップロードのおおまかな手順については、code.google.com の
384 <ulink url="http://code.google.com/apis/youtube/developers_guide_protocol.html#Process_Flows_for_Uploading_Videos">
385 プロトコルガイド</ulink>の図を参照ください。
386 動画のアップロードには 2 通りの方法があります。
387 動画を直接送信するか、単に動画のメタデータだけを送信して動画は
388 HTML フォームでアップロードさせるかです。
392 動画を直接アップロードするには、まず新しい
393 <ulink url="http://framework.zend.com/apidoc/core/Zend_Gdata/Zend_Gdata_YouTube_VideoEntry.html">Zend_Gdata_YouTube_VideoEntry</ulink>
394 オブジェクトを作成して必須メタデータを指定しなければなりません。
395 次の例は、Quicktime 動画 "mytestmovie.mov" を以下のプロパティで
396 YouTube にアップロードするものです。
398 <table id="zend.gdata.youtube.uploads.metadata">
399 <title>以下のサンプルで使用するメタデータ</title>
400 <tgroup cols="2" align="left" colsep="1" rowsep="1">
410 <entry>My Test Movie</entry>
413 <entry>Category</entry>
417 <entry>Keywords</entry>
418 <entry>cars, funny</entry>
421 <entry>Description</entry>
422 <entry>My description</entry>
425 <entry>Filename</entry>
426 <entry>mytestmovie.mov</entry>
429 <entry>File <acronym>MIME</acronym> type</entry>
430 <entry>video/quicktime</entry>
433 <entry>Video private?</entry>
434 <entry><constant>FALSE</constant></entry>
437 <entry>Video location</entry>
438 <entry>37, -122 (lat, long)</entry>
441 <entry>Developer Tags</entry>
442 <entry>mydevelopertag, anotherdevelopertag</entry>
449 <ulink url="http://framework.zend.com/apidoc/core/Zend_Gdata/Zend_Gdata_YouTube_VideoEntry.html">Zend_Gdata_YouTube_VideoEntry</ulink>
451 <ulink url="http://framework.zend.com/apidoc/core/Zend_Gdata/Zend_Gdata_App_MediaFileSource.html">Zend_Gdata_App_MediaFileSource</ulink>
452 オブジェクトを使用して実際の動画ファイルを保持させます。水面下では、
453 <ulink url="http://framework.zend.com/apidoc/core/Zend_Gdata/Zend_Gdata_YouTube_Extension_MediaGroup.html">Zend_Gdata_YouTube_Extension_MediaGroup</ulink>
454 オブジェクトを使用して動画のすべてのメタデータを保持します。
455 以下で説明するヘルパーメソッドを使用すると、
456 メディアグループオブジェクトのことを気にせず動画のメタデータを設定できます。
457 $uploadUrl は、新しいエントリを投稿する場所です。
458 これは、認証済みユーザの名前 $userName で指定することもできますし、
459 シンプルに 'default' と指定して現在の認証済みユーザを自動的に利用することもできます。
461 <example id="zend.gdata.youtube.uploads.example">
462 <title>動画のアップロード</title>
464 <programlisting language="php"><![CDATA[
465 $yt = new Zend_Gdata_YouTube($httpClient);
466 $myVideoEntry = new Zend_Gdata_YouTube_VideoEntry();
468 $filesource = $yt->newMediaFileSource('mytestmovie.mov');
469 $filesource->setContentType('video/quicktime');
470 $filesource->setSlug('mytestmovie.mov');
472 $myVideoEntry->setMediaSource($filesource);
474 $myVideoEntry->setVideoTitle('My Test Movie');
475 $myVideoEntry->setVideoDescription('My Test Movie');
476 // カテゴリは YouTube のカテゴリとして妥当な形式でなければならないことに注意 !
477 $myVideoEntry->setVideoCategory('Comedy');
479 // キーワードを設定します。カンマ区切りの文字列であり、
480 // 各キーワードには空白文字を含めてはいけないことに注意しましょう
481 $myVideoEntry->SetVideoTags('cars, funny');
483 // オプションで、デベロッパタグを指定します
484 $myVideoEntry->setVideoDeveloperTags(array('mydevelopertag',
485 'anotherdevelopertag'));
487 // オプションで、動画の撮影場所を指定します
488 $yt->registerPackage('Zend_Gdata_Geo');
489 $yt->registerPackage('Zend_Gdata_Geo_Extension');
490 $where = $yt->newGeoRssWhere();
491 $position = $yt->newGmlPos('37.0 -122.0');
492 $where->point = $yt->newGmlPoint($position);
493 $myVideoEntry->setWhere($where);
495 // 現在の認証済みユーザ用のアップロード URI
497 'http://uploads.gdata.youtube.com/feeds/users/default/uploads';
499 // 動画をアップロードし、Zend_Gdata_App_HttpException あるいは通常の
500 // Zend_Gdata_App_Exception を捕捉します
503 $newEntry = $yt->insertEntry($myVideoEntry,
505 'Zend_Gdata_YouTube_VideoEntry');
506 } catch (Zend_Gdata_App_HttpException $httpException) {
507 echo $httpException->getRawResponseBody();
508 } catch (Zend_Gdata_App_Exception $e) {
509 echo $e->getMessage();
514 非公開で動画をアップロードするには、アップロードの前に
515 $myVideoEntry->setVideoPrivate(); を実行します。
516 $videoEntry->isVideoPrivate() を使用すると、
517 その動画エントリが非公開かどうかを調べることができます。
521 <sect2 id="zend.gdata.youtube.uploads.browser">
522 <title>ブラウザベースのアップロード</title>
525 ブラウザベースのアップロードも直接のアップロードとほとんど同じ処理ですが、
527 <ulink url="http://framework.zend.com/apidoc/core/Zend_Gdata/Zend_Gdata_YouTube_VideoEntry.html">Zend_Gdata_YouTube_VideoEntry</ulink>
529 <ulink url="http://framework.zend.com/apidoc/core/Zend_Gdata/Zend_Gdata_App_MediaFileSource.html">Zend_Gdata_App_MediaFileSource</ulink>
530 オブジェクトをアタッチしないという点が異なります。
531 そのかわりに、動画のすべてのメタデータを送信してトークン要素を受け取り、
532 それを用いて HTML アップロードフォームを作成します。
534 <example id="zend.gdata.youtube.uploads.browser.example-1">
535 <title>ブラウザベースのアップロード</title>
537 <programlisting language="php"><![CDATA[
538 $yt = new Zend_Gdata_YouTube($httpClient);
540 $myVideoEntry= new Zend_Gdata_YouTube_VideoEntry();
541 $myVideoEntry->setVideoTitle('My Test Movie');
542 $myVideoEntry->setVideoDescription('My Test Movie');
544 // YouTube のカテゴリとして妥当な形式でなければならないことに注意
545 $myVideoEntry->setVideoCategory('Comedy');
546 $myVideoEntry->SetVideoTags('cars, funny');
548 $tokenHandlerUrl = 'http://gdata.youtube.com/action/GetUploadToken';
549 $tokenArray = $yt->getFormUploadToken($myVideoEntry, $tokenHandlerUrl);
550 $tokenValue = $tokenArray['token'];
551 $postUrl = $tokenArray['url'];
555 上のコードは、リンクとトークンを表示します。
556 これらを元に、ユーザのブラウザに表示させる HTML フォームを構築します。
558 $tokenValue が返されたトークン要素の中身をあらわしており、
559 これは上の $myVideoEntry から取得したものです。
560 フォームを送信したあとであなたのサイトにリダイレクトさせるには、
561 パラメータ $nextUrl を上の $postUrl に追加します。
562 これは、AuthSub リンクにおけるパラメータ $next と同じように機能します。
564 status と id を <acronym>URL</acronym> の中に含めて返すということです。
566 <example id="zend.gdata.youtube.uploads.browser.example-2">
567 <title>ブラウザベースのアップロード: HTML フォームの作成</title>
569 <programlisting language="php"><![CDATA[
571 $nextUrl = 'http://mysite.com/youtube_uploads';
573 $form = '<form action="'. $postUrl .'?nexturl='. $nextUrl .
574 '" method="post" enctype="multipart/form-data">'.
575 '<input name="file" type="file"/>'.
576 '<input name="token" type="hidden" value="'. $tokenValue .'"/>'.
577 '<input value="動画のアップロード" type="submit" />'.
582 <sect2 id="zend.gdata.youtube.uploads.status">
583 <title>アップロード状況のチェック</title>
586 動画をアップロードしたら、認証済みユーザのアップロードフィードにすぐに反映されます。
587 しかし、公開手続きがすむまではサイト上では公開されません。
588 却下された動画やアップロードが正常終了しなかった動画についても、
589 認証ユーザのアップロードフィードのみに現れるようになります。
591 <ulink url="http://framework.zend.com/apidoc/core/Zend_Gdata/Zend_Gdata_YouTube_VideoEntry.html">Zend_Gdata_YouTube_VideoEntry</ulink>
592 の状態をチェックして、公開されているかいないか、また却下されたのかどうかを調べます。
594 <example id="zend.gdata.youtube.uploads.status.example">
595 <title>動画のアップロード状況のチェック</title>
597 <programlisting language="php"><![CDATA[
599 $control = $videoEntry->getControl();
600 } catch (Zend_Gdata_App_Exception $e) {
601 echo $e->getMessage();
604 if ($control instanceof Zend_Gdata_App_Extension_Control) {
605 if ($control->getDraft() != null &&
606 $control->getDraft()->getText() == 'yes') {
607 $state = $videoEntry->getVideoState();
609 if ($state instanceof Zend_Gdata_YouTube_Extension_State) {
612 .' '. $state->getText();
614 print 'まだ動画の状況についての情報を取得できません。'
615 . "また後で試してみてください。\n";
622 <sect2 id="zend.gdata.youtube.other">
623 <title>その他の関数</title>
626 これまで説明してきたもの以外にも YouTube API にはさまざまな機能が存在し、
627 動画のメタデータを編集したり動画エントリを削除したり、
628 サイト上のコミュニティ機能を利用したりといったことが可能です。
629 API で操作できるコミュニティ機能としては、
630 評価やコメント、プレイリスト、購読、ユーザプロファイル、コンタクト、メッセージなどがあります。
633 完全なドキュメントは、code.google.com の
634 <ulink url="http://code.google.com/apis/youtube/developers_guide_php.html"><acronym>PHP</acronym> Developer's Guide</ulink>