2015-05-21 3 views
5

Ich benutze die Youtube V3 API und hier ist das Code-Snippet, um die Top-Ten-Videos von meinem Youtube-Kanal zu ziehen. (Dieselbe Abfrage funktioniert perfekt in der Google-API-Explorer @https://developers.google.com/apis-explorer/)Youtube API Fehler v3 - 'Kein Filter ausgewählt'

url_start = "https://www.googleapis.com/youtube/v3/videos?" + \ 
      "order=viewCount&part=snippet&forMine=true" + \ 
      "&type=video&maxResults=10&key=MY_API_KEY" 
data = requests.get(url_start).json() 

Aber ich bekomme diese Fehlermeldung:

{u'error': {u'code': 400, 
      u'message': u'No filter selected.', 
      u'errors':[{u'locationType': u'parameter', 
         u'domain': u'youtube.parameter', 
         u'message': u'No filter selected.', 
         u'reason': u'missingRequiredParameter', 
         u'location': u''}]}} 

Ich weiß, dass der Schlüssel gültig ist, weil, wenn ich die gleiche Abfrage ohne Formine tun

https://www.googleapis.com/youtube/v3/search?part=snippet&key=MY_API_KEY 

Und ich bekomme die besten Videos insgesamt von youtube. Gibt es eine bessere Möglichkeit, dies oder eine Problemumgehung zu tun?

Antwort

3

Der Parameter forMine funktioniert nur für einen authentifizierten Benutzer (einer, der den oAuth2-Fluss mit Ihrer App durchlaufen hat). Daher ist der fehlende Parameter, über den sich Ihre Anforderung beschweren, das erforderliche Zugriffstoken.

Wenn Sie ein privates Skript ausführen möchten, das Ihre zehn besten Videos zu einem bestimmten Zeitpunkt anzeigt, können Sie in Ihrer App eine temporäre Routine einrichten, mit der Sie sich manuell mit oAuth2 authentifizieren und die Aktualisierung erfassen können Zeichen; Wenn Sie das speichern, kann das Refresh-Token bei zukünftigen Anfragen ein Zugriffstoken erhalten, ohne dass Sie es von Hand autorisieren müssen.

Wenn Sie ein Dashboard erstellen möchten, damit Ihre Nutzer ihre eigenen Top-Ten-Videos sehen können, müssen Sie lediglich die oAuth2-Authentifizierung in Ihren Flow integrieren und das Zugriffstoken bei jeder Anfrage einsenden. Die gapi client für Python macht dies ziemlich einfach.

Wenn Sie es ohne den Parameter forMine der Videoliste tun möchten, können Sie zum Suchendpunkt zurückkehren und die Benutzerkanal-ID übergeben (dies erfordert natürlich, dass Sie es im Voraus wissen, während die authentifizierte Methode dies tut) für jeden Benutzer arbeiten, der sich anmeldet, ohne dass Sie wissen, wer sie sind):

https://www.googleapis.com/youtube/v3/search?order=viewCount&part=snippet&channelId={channel id here}&maxResults=25&key={YOUR_API_KEY} 
+0

das Ziel ist, die letztere, nur die Top Ten von meinem eigenen Kanal jederzeit mit python Grabbing - ich habe nicht erkennen, Sie mussten Holen Sie sich jetzt ein Refresh-Token, um spezifische Anfragen zu stellen. dies ist hilfreich –

+0

Hinweis Ich habe meine Antwort bearbeitet, um ein wenig zu erläutern ... Sie können das ohne Tokens tun, wenn Sie bereits die Kanal-ID eines bestimmten Benutzers kennen. Wenn Sie dies nicht tun, müssen Sie oAuth verwenden. – jlmcdonald

+0

danke @ Jlmcdonald, das hat funktioniert! Ich hatte auch die falsche Kanal-ID - aber es funktioniert gut ohne den Aufwand, Tokens für einfache Daten zu erhalten und zu verwalten! –