8

私はYouTube api v3 php検索を試しています...

初めてこのAPIを使用するのは初心者です...

3 つの質問があります。

1)ページネーション番号を示すリストの下でどのように検索できますか?(50ページあたりの結果)

2) ビデオの長さをリストに表示するにはどうすればよいですか? (3:20 分:秒)

3) viewCount を注文する方法

if ($_GET['q']) {
  require_once 'src/Google_Client.php';
  require_once 'src/contrib/Google_YoutubeService.php';
  $DEVELOPER_KEY = 'my key';

  $client = new Google_Client();
  $client->setDeveloperKey($DEVELOPER_KEY);
  $youtube = new Google_YoutubeService($client);

  try {
    $searchResponse = $youtube->search->listSearch('id,snippet', array(
      'q' => $_GET['q'],
      'maxResults' => 50,
      'type' => "video",
    ));

  foreach ($searchResponse['items'] as $searchResult) {

    $videos .= '<li style="clear:left"><img src="'.$searchResult['snippet']['thumbnails']['default']['url'].'" style="float:left; margin-right:18px" alt="" /><span style="float:left">'.$searchResult['snippet']['title'].'<br />'.$searchResult['id']['videoId'].'<br />'.$searchResult['snippet']['publishedAt'].'<br />'.$item['contentDetails']['duration'].'</span></li>';
}




$htmlBody .= <<<END
    <ul>$videos</ul>
END;
  } catch (Google_ServiceException $e) {
    $htmlBody .= sprintf('<p>A service error occurred: <code>%s</code></p>',
      htmlspecialchars($e->getMessage()));
  } catch (Google_Exception $e) {
    $htmlBody .= sprintf('<p>An client error occurred: <code>%s</code></p>',
      htmlspecialchars($e->getMessage()));
  }
}
4

2 に答える 2

19

1)ページネーション番号を示すリストの下でどのように検索できますか?(50ページあたりの結果)

この機能を実装するには、独自のキャッシュ ロジックを記述する必要があります。これは、結果ごとに "NextPageToken" と "PreviousPageToken" の 2 つのトークンを取得し、次のページまたは前のページのトークンを取得するために、後続のクエリにそのトークン番号が含まれている必要があるためです。

そのため、結果がキャッシュで利用できない場合は常に、nextpagetoken または previous page トークンを送信する必要があります。

https://www.googleapis.com/youtube/v3/search?key=API_KEY&part=snippet&q=japan&maxResults=10&order=date&pageToken=NEXT_or_PREVIOUS_PAGE_TOKEN

特に、1 ページあたり 50 ページが必要で、(1,2,NEXT) のような 3 つのページネーションを表示している場合は、結果を 2 回取得する必要があります。どちらの結果もキャッシュに保持するため、ページ 1 と 2 の結果はキャッシュから取得されます。次に、nextPageToken を送信して、再度 Google にクエリを実行していることを確認します。

したがって、ページネーション 1-n およびすべてのページ 50 の結果を表示するには、Google API に対して n-1 クエリを実行する必要があります。ただし、1 ページあたり 10 件の結果を表示している場合は、取得した結果を使用して最初の 5 ページ (1 ~ 5) を表示できる 50 件の結果の単一クエリを作成し、次に上記のように次のページ トークンを再度送信する必要があります。

注 - Google youtube API は最大 50 件の結果を提供します。

2) 動画の長さをリストに表示するにはどうすればよいですか? (3:20 分:秒)

Youtube API v3 は、単純な最初の検索応答で動画の長さを返しません。ビデオの長さを取得するには、以下のように youtube API を 1 回追加で呼び出す必要があります。

https://www.googleapis.com/youtube/v3/videos?id=VIDEO_ID1%2CVIDEO_ID2&part=contentDetails&key=API_KEY (最大 50 ID)

この問題は「http://code.google.com/p/gdata-issues/issues/detail?id=4294」で強調表示されています。ここにも回答を投稿しました。

