web-dev-qa-db-fra.com

Comment obtenir l'historique complet de la surveillance YouTube d'un utilisateur?

J'essaie d'obtenir une liste complète des vidéos visionnées pour un utilisateur donné dans mon application API YouTube. Je veux ajouter la durée totale de toutes les vidéos. 

Lorsque j'obtiens la liste des vidéos de la liste de lecture historique, l'API la limite à 50 éléments. Il y a pagination mais le nombre total d'éléments est de 50 (pas seulement par page); Je ne peux pas accéder à plus de données avec l'API qui apparaît. 

Est-il possible d'obtenir cette liste de lecture sans la limite de données? J'espère une autre méthode (d'utiliser l'API) ou un moyen de le faire sans l'API. Je sais que YouTube stocke ces données car je peux voir l’ensemble de mon historique (bien plus que 50 vidéos).

J'utilise ce code:

var requestOptions = {
    playlistId: playlistId,
    part: 'snippet',
    maxResults: 50
};
gapi.client.youtube.playlistItems.list(requestOptions);

playlistId est l'id de la liste de lecture d'historique obtenue d'une demande gapi.client.youtube.channels.list.

Edit (2017): Je tiens à préciser que mon intention était toujours de télécharger ma propre histoire, par simple intérêt de voir le temps que j'ai passé à regarder des vidéos. Je n'ai toujours pas été capable de faire ça.

26
Fsmv

J'ai écrit un grattoir (dans Python 2.7 (mis à jour pour la version 3.5) et Scrapy) pour cette tâche il y a quelque temps . API officielle Sans, elle utilise un cookie de session connecté et une analyse HTML. Sauvegarde vers SQLite par défaut . https://github.com/zvodd/Youtube-Watch-History-Scraper

Comment c'est fait: en gros, ça ouvre l'URL 

https://www.youtube.com/feed/history'

avec un cookie de session valide (connecté) extrait de Chrome. Efface toutes les entrées vidéo pour le nom, le vid (url), le canal/utilisateur, la description, la longueur. Ensuite, il trouve le bouton au bas de la page avec l'attribut data-uix-load-more-href qui contient le lien vers la page suivante, du type:

"/browse_ajax?action_continuation=1&continuation=98h32hfoasau0fu928hf2hf908h98hr%253D%253D&target_id=item-section-552363&direct_render=1"

... ré-efface les entrées vidéo à partir de là et les vide toutes dans une base de données sqlite; vous pouvez rechercher des entrées dans n’importe lequel des champs (nom, longueur, utilisateur, description, etc.).

Donc, jusqu'à ce qu'ils modifient leur page de flux/historique, tout est faisable et terminé .. Je pourrais même le mettre à jour.

13
Zv_oDD

L'API ne récupère actuellement que les deux dernières semaines de l'historique de surveillance. Pour plus d'informations, reportez-vous au bogue signalé: https://code.google.com/p/gdata-issues/issues/detail?id=4642

Remarque: Une question similaire sur SO a été posée ici: L'API v3 de YouTube renvoie l'historique de suivi tronqué

13
vol7ron

Il semble qu'il s'agisse d'un bogue connu, signalé à l'origine en 2013. Le même comportement est expliqué sur un fil de code Google: https://code.google.com/p/gdata-issues/issues/detail?id=4642

3
Nostradamus

Brainstorming, jamais essayé: avez-vous essayé not en utilisant l'API et en analysant plutôt l'adresse https://www.youtube.com/feed/history URL?

Théoriquement, la navigation de l'utilisateur pourrait être émulée, y compris la pagination. Cependant, je ne sais pas à quel point il est difficile (probablement très), car vous devez gérer l'authentification et YouTube essaie probablement de vérifier qu'un humain surfe.

0
noderman