30

YouTube API アプリケーションで、特定のユーザーが視聴した動画の完全なリストを取得しようとしています。すべての動画の合計時間を合計したい。

履歴プレイリストから動画のリストを取得すると、API によって 50 項目に制限されます。ページネーションはありますが、項目の総数は 50 です (1 ページあたりだけではありません)。表示された API でこれ以上のデータにアクセスできません。

データ上限なしでこのプレイリストを取得する方法はありますか? (API を使用する) 別の方法、または API を使用せずにそれを行う方法を望んでいます。YouTube がこのデータを保存していることはわかっています。これは、履歴全体 (50 本をはるかに超える動画) を表示できるためです。

私はこのコードを使用しています:

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

リクエストplaylistIdから取得した履歴プレイリストの ID はどこにありますか。gapi.client.youtube.channels.list

編集 (2017):自分の履歴をダウンロードするのは常に私の意図であったことを明確にしたい. 私はまだこれを行うことができませんでした。

4

5 に答える 5

16

少し前に、このタスクのためにスクレイパー (Python 2.7 (3.5 用に更新) および Scrapy) を作成しました。Sans 公式 API は、ログイン セッション Cookie と html 解析を使用します。デフォルトで SQLite にダンプします。 https://github.com/zvodd/Youtube-Watch-History-Scraper

方法: 基本的に URL を開きます

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

Chrome から取得した有効な (ログイン済みの) セッション Cookie を使用します。名前、vid(url)、チャンネル/ユーザー、説明、長さのすべての動画エントリをスクレイピングします。次に、次のページへのリンクを含むdata-uix-load-more-href属性を持つページの下部にあるボタンを見つけます。

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

...そこからビデオエントリを再スクレイピングし、それらすべてをsqliteデータベースにダンプします。任意のフィールド (名前、長さ、ユーザー、説明など) でエントリを検索できます。

したがって、彼らがフィード/履歴ページを変更するまで、それは実行可能で完了です. 更新することもあります。

于 2016-03-02T23:51:57.263 に答える
0

ブレインストーミング、試したことがない: API を使用せずに、代わりにhttps://www.youtube.com/feed/history URLを解析してみましたか?

理論的には、ページネーションを含め、ユーザーのブラウジングをエミュレートできます。認証に対処する必要があり、YouTube はおそらく人間が閲覧していることを確認しようとするため、(おそらく非常に) 難しいことはわかりません。

于 2015-07-22T23:00:56.650 に答える