2012-04-15 17 views
3

Mögliche Duplizieren:
Check if Youtube and Vimeo-clips are validÜberprüfen Sie, ob ein YouTube-Video mit PHP entfernt wurde.

Ich habe eine Website, die eine Menge von YouTube-Videos verbindet aber viel Zeit diese Videos entweder durch den Benutzer oder YouTube entfernt werden. Das bedeutet, dass meine Seite viele tote Videos enthält und es so viele gibt, dass es ein Albtraum wäre, sie alle manuell zu überprüfen.

Also ich bin auf der Suche nach einer Möglichkeit zu überprüfen, ob das YouTube-Video immer noch gültig ist mit PHP. Ich habe viele Threads mit Leuten gesehen, die die gleiche Frage stellen, aber ich kann keine der veröffentlichten Lösungen zum Laufen bringen.

+0

Bitte geben Sie einige Beispiele für die Links (oder was Sie zur Identifizierung verwenden) von Videos, die entfernt wurden und von denen einige noch funktionieren. – hakre

Antwort

7

Verwenden Sie youtube V3 API, um zu überprüfen, ob das Video zugänglich ist oder nicht. siehe für weitere Informationen auf den folgenden doc

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

Grundsätzlich macht eine GET-Anforderung mit Ihrem API-Schlüssel

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

Sie erhalten eine Probe Antwort wie erhalten:

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

Wenn Sie ein leeres Array in items der Antwort erhalten, ist das Video nicht zugänglich.


Das Folgende sagt über V2 der API, die jetzt veraltet ist. (https://developers.google.com/youtube/2.0/developers_guide_protocol_video_entries).

Hinweis: Die YouTube-Daten-API (v2) wurde ab dem 4. März 2014 offiziell als veraltet eingestuft. Weitere Informationen finden Sie in unserer Richtlinie zur Deaktivierung. Verwenden Sie das YouTube-Daten-API (v3) für neue Integrationen und migrieren Sie Anwendungen, die weiterhin die v2-API verwenden, auf die v3-API.

Anfrage senden an diese URL, die Existenz eines Video

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

Hier eine Verwendung davon zu überprüfen.

$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; 
} 
+2

@Downvoter, Kannst du nicht einen Kommentar hinterlassen, während Sie nach unten gehen? – Starx

+0

Wenn ich diese Anfrage bei jedem Seitenaufruf mache (ich meine, jedes Mal, wenn ein Benutzer versucht, auf das Internet zuzugreifen), besteht eine Chance, dass youtube api mich blockiert? – Ant100

+0

Funktioniert das noch? Ich bekomme "Video No Longer Available" für sogar gültige Youtube-Video-IDs – Sudar

5

Sie können einfach den Rückgabewert von http://gdata.youtube.com/feeds/api/videos/$id überprüfen

Sie zurück zum Beispiel

  • Privat Video
  • Ungültige ID
  • Video nicht

gefunden Also th e einfachste Kontrolle wäre: attribute Zustand:

if (file_get_contents('http://gdata.youtube.com/feeds/api/videos/'.$videoId) == 'Video not found') { 
    echo 'Video deleted'; 
} 
+0

Herr Dan Lee, Bitte beachten Sie Ihre Sprache. Es geht um eine saubere Post ohne doppelte Antworten. Und in Anbetracht Ihrer Antwort, die sowieso ziemlich schlechte Qualität ist. – Starx

0

Youtube gibt einen HTTP-Statuscode 404 ist das Video nicht vorhanden ist. See this made up url, zum Beispiel.

Die spezifische Fehlermeldung unterscheidet sich, aber die wichtige Sache ist ein nicht 200 Code zurückgegeben wird.

Also in PHP verwenden Sie Curl, um die URL zu holen, dann überprüfen Sie, welcher Statuscode zurückgegeben wird. Sie können den Statuscode von Locken bekommen mit so etwas wie:

$http_status = curl_getinfo($handle, CURLINFO_HTTP_CODE); 

Sie könnten speichern einen last_checked Zeitstempel mit jeder URL in einer Datenbank, dann haben einen Cronjob alle N Minuten läuft eine kleine Anzahl von URLs zu überprüfen, und aktualisiere die Zeitstempel, wenn du fertig bist. Stellen Sie sicher, dass Sie den Statuscode auch in der Datenbank speichern.

Dann können Sie nicht mit 200 Statuscodes arbeiten, die Sie in Ihrem Code mögen, wenn Sie die URL anzeigen.

Verwandte Themen