3

重複の可能性:
Youtube と Vimeo クリップが有効かどうかを確認する

多くの YouTube ビデオにリンクしている Web サイトを持っていますが、多くの場合、これらのビデオはユーザーまたは YouTube によって削除されます。これは、私のサイトには多くの死んだビデオがあり、それらをすべて手動でチェックするのは悪夢であることを意味します.

そのため、PHP を使用して YouTube ビデオがまだ有効かどうかを確認する方法を探しています。同じ質問をしている人々とのスレッドをたくさん見てきましたが、投稿された解決策を機能させることができません。

4

4 に答える 4

8

youtube V3 API を使用して、ビデオにアクセスできるかどうかを確認します。詳細については、次のドキュメントを参照してください

https://developers.google.com/youtube/v3/docs/videos/list

基本的に、APIキーを使用してGETリクエストを行います

GET https://www.googleapis.com/youtube/v3/videos?part=id&id={VIDEO_ID}&key={YOUR_API_KEY}

次のようなサンプル応答を受け取ります。

{
 "kind": "youtube#videoListResponse",
 "etag": "\"sZ5p5Mo8dPpfIzLYQBF8QIQJym0/N6KWrfNRyfPOarHfhvNS7j4jfxM\"",
 "pageInfo": {
  "totalResults": 0,
  "resultsPerPage": 0
 },
 "items": []
}*

応答で空の配列を取得した場合items、ビデオにはアクセスできません。


以下は、現在廃止されている API の V2 について述べています。( https://developers.google.com/youtube/2.0/developers_guide_protocol_video_entries )。

注: YouTube Data API (v2) は、2014 年 3 月 4 日に正式に廃止されました。詳細については、廃止ポリシーを参照してください。新しい統合には YouTube Data API (v3) を使用し、まだ v2 API を使用しているアプリケーションも v3 API に移行してください。

動画の存在を確認するために、この URL にリクエストを送信します

http://gdata.youtube.com/feeds/api/videos/<videoid>

これがその使用法です。

$headers = get_headers('http://gdata.youtube.com/feeds/api/videos/' . $videoId);
if (!strpos($headers[0], '200')) {
    echo "The YouTube video you entered does not exist";
    return false;
}
于 2012-04-15T11:41:25.813 に答える
5

の戻り値を簡単に確認できますhttp://gdata.youtube.com/feeds/api/videos/$id

たとえば、あなたは戻ってきます

  • プライベートビデオ
  • 無効な ID
  • この動画は存在しません

したがって、最も簡単なチェックは次のようになります。

if (file_get_contents('http://gdata.youtube.com/feeds/api/videos/'.$videoId) == 'Video not found') {
  echo 'Video deleted';
}
于 2012-04-15T11:42:51.947 に答える
2

YouTube API を使用すると、yt:state 属性を確認できます: https://developers.google.com/youtube/2.0/reference#youtube%5Fdata%5Fapi%5Ftag%5Fyt%3Astate

于 2012-04-15T11:44:53.180 に答える
0

YouTube は HTTP ステータス コード 404 を返します。これは、動画が存在しない場合です。 たとえば、この作成された url を参照してください。

具体的なエラー メッセージは異なりますが、重要なのは 200 以外のコードが返されることです。

したがって、PHP では Curl を使用して URL を取得し、返されるステータス コードを確認します。次のような方法で Curl からステータス コードを取得できます。

$http_status = curl_getinfo( $handle, CURLINFO_HTTP_CODE );

データベース内の各 URL で last_checked タイムスタンプを保存し、N 分ごとに cronjob を実行して少数の URL をチェックし、完了したらタイムスタンプを更新することができます。ステータス コードもデータベースに保存してください。

次に、URL を表示するときに、コードで好きなように 200 以外のステータス コードを処理できます。

于 2012-04-15T11:48:55.490 に答える