PythonでGoogleドライブに画像をアップロードするプログラムを作ってみました。
#環境
Windows 7 Professional SP1 64bit
Python 3.6.1 (64bit)
pip 9.0.1
google-api-python-client 1.6.2
PyDrive 1.3.1
#パッケージインストール
「google-api-python-client」と「PyDrive」をインストールします。
>pip install google-api-python-client
>pip install PyDrive
PyDriveのインストールでエラーが発生したので以下の方法で解決しました。
http://qiita.com/akabei/items/da70ebf61cc413d5ff0d
#OAuthクライアントID取得
Googleドライブにアクセスするのに「クライアントID」と「クライアントシークレット」が必要になるので取得します。
Google Developers Consoleにアクセスしてプロジェクトを作成します。
https://console.developers.google.com/
プロジェクト名を適当に入力します。
認証情報から「OAuthクライアントID」を作成します。
「OAuthクライアントIDを作成するには、まず同意画面でサービス名を設定する必要があります。」と表示されたら同意画面を設定します。
OAuth同意画面から「ユーザーに表示するサービス名」を適当に入力します。
クライアントIDの作成が表示されたら「その他」を選択して名前を適当に入力して作成を押します。
これで「クライアントID」と「クライアントシークレット」が取得できます。後で使うので忘れないようにメモしておいてください。
または、認証情報からJSONファイルをダウンロードしましょう。JSONファイルに「クライアントID」と「クライアントシークレット」が記入されています。
#Google Drive APIを有効にする
引き続きGoogle Developers ConsoleのライブラリからGoogle Apps APIのDrive APIを選択します。
以下のような画面が表示されるので「有効にする」を押してGoogle Drive APIを有効にします。
「有効にする」が「無効にする」に変わったらGoogle Drive APIが有効になっています。(Google Drive APIの設定は不要です)
これでGoogleドライブにアクセスする準備が整いました。
#プログラム作成
Googleドライブに画像をアップロードするプログラム(imageupload.py)を作成します。
今回はコマンドラインから呼び出すのでCommandLineAuth()を使っています。
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
gauth = GoogleAuth()
gauth.CommandLineAuth()
drive = GoogleDrive(gauth)
f = drive.CreateFile({'title': 'test.jpg', 'mimeType': 'image/jpeg'})
f.SetContentFile('test.jpg')
f.Upload()
プログラムと同じフォルダに設定ファイル(settings.yaml)を作成します。
上記で取得した「クライアントID」と「クライアントシークレット」を記入します。
client_config_backend: settings
client_config:
client_id: <クライアント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
プログラムと同じフォルダに今回テストで使う画像(test.jpg)を用意します。
#プログラム実行
コマンドプロンプトからプログラムを実行します。初回実行時は識別コード(verification code)の入力を求められるので、表示されたURLをブラウザで表示します。
>python imageupload.py
C:\Python36\lib\site-packages\oauth2client\_helpers.py:255: UserWarning: Cannot access credentials.json: No such file o
r 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=915107419881-unme2nu12t3d5sf10cmpudgo20jq3mtg.apps.googleuserco
ntent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.file+h
ttps%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.install&access_type=offline&response_type=code&approval_prompt=force
Enter verification code:
プラウザにGoogleドライブへのアクセスを承認する画面が表示されるので「許可」します。
ブラウザに識別コードが表示されるのでコピーして先程のコマンドプロンプトに貼り付けます。
識別コードを貼り付けたらエンターキーを入力します。
Enter verification code: 4/aiZHOmoP3Ufz5Y-d8BvTFq8-IL7Do2GK7FOAAurccN4
Authentication successful.
正常に終了したらGoogleドライブに画像がアップロードされます。(2回目以降は識別コードの入力は不要です)
Googleドライブ
https://drive.google.com/drive/
#フォルダにアップロード
Googleドライブのフォルダにアップロードするときは「フォルダID」が必要です。
ブラウザでアップロードしたいフォルダを開いて表示されたURLの最後の部分がフォルダIDです。
CreateFile()のパラメータにフォルダIDを指定することでそのフォルダへアップロードできます。
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
gauth = GoogleAuth()
gauth.CommandLineAuth()
drive = GoogleDrive(gauth)
folder_id = '0B5fATn-vXv5wZ0RlM1JpQzdFTk0'
f = drive.CreateFile({'title': 'test.jpg',
'mimeType': 'image/jpeg',
'parents': [{'kind': 'drive#fileLink', 'id':folder_id}]})
f.SetContentFile('test.jpg')
f.Upload()
#参考
以下のサイトを参考にさせていただきました。
PyDrive による Google Drive の利用
http://python.keicode.com/advanced/pydrive.php