PythonでGoogle Blogger APIを使う(その2:ソースコードの概要説明)
この記事のまとめ
- 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のインストール方法について説明します。
最後まで読んでいただき、ありがとうございます。
コメント
コメントを投稿