大阪大学医学部 Python会

Now is better than never.

やさしいYouTube APIのはなし

2020-06-24(Wed) - Posted by 川崎 in 技術ブログ    tag:自動化

Contents

    前回は Twitter API を取得して定期ツイートする方法について書きましたが、今回の記事では YouTube API を試してみたいと思います。

    APIとは?

    APIとは何かざっくり説明いたしますと、
    あるアプリケーションにまつわる操作を、
    プログラミングを通じて自動化やらなんやら、といったものです。
    例えば Twitter ならツイート検索や投稿などがPythonで実行できます。

    image9

    Youtube にまつわるAPIは様々ありますが今回は YouTube Data API v3 を使っていきます。 YouTube Data API v3 は、動画、プレイリスト、チャンネルなどのYouTubeデータへのアクセスを提供するAPIです。

    準備

    まずは Google が提供しているクラウドコンピューティングサービスである、 Google Cloud Platform (https://console.cloud.google.com) にアクセスし、「プロジェクトの選択」から新しいプロジェクトを作成します。 次に「スタートガイド」の「APIを探索して有効にする」をクリック。

    image7

    左側のタブからライブラリを選んでAPIが検索できます。 検索窓に YouTube と入力し、 "YouTube Data API v3" を選択して「有効にする」ボタンをクリック。 「認証情報」の画面から「認証情報作成」のボタンを押下し、APIキーを取得しておきます。

    image6

    今回は「Google Colabotratory」での実装を試してみます。 「Google Colabotratory」は Google ドライブ上で使えるJupyter Notebookのようなものです。 ドライブ上にコードを保管できるほか、予め構築されたGoogleの仮想環境上で動かすことができるので大変便利です。 google-api-python-client モジュールを用いますが、これは Google Colab に始めからインストールされているようです。 !pip list を実行して確認できます。

    image6

    実際に動かしてみる

    早速YouTube APIで動画の情報を収集してみましょう。 例えば、ある投稿者の最新の動画を調べたい場合にも、APIを使って検索が可能です。 今回はHIKAKINさんのチャンネルで新しく投稿された動画について調べてみたいと思います。

    さて、実は Youtube ではチャンネル毎に固有の ID が割り振られています。

    image4

    これを search() 関数に与えることでAPI上で動画の検索ができます。 早速試してみます。 先程取得したAPIキーを使って、YouTubeにAPI経由でアクセスします。

    from apiclient.discovery import build
    from apiclient.errors import HttpError
    
    YOUTUBE_API_KEY = "AI*************************************"
    
    youtube = build("youtube", "v3", developerKey=YOUTUBE_API_KEY)
    
    search_response = youtube.search().list(
    part="snippet",
    channelId= "UCZf__ehlCEBPop-_sldpBUQ",
    maxResults=10,
    order="date",
    ).execute()
    
    titles = [item["snippet"]["title"] for item in search_response["items"]]
    titles
    

    出力結果は以下のようになりました。

    image8

    HIKAKINさんの新着動画のタイトルが取得出来ています。

    このようにYouTubeのサイトに直接アクセスしなくても、APIを叩くだけでちょっとした調べものが出来てしまいます。

    自動化とOAuth2.0認証の実装

    さらにAPIはプログラミング言語で動かすことが出来るという特性上、一連の操作をすべて自動でできるという利点があります。 例えば 自分が登録しているチャンネルを全て取得して、そのどれかが新しく動画をアップロードし、それが特定のワードを含む場合にメールでお知らせしてくれるようなシステム を作りたいとします。

    まずは自分が登録しているチャンネルの一覧を取得してみましょう。 登録チャンネルは非公開情報ですので、取得するにはログイン権限が必要です。 Googleアカウントでログイン認証する際には、 OAuth2 (オーオースツー) 認証方式 が使われています。 下のような画面に見覚えがある方も多いと思います。

    image2

    この画面を作ることで、自分の Google アカウントにログインし登録チャンネルを取得します。 幸いPythonには oauth2client というモジュールが存在し、これを使えば OAuth2認証 が簡単に実装できるようになっています。 早速やってみましょう。

    まずはプログラムにOAuth認証を組み込むのに必要な、 クライアントIDとクライアントシークレット を取得します。 これは先程のAPI認証情報のページから容易に手に入ります。 これを使用してOAuth2認証を実装してみた結果が以下になります。

    image3

    エラーが出ています。 何がいけなかったのでしょうか。

    image1

    公式サイト (https://developers.google.com/youtube/v3/code_samples/python?hl=ja#add_a_channel_subscription) にAPI実装のサンプルコードが載っていました。 自力では無理でもこのサンプルをコピペすれば…

    CLIENT_SECRETS_FILE = "client_secrets.json"
    

    json??? その json はどっから出てきたんや???

    image12

    storage??? そんなものは無いが???

    ……。

    image10

    というわけでまったくやさしくないOAuth2認証のお話でした。

    image11 ↑ 未知のモノを実装するにはその構造を理解する必要がある

    まとめ

    残念ながら今回はYouTube APIを使いこなすことが出来ませんでした。

    プログラミングを学ぶ中で分からない概念に出会って心が折れてしまったこと、誰でも一度は経験があると思います。

    そんな時には見極めが大事です。 本当に使う必要があるのか? 別のルートで迂回は出来ないか? それを覚える時間は無駄にならないか? 自身のスキルアップに繋がるか? などなど……

    見極めた上で本当に必要だと思った知識は、是非時間を掛け学んで自分の武器にしてみてください。

    次回は「やさしいOAuth2認証のはなし」について投稿予定です。