
この記事のまとめ
- PythonでBlogger用Google APIを使うサンプルコードの概要説明
前回のおさらい
今回はPythonでBlogger用Google APIを使う方法について説明の全4回中2回目です。
サンプルコードの概要
前回Blogger用のGoogle APIを使ったPythonのサンプルコードの紹介をしました。今回はサンプルコードに沿って、その概要を説明していきます。
ソースコードのほとんどの部分は、OAuth 2.0という認証のために必要な情報の設定と認証処理を行っております。その認証情報を用いてGoogle APIを使うことができます。
まず、OAuth 2.0による認証方法について説明していきます。
OAuth 2.0
OAuth 2.0とは、Google APIで使われている認証プロトコルです。プロトコルの詳細は複雑なので(私も理解していません)、ライブラリの使い方のみ記載します。
基本的にはGoogleの公式ガイド(英語のみ)から重要そうなポイントだけを絞って説明していきます。
また、Google APIは基本的にWebアプリケーションを想定しているのかほとんどの説明がWebサーバーからの認証か、Webブラウザーからの認証がほとんどになっていますが、楽をしたかったのでコマンドラインツールを使ってブラウザーを用いて認証をしたいと思います。ブラウザーを用いた認証方法について一つ一つ手順を踏んで実装したい場合には、公式ガイド(英語のみ)にサンプルコードが載っていますのでそちらを参照してください。
oauth2clientライブラリ
oauth2clientライブラリはGoogle APIs Client Library for Pythonに含まれています。このライブラリのインストール方法は次回説明します。このライブラリを使うことによって、APIの呼び出しに必要なOAuth 2.0プロトコルのすべてのステップを行ってくれます。
これ以降にライブラリの重要なモジュール、クラス、関数について説明します。
Flows
FlowクラスはあなたのアプリケーションがあなたのGoogleユーザーデータにアクセスするための認証する資格情報を取得するために用いられます。Flowオブジェクトは認証するステップを行う関数を持っています。ただし、後で説明しますが、コマンドラインツールを使って認証を行う場合には、Flowオブジェクトの関数を直接呼び出すことはありません。
Flowクラスにはflow_from_clientsecretsとOAuth2WebServerFlowとがあり、後者を使って認証を行います。なお、前者はclient_secrets.jsonを使って認証するFlowクラスであり、後者は認証に必要な情報を直接入力して認証するFlowクラスです。
OAuth2WebServerFlow
OAuth2WebServerFlowクラスはFlowオブジェクトを生成するために用い、client ID、client secret、scope、redirect_uriを渡すことでFlowオブジェクトを生成してくれます。
client ID、client secretは、認証に必要なIDと秘密鍵情報で、Google API Consoleから取得できます。なお、次々回これらの情報を取得する方法を説明します。
scopeは、アクセスするサービスとアクセスレベルを指定するための情報です。ここに一覧があります。Bloggerに読み書き可能なアクセスレベルでアクセスするためにはhttps://www.googleapis.com/auth/bloggerを指定します。
redirect_uriは、Googleの認証サーバーが認証コードをリダイレクトする先を指定する情報です。指定方法は2つあり、http://localhost:[port]とurn:ietf:wg:oauth:2.0:oobの2つです。前者は、クライアント側に対して、指定したポートにリダイレクトします。そのため、クライアント側でGoogle APIを使うための認証コードのリダイレクトをリッスンできる状態にしておかなければなりません。後者は、クライアント側でリダイレクトをリッスンしない、もしくはできない場合に使用します。この場合、ブラウザーから認証コードを取得することになります。今回は、リダイレクト用のサーバーを立ち上げるのが手間なので、後者を指定します。
なお、このoauth2client.client.OAuth2WebServerFlowクラスですが、名前はWebServerとなっていますが、installed applicationおよびweb applicationにも使用できます。
Command-line tools
認証ステップを行ってくれるoauth2client.tools.run_flow関数を使います。なお、oauth2client.tools.run_flow関数は上記で説明したFlowオブジェクト内の関数を用いて実装されています。
oauth2client.tools.run_flow関数は認証資格情報(credentialsオブジェクト)を取得するための関数で、返り値としてそのcredentialsオブジェクトを返してくれますが、その中でブラウザーから下のようなアクセス許可の確認が行われます。
これを許可することでcredentialsオブジェクトを与えてくれます。
実行のために下記の2つの引数を必要とします。
1つ目が、上記で記載したFlowオブジェクトです。説明が前後していますが、上記で説明したものです。
2つ目が、credentialsオブジェクトを保管と取り出すためのstorageオブジェクトです。oauth2client.client.Storageとして定義されております。一度run_flow関数でcredentialsオブジェクトを取得してしまえば、その情報を保存し、次回以降それを読み込んでやれば何度も認証する必要なく、Google APIを呼び出すことができます。
credentials
credentialsオブジェクトはrefresh tokenとaccess tokenを保持し、それらは単一ユーザーのデータへのアクセスを認証します。credentialsオブジェクトのauthorize関数を使うことで、httplib2.HttpインスタンスによるすべてのAPI呼び出し要求に対して、必要な資格情報ヘッダーを付与してくれます。
apiclient.discovery.build
一度httplib2.Httpオブジェクトが認証されれば、apiclient.discovery.build関数に使いたいGoogle API情報とともに渡すことで呼び出したAPIに対するserviceオブジェクトを返してくれます。
なお、Google API名、バージョン名はこちらから確認できます。
Blogger API
serviceオブジェクトが生成できればあとはオブジェクトのインスタンスに基づいてAPIを制御するだけです。サンプルコードでは、タイトル"posted via python"、本文"hello world test"とだけ書いた記事を投稿するものになっています。
あとはこちらのAPIの説明に基づいてAPIを呼び出しましょう。
長くなりましたが、以上です。
次回は実際にサンプルコードを動かすためのPython用Google APIのインストール方法について説明します。
最後まで読んでいただき、ありがとうございます。
コメントを投稿