Ich versuche in meiner YouTube-API-Anwendung eine vollständige Liste der für einen bestimmten Nutzer angesehenen Videos zu erhalten. Ich möchte die Gesamtdauer aller Videos addieren.
Wenn ich die Liste der Videos aus der Verlaufs-Wiedergabeliste erhalte, wird sie von der API auf 50 Elemente festgelegt. Es gibt Paginierung, aber die Gesamtzahl der Elemente beträgt 50 (nicht nur pro Seite). Ich kann mit der angezeigten API nicht auf weitere Daten zugreifen.
Gibt es eine Möglichkeit, diese Playlist ohne die Datenobergrenze zu erhalten? Ich hoffe auf eine andere Methode (die Verwendung der API) oder eine Möglichkeit, dies ohne die API zu tun. Ich weiß, dass YouTube diese Daten speichert, weil ich meine gesamte Historie (weit mehr als 50 Videos) anzeigen kann.
Ich verwende diesen Code:
var requestOptions = {
playlistId: playlistId,
part: 'snippet',
maxResults: 50
};
gapi.client.youtube.playlistItems.list(requestOptions);
dabei ist playlistId
die ID der Verlaufsliste, die ich von einer gapi.client.youtube.channels.list
-Anforderung erhalten habe.
Edit (2017): Ich möchte klarstellen, dass es immer meine Absicht war, meine eigene Geschichte herunterzuladen. Nur aus Interesse, um zu sehen, wie viel Zeit ich mit dem Ansehen von Videos verbracht habe. Ich habe das immer noch nicht geschafft.
Ich habe vor einiger Zeit einen Scraper (in Python 2.7 (aktualisiert für 3.5) und Scrapy) für diese Aufgabe geschrieben ... _. Sans offizielle API verwendet ein angemeldetes Session-Cookie und HTML-Analyse. Dumps standardmäßig auf SQLite . https://github.com/zvodd/Youtube-Watch-History-Scraper
Wie es gemacht wird: Im Wesentlichen wird die URL geöffnet
https://www.youtube.com/feed/history'
mit einem gültigen (angemeldeten) Sitzungscookie aus Chrome. Kratzt alle Videoeinträge nach Name, VID (URL), Kanal/Benutzer, Beschreibung, Länge. Dann findet er die Schaltfläche am unteren Rand der Seite mit dem Attribut data-uix-load-more-href, das den Link zur nächsten Seite enthält, etwa
"/browse_ajax?action_continuation=1&continuation=98h32hfoasau0fu928hf2hf908h98hr%253D%253D&target_id=item-section-552363&direct_render=1"
... erstellt die Videoeinträge von dort neu und speichert sie alle in einer sqlite-Datenbank. Sie können Einträge nach einem der Felder durchsuchen (Name, Länge, Benutzer, Beschreibung usw.).
Bis sie ihre Feed-/History-Seite ändern, ist sie machbar und fertig. Ich könnte sie sogar aktualisieren.
Die API ruft derzeit nur die letzten zwei Wochen des Watch-Verlaufs ab. Weitere Informationen finden Sie in dem gemeldeten Bug-Problem: https://code.google.com/p/gdata-issues/issues/detail?id=4642
Hinweis: Es gibt eine ähnliche Frage zu SO, die hier gestellt wurde: YouTube API v3 gibt abgeschnittenen Überwachungsverlauf zurück
Es scheint, dass dies ein bekannter Fehler ist, der ursprünglich im Jahr 2013 gemeldet wurde. Das gleiche Verhalten wird in einem Google Code-Thread erläutert: https://code.google.com/p/gdata-issues/issues/detail?id=4642
Brainstorming, noch nie probiert: Haben Sie not mit der API ausprobiert und stattdessen die URL " https://www.youtube.com/feed/history " analysiert?
Theoretisch könnte das Durchsuchen des Benutzers einschließlich der Paginierung emuliert werden. Mir ist nicht bewusst, wie schwer (wahrscheinlich sehr) es ist, da Sie sich mit Authentifizierung befassen müssen und YouTube wahrscheinlich versucht, zu überprüfen, ob ein Mensch browst.