4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

YouTube Data api v3をPythonから使って動画の閲覧数をごそっと取得する

Last updated at Posted at 2019-09-17

はじめに

動画IDとapi keyが必要となります。

api keyはgoogle developer consoleから取得し、環境変数にいれて使用します。
取得の方法についてはgoogle - 承認の認証情報を取得するを参照してください。
(Oauthトークンを取得する必要はありません)

動画IDの取得

動画ページにてhttps://www.youtube.com/watch?v=XXXXXXXXXXXX部分を取るのが簡単だと思いますが、そもそもごそっと取得しようとしているのでこれも自動でやろうと思います。

特定チャンネルの動画IDを集めるのであれば以下のような方法があります。
YouTube Data api v3をPythonから使って特定のチャンネルの動画を取得する

また、google-api-clientsearch().listメソッドを用いることで検索クエリによる動画の取得も可能です。
その場合はqiita - PythonとYoutube Data API(v3)で再生数を取得するという記事の方法の方が簡単だと思います。

  videos_response = youtube.videos().list(
    part="id,snippet,statistics",
    id=options.id
  ).execute()

今回行なっていた特定チャンネルからの動画取得→再生数取得の場合は

  • Youtube Data APIのPythonインターフェースにてそれにちょうど合致するものがない
  • http request上でid,snippet,statisticsを同時に指定するとエラー

となるため、それの回避策となります。

動画の閲覧数の取得

さて本題。
videos.csvYouTube Data api v3をPythonから使って特定のチャンネルの動画を取得するにて出力したcsvファイルです。
そのため、動画idのSeriesであれば、なんでも大丈夫です。

import os
import time
import requests

import pandas as pd


API_KEY = os.environ['API_KEY']
videos = pd.read_csv('videos.csv')
base_url = 'https://www.googleapis.com/youtube/v3'
stat_url = base_url + '/videos?key=%s&id=%s&part=statistics'

len_block = 50
video_ids_per_block = []
video_ids = videos.videoId.values

count = 0
end_flag = False
while not end_flag:
    start = count * len_block
    end = (count + 1) * len_block
    if end >= len(video_ids):
        end = len(video_ids)
        end_flag = True

    video_ids_per_block.append(','.join(video_ids[start:end]))
    
    count += 1

stats = []
for block in video_ids_per_block:
    time.sleep(30)
    response = requests.get(stat_url % (API_KEY, block))
    if response.status_code != 200:
        print('error')
        break
    result = response.json()
    stats.extend([item['statistics'] for item in result['items']])

pd.DataFrame(stats).to_csv('stats.csv', index=None)

途中のlen_blockなどというのはごそっとバッチで取得するために、url内のid,で結合した動画idを渡すためのものです。
一度に取得できる最大が50件なので、len_block=50としています。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?