2016-05-17 7 views
3

Ich versuche Titel von YouTube Videos mit YouTube Data API (v3) https://developers.google.com/youtube/v3/guides/implementation/captionsYouTube API ohne Benutzer OAuth Prozess

So zu holen, zuerst habe ich versucht, einen Titel Liste mit dieser URL abgerufen werden: https://www.googleapis.com/youtube/v3/captions?part=snippet&videoId=KK9bwTlAvgo&key= {My API KEY}

Ich könnte die Beschriftung ID, die ich herunterladen möchte (jEDP-pmNCIqoB8QGlXWQf4Rh3faalD_l) über den obigen Link abrufen.

Dann folgte ich diese Anweisung die Beschriftung zum Download: https://developers.google.com/youtube/v3/docs/captions/download

Doch obwohl ich Eingabe der Titel-ID und mein api-Schlüssel korrekt, es „Login erforderlich“ Fehler zeigt.

Ich nehme an, dass ich OAuth-Authentifizierung benötige, aber was ich versuche zu tun, hängt nicht mit dem Konto meiner Benutzer zusammen, sondern lädt einfach die Daten der öffentlichen Untertitel automatisch herunter.

Meine Frage ist: Gibt es eine Möglichkeit, OAuth-Authentifizierung nur einmal zu verarbeiten, um ein Zugriffs-Token meines eigenen YouTube-Kontos zu erhalten und es dann wieder zu verwenden, wenn ich es in meiner Anwendung brauche?

+0

Ich habe auch dieses Problem. Es ärgert mich wirklich, dass die API Sie praktisch alles über Key ermöglicht, aber dann spontan erwartet, dass Benutzer auch OAuth2-Guthaben sideloaden, nur weil ihre schrecklichen Maschinenübersetzungen aus irgendeinem Grund Ihre Führerscheinnummer, Ihren Reisepass, 3 aktuelle Telefonrechnungen und Proof erfordern Ihrer Adresse ein Foto mit hoher Auflösung. Übrigens, die API-Seite scheint diese erhöhte Sicherheitsanforderung nirgends zu erwähnen ... – 1owk3y

Antwort

8

Ich kann nicht mit den erforderlichen Berechtigungen für die Caption API sprechen, aber im Allgemeinen, ja, Sie können OAuth zu Ihrer App einmal Ihr eigenes Konto verwenden und die Zugriffs- und Aktualisierungstoken verwenden, um nachfolgende OAuth'd zu machen Anfragen an die API. Sie können die Details der Erzeugung von Token finden Sie hier:

https://developers.google.com/youtube/v3/guides/auth/server-side-web-apps#Obtaining_Access_Tokens

die Schritte manuell ausführen zu können (zum Glück, Sie dies nur einmal tun müssen):

  1. Wenn der Zugriff bereits für eine erteilt App muss es entfernt werden, damit neue Authentifizierungsdaten eingerichtet werden können. Gehen Sie zu https://security.google.com/settings/security/permissions (während Sie in Ihrem Konto angemeldet sind) und entfernen Sie den Zugriff auf die App. Wenn sich die Client-ID oder die Geheimnummer ändern (oder Sie eine solche erstellen müssen), finden Sie sie unter API-Manager unter https://console.developers.google.com.
  2. Zugang zu gewähren und einen temporären Code erhalten, geben Sie diese URL in einem Browser:

    https://accounts.google.com/o/oauth2/auth? 
    client_id=<client_id>& 
    redirect_uri=http://www.google.com& 
    scope=https://www.googleapis.com/auth/youtube.force-ssl& 
    response_type=code& 
    access_type=offline& 
    approval_prompt=force 
    

    die Aufforderung Folgen Zugriff auf die App zu gewähren.

  3. Dies wird zu google.com mit einem code Parameter umgeleitet (z. B. https://www.google.com/?code=4/ux5gNj-_mIu4DOD_gNZdjX9EtOFf&gws_rd=ssl#). Speichere den Code.
  4. eine POST-Anforderung senden (z.B. über Postman Chrome plugin) zu https://accounts.google.com/o/oauth2/token mit den folgenden in der Anforderungs Körper:

    code=<code>& 
    client_id=<client_id>& 
    client_secret=<client_secret>& 
    redirect_uri=http://www.google.com& 
    grant_type=authorization_code 
    
  5. Die Antwort enthält sowohl ein Zugriffstoken und Token aufzufrischen. Speichern Sie beide, insbesondere aber das Aktualisierungstoken (weil das Zugriffstoken in 1 Stunde abläuft).

Sie können dann die Zugriffstoken verwenden manuell eine OAuth'd Anfrage zu senden, nachdem eine der Optionen here, im Wesentlichen:

curl -H "Authorization: Bearer ACCESS_TOKEN" https://www.googleapis.com/youtube/v3/captions/<id> 

oder

curl https://www.googleapis.com/youtube/v3/captions/<id>?access_token=ACCESS_TOKEN 

(Als ich versuchte, Bei der zweiten Option für Beschriftungen habe ich folgende Meldung erhalten: "Das OAuth-Token wurde in der Abfragezeichenfolge empfangen, die diese API für andere Antwortformate als JSON oder XML verbietet. Versuchen Sie, das OAuth-Token in Autho zu senden rization header stattdessen. ")

Sie können auch das Aktualisierungstoken in Ihrem Code verwenden, um die für die Erstellung Ihres YouTube-Objekts erforderlichen Anmeldedaten zu erstellen. In Java, sieht dies wie folgt aus:

String clientId = <your client ID> 
String clientSecret = <your client secret> 
String refreshToken = <refresh token> 

HttpTransport transport = new NetHttpTransport(); 
JsonFactory jsonFactory = new JacksonFactory(); 

GoogleCredential credential = new GoogleCredential.Builder() 
    .setTransport(transport) 
    .setJsonFactory(jsonFactory) 
    .setClientSecrets(clientId, clientSecret) 
    .build() 
    .setRefreshToken(refreshToken); 

try { 
    credential.refreshToken(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

youtube = new YouTube.Builder(transport, jsonFactory, credential).build(); 

ich denke, Sie etwas Ähnliches in Python mit dem API Client Libraries tun kann, obwohl ich Python nicht versucht haben.

+0

Danke für dieses Schreiben @Tyler C., Sie haben mich vor einer ungeheuren Menge an Schmerzen bewahrt! –

+0

Im zweiten Schritt habe ich einen "Fehler 400: redirect_uri_mismatch" erhalten (ich habe Client-ID und Secret für serverseitige Web-Apps verwendet). Wenn ich versucht habe, die Client-ID für die Android-App zu erhalten, erhalte ich für Schritt 4 kein Geheimnis. Was könnte eine Lösung sein? – Elia12345

+1

@ Elia12345 Ich bin mir nicht sicher, was Ihr Problem verursacht, aber die Diskussion hier kann hilfreich sein: http://stackoverflow.com/questions/11485271. Möglicherweise müssen Sie in der Google Developers Console (https://console.developers.google.com/) einen "autorisierten Weiterleitungs-URI" für Ihre Kunden-ID hinzufügen. –