Pythonには多様なライブラリが用意されているので、様々な分野で活用することができる。今回は、Pythonからオンラインストレージの「Googleドライブ」を操作してみよう。PythonからGoogleドライブにアクセスできれば、任意のタイミングでクラウドにデータをアップしたり、定期的にファイルを更新したり、とアイデア次第で活用できるだろう。
Googleドライブとは?
Googleドライブは、Googleが提供しているオンラインストレージのサービスだ。15GBを無料で利用可能で、各種ファイルをクラウド上に保存できる。加えて、オフィス文書などはWebブラウザ上でも閲覧することが可能なので、利用している方も多いだろう。
GoogleドライブのWebサイト |
OAuth認証について
普通に使っても便利なGoogleドライブだが「Google Drive API」と言って、プログラミング言語から、Googleドライブを操作するためのインターフェイスを公開している。つまり、Pythonを利用して、Googleドライブを自由に操作できるということだ。
とは言え、クラウド上にあるファイルを自作のプログラムから操作できれば便利に違いないが、それほど簡単にできてしまうと、逆にセキュリティも心配になるというもの。その点、Googleドライブでは、OAuthという認証を採用しており、安全にクラウド上のファイルを操作できる仕組みを提供している。
OAuthは、セキュリティが強固である反面、若干複雑なので、図で確認してみよう。以下は、Googleドライブを操作するアプリが、ユーザー認証を行い、アクセス用のトークンを得るまでの手順を示している。
(1) ユーザーはアプリを利用したい旨をアプリに伝える
(2) アプリでは、Googleドライブに対してユーザー認証をするように伝える
(3) Googleドライブは、ユーザーに認証画面を出して、本当にAPIの利用を許可して良いのか尋ねる
(4) ユーザーは、許可して良いことを示すために、認証画面でパスワードを入力してログインを行う
(5) Googleドライブでは、ユーザーの許可が取れたので、APIで自由にドライブを操作できることを表すトークン(許可証のようなもの)を発行してアプリに与える
そして、一度、OAuthのアクセス用のトークンを得てしまえば、ユーザーがそれを無効にするまで、クライアントアプリは自由に、ユーザーのGoogleドライブを操作できる。
このOAuthの仕組みは、それなりに複雑だが、順を追って作業することで、利用できる。それでは、一つずつステップを確かめて作業していこう。
ライブラリ「PyDrive」をインストールしよう
まずは、Googleドライブを手軽に扱うためのライブラリPyDriveをインストールしよう。Windowsで、前回の記事を読んでAnacondaをインストールしているなら、スタートメニューから「Anaconda > Anaconda Prompt」を起動しよう。macOSであれば、ターミナル.appを起動しよう。
そして、コマンドラインで以下のコマンドを入力して、Enterキーを押すと、PyDriveがインストールされる。
$ pip install google-api-python-client PyDrive
クライアントアプリ側の準備をしよう
それで、Googleドライブを操作するクライアントアプリは、必ず、Googleに利用申請を出す必要がある。利用申請と言っても簡単な作業なので心配は不要だ。
以下のURLにアクセスして、プロジェクトを作成し、APIを利用する際に必要となる「OAuth クライアントID」と「クライアントシークレット」を発行してもらうだけだ。
Google Developers Console
[URL] https://console.developers.google.com/
上記URLにアクセスしたら、画面左側にある「ダッシュボード」をクリックしよう。すると、プロジェクトを作成するようにと、ダイアログが表示されるので、適当なプロジェクト名を入力して、プロジェクトを作成する。
次に、画面左側にある「認証情報」をクリックしよう。そして、「認証情報を作成」のボタンを押して「OAuth クライアント ID」をクリック。次いで「その他」を選んで名前を入力して、「作成」のボタンをクリックする。
すると、「クライアント ID」と「クライアント シークレット」の二つの情報が得られるので、これをコピーしてメモっておこう。これは、後ほどプログラムの中で利用する。
Google Drive APIを有効にしよう
続いて、先ほどの、Google Developers Consoleで、GoogleドライブのAPIを有効にする必要がある。画面左側から「ダッシュボード」を選択し、画面右側「ダッシュボード」の右側にある「APIとサービスの有効化」のリンクをクリックしよう。
すると、Googleが提供しているAPIの一覧が表示されるので、その中にある、Google Drive APIを探すか、検索ボックスに「Google Drive API」と入力して検索しよう。見つかったら、Google Drive APIのページを出して、「有効にする」のボタンをクリックしよう。
すると、以下のような画面になる。これで、Google Drive APIが利用可能になり、これで、アプリ側で行う準備は整った。
Googleドライブにテキストファイルを作成しよう
それでは、プログラムを作って実行してみよう。ここでは、以下のようなプログラムを作成し、「write_text.py」という名前で保存しよう。
# 必要なライブラリのインポート
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
# OAuth認証を行う
gauth = GoogleAuth()
gauth.CommandLineAuth()
drive = GoogleDrive(gauth)
# テキストをGoogleドライブに書き込む
f = drive.CreateFile({'title': 'test.txt'})
f.SetContentString('賢い人に与えよ。彼はさらに賢くなる。')
f.Upload()
また、上記のプログラムとは別に、settings.yamlという設定ファイルを作成しよう。このファイルには、以下のような内容を記述する。その際、先ほどGoogle Developers Consoleで得た情報を書き込もう。(★で示した箇所に書き込む)
client_config_backend: settings
client_config:
client_id: ★ここにOAuth クライアントID★
client_secret: ★ここにクライアントシークレット★
save_credentials: True
save_credentials_backend: file
save_credentials_file: credentials.json
get_refresh_token: True
oauth_scope:
- https://www.googleapis.com/auth/drive.file
- https://www.googleapis.com/auth/drive.install
そして、以下のコマンドをコマンドラインから実行しよう。
$ python write_text.py
これを実行したのが以下の画像だ。
コマンドを実行すると、すぐにURLが表示される。そこでWebブラウザで、表示されたURLにアクセスしよう。(URLをもれなくコピーして、Webブラウザのアドレスバーに貼り付ける。)
すると、Googleの認証画面が出るので、ログインして、[許可]ボタンを押すと、認証コードが得られる。
そこで、コマンドラインに戻って、認証コードを入力すると、プログラムが実行される。
プログラムが正しく実行できると、Pythonから書き込んだファイルが、Googleドライブに保存されているのが確認できるだろう。
ちなみに、初回にこの認証作業を行うと「credentials.json」というファイルが同じフォルダに作成される。
このファイルには、Google Drive APIで利用する認証情報が保存される。そのため、2回目以降は、こうした面倒な認証作業を行うことなく、どんどんGoogleドライブにアクセスできる。
まとめ
以上、今回は、Googleドライブを操作する第一歩の部分を紹介した。ここで見たように、OAuth認証では、最初にアプリ側で利用申請し、その後、ユーザーごとに許可処理を行うという手順を踏む必要がある。若干、面倒に感じる場面もあるかもしれないが、一度認証してしまえば、自由に使えるので挑戦してみよう。今回は、基本的な操作だけを紹介したので、次回は、もう少し突っ込んだ使い方をしてみよう。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2005年IPAスーパークリエイター認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。