【コード例を更新しました。】google-api-python-clientとPython3でちょっと遊んでみる。

By | 2017年8月16日 , Last update: 2020年12月31日

はじめに

google-api-python-clientがVersion 1.6.2以降でPython3に対応したようなので、こいつを使ってFedora 26上でYouTube Data API v3のプログラムを動かしてみることにしました。

その顛末を書いていきます。

[2018/9/23追記] 続編のようなものを書きました。詳しくは「まとめ」の節を参照していただけると幸いです。

スポンサーリンク

事前準備

APIキーなどの取得

APIキーやOAuth2.0認証のために必要な情報を作成します。この記事のサンプルプログラムではOAuth2.0認証のみを使用しますので、OAuth2.0認証のための手順のみを示します。

OAuth2.0認証のための情報は以下の手順で作成します。

  1. https://console.developer.google.com/ にアクセスして「OAuth同意画面」で必要事項を入力して認証情報を作成します。
  2. OAuthクライアントIDを作成します。今回はPython3からのアクセスですので、その他のクライアント用のものを作成しました。
  3. OAuthクライアントIDを作成したら、下図の赤矢印のリンク(「JSONをダウンロード」)をクリックし、サンプルプログラムで使用するためのJSONファイルをダウンロードします。なお、ダウンロードした後にサンプルプログラムから読み込みやすくするため、ファイル名をclient_secrets.jsonに変更しておきます。

google-api-python-clientのインストール

root権限で、シェルプロンプトから以下のコマンドを実行し、google-api-python-clientをインストールします。

$ pip3 install google-api-python-client

 

すると、google-api-python-clientパッケージ及び前提のパッケージ(httplib2, oauth2client, rsa及びuritemplate)がインストールされて、利用できるようになります。

※WindowsのPython3でhttplib2のインストール時にエラーが発生する場合には、セットアップ用のコードの修正が必要になる場合があります。

サンプルプログラムを動かしてみる。

動作確認の手順

以下の手順でサンプルプログラムを動かしてみます。

  1. Google先生の公式のページからYouTube Data API v3へアクセスするためのサンプルプログラムをダウンロードします。
  2. サンプルプログラムに取得したAPIキーやOAuth2.0認証用の情報を追加します。
  3. サンプルプログラムを実行します…といいたいところですが、上記のリンクからダウンロードしたプログラムはPython2用のコードなので、print文の構文をPython3のものに修正します。修正後はmovielist.pyというファイル名で保存します(movielist.pyのプログラムの内容はこの記事の「動作の確認に使ったサンプルプログラム」の節参照)。
  4. movielist.pyを以下のように実行すると、YouTubeのpandanote.infoチャンネルにアップロードした動画のタイトルと動画のIDの一覧を表示させることができます。OAuth2のアクセストークンが作成されていない場合には、コマンドの実行直後に作成されますが、以下のコマンドを実行する端末でブラウザを表示できない場合には、OAuth2のアクセストークンを作成することができませんので、”--noauth-local-webserver”というコマンドラインオプションをつけて実行します(詳細は次節参照。なお、長いオプション名に”-“を含む場合には、そのオプションの解析後の属性名は”-“を”_”に置き換えたものになります[2]。例: --noauth-local-webserver → noauth_local_webserver)。
    $ python3 movielist.py

     

コマンドラインオプション

movielist.pyの主要なコマンドラインオプションは以下の通りです。

  • --all-fileオプション: 公開状態が「非公開」または「限定公開」の動画についての情報も取得及び表示します。本オプションを使用しない場合には、公開状態が「公開」の動画のみを処理の対象とします。
  • --noauth-local-webserverオプション: OAuthの認証コードを本プログラムを実行するコンピュータとは別のコンピュータを用いて取得する場合に指定します。

実行結果

スポンサーリンク

movielist.pyの実行結果は以下の通りとなります。

OAuth2のアクセストークンが作成されておらず、かつ、--noauth-local-webserverオプションを追加して実行した場合の操作法


スポンサーリンク

OAuth2のアクセストークンが作成されておらず、かつ、--noauth-local-webserverオプションを追加して実行した場合には、以下のようなプロンプトが表示され、Verification Codeの入力を求められます。

[panda@pandanote.info youtube]$ python3 movielist.py --noauth-local-webserver
/home/panda/.local/lib/python3.6/site-packages/oauth2client/_helpers.py:255: UserWarning: Cannot access movielist.py-oauth2.json: No such file or directory
warnings.warn(_MISSING_FILE_MESSAGE.format(filename))
 
Go to the following link in your browser:
 
https://accounts.google.com/o/oauth2/auth?client_id=349823378835-26tafco6s1j7tqhhanqccacagtqhbalt.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyoutube.readonly&access_type=offline&response_type=code

Enter verification code:

 

このような場合には、以下の手順を実行します。

  1. 別の端末でブラウザを起動し、”https”で始まるURLをアドレスバーにcopy & pasteします。
  2. YouTubeのチャンネルに対応するブランドアカウント(ここではpandanote.infoを選択)を選択します。
  3. すると、ブラウザの画面が以下のような画面に切り替わすので、下図の(a)の部分に示された文字列を上記の”Enter verification code: ” の行にcopy & pasteし、Enterキーを押します。
  4. プログラムが実行されて、実行結果が表示されます。

動作の確認に使ったサンプルプログラム

動作の確認に使ったサンプルプログラムは以下の通りです。最初に書いたときには、動画のタイトルとIDのリストを出力するものでしたが、タグを出力するためのコードを追加しています。

[2018/11/23追記]…と思っていたのですがGistの更新ができていませんでした。先ほど更新したので、これでタグが出力できるコードになっていると思います。

まとめ

この記事ではサンプルプログラムをとりあえずPython3上で動作させるための方法について書きました。YouTubeのpandanote.infoチャンネルの方も動画の数がそこそこ増えてきたので、それらの管理用にうまく利用したいと考えています。

この記事は以上ですが、GitHub Pagesと組わせたところ、新たなWebサイト「panda大学習帳外伝」が爆誕しました。その顛末はこちらをご覧いただけると幸いです。

References / 参考文献

  1. YouTube Data API の概要
  2. argparse — Parser for command-line options, arguments and sub-commands