したがって、ビデオの長さを表示したい場合は、毎回 2 つの呼び出しを行う必要があります。

3) viewCount を注文する方法

以下のクエリをトリガーすると、表示回数順に並べられた結果が提供されます。

https://www.googleapis.com/youtube/v3/search?key=KEY&part=snippet&q=japan&maxResults=5&order=viewCount

詳細については、これを参照してください - https://developers.google.com/youtube/v3/docs/search/list#order

于 2014-05-03T03:29:07.587 に答える
3

youTube API V3 は、API V2 に比べてやや複雑です。

上記の質問に対して、私のアプローチは検索結果ではなく、ユーザーがアップロードした動画を取得することです。これは役に立つと思います

参考文献

v3 でページネーションを作成する方法は、v2 と同じではなく、次のように呼び出しを行うことができます。

$youtube = "http://gdata.youtube.com/feeds/api/users/Qtube247/uploads?v=2&alt=jsonc&start-index=1&max-results=50";

v3 では、2 つまたは 3 つの呼び出しを行う必要があります。最初の呼び出しはチャネルの詳細を取得するためのもので、2 回目の呼び出しは、チャネル プレイリスト ID を取得する場所からプレイリストを取得するためのもので、最後に個々のビデオ データを取得するためのものです。

私はPHP CURLを使用しています

$youtube = “https://www.googleapis.com/youtube/v3/channels?part=snippet%2CcontentDetails%2Cstatistics&id=yourChannelIdgoeshere&key=yourApiKey”;

ここでは、ユーザーのプレイリスト ID を取得します

$result = json_decode($return, true);
$playlistId=$result['items'][0]['contentDetails']['relatedPlaylists']['uploads'];

pagetoken を定義します

$pageToken=’’;

ユーザーがコントロール ボタンをクリックするたびに、session[] から pagetoken を取得して curl URL をフィードし、nextpagetoken または prevpagetoken を生成します。URL にフィードするものは何でも、Api は入力するリストのセットを認識します。

if(isset($_REQUEST['ptk']) && $_REQUEST['ptk’]!==''){
$pageToken=$_REQUEST['ptk’];

}

ここでは、ユーザーのプレイリストを取得します

$ playlistItems =”https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&pageToken=”.$pageToken.”&amp;maxResults=50&playlistId=$playlistId&key= yourApiKey”; 

ユーザーが maxResult を超える場合、nextPageToken が必要です。たとえば、ユーザーが 200 本の動画をアップロードしたとします。最初の pagetoken はCDIQAAであり、次の pagetoken は CGQQAA である可能性があり、前のページトークンはCDIQAQである可能性があるため、数値ではありません。

ここで pagetoken を保存します

if(isset($result['nextPageToken'])) { $_SESSION[nextToken]=$result['nextPageToken'];
}

if(isset($result['prevPageToken'])) { $_SESSION[prevToken]=$result['prevPageToken'];
}

次に、コントロール ボタン <> を作成します。

$next=$_SESSION[nextToken];

$prev=$_SESSION[prevToken];

コントロールボタンはこちら

<a href=”?ptk=<?php echo $prev?>” ><<prev</a>

<a href=”?ptk=<?php echo $next?>” >next>></a>

ここからユーザーがリンクをクリックすると、セッション変数に次または前のページが設定されます(これがどのように機能するかを確認するには、上に移動してください)

ビデオの長さを取得するには、同じ Php curl を使用します

$videoDetails="https://www.googleapis.com/youtube/v3/videos?part=id,snippet,contentDetails,statistics,status&id=videoIdHere&key=yourApiKey";

$videoData = json_decode($return, true);

$duration = $videoData['items'][0]['contentDetails']['duration'];

$viewCount = $videoData['items'][0]['statistics']['viewCount'];

あなたはこのようなものを得るかもしれません('PT2H34M25S')

デュレーションデータを変換する方法を示す質問ここに答えます

ここで動作デモを参照してください

于 2014-11-14T13:12:07.883 に答える