Oauth 2.0 サーバー間認証(サービス アカウントを使用) を使用して、Google ドライブにファイルをアップロードしようとしています。サンプル コードを参照として使用すると、結果のスクリプトは次のようになります。
import httplib2
import pprint
import sys
from apiclient.discovery import build
from oauth2client.client import SignedJwtAssertionCredentials
from apiclient.http import MediaFileUpload
def main(argv):
# Load the key in PKCS 12 format that you downloaded from the Google API
# Console when you created your Service account.
f = open('key.p12', 'rb')
key = f.read()
f.close()
# Check https://developers.google.com/drive/scopes for all available scopes
OAUTH_SCOPE = 'https://www.googleapis.com/auth/drive'
# Path to the file to upload
FILENAME = 'testfile.txt'
# Create an httplib2.Http object to handle our HTTP requests and authorize it
# with the Credentials. Note that the first parameter, service_account_name,
# is the Email address created for the Service account. It must be the email
# address associated with the key that was created.
credentials = SignedJwtAssertionCredentials(
'xxxxx-xxxxxxx@developer.gserviceaccount.com',
key,
OAUTH_SCOPE)
http = httplib2.Http()
http = credentials.authorize(http)
drive_service = build('drive', 'v2', http=http)
# Insert a file
media_body = MediaFileUpload(FILENAME, mimetype='text/plain', resumable=True)
body = {
'title': 'My document',
'description': 'A test document',
'mimeType': 'text/plain'
}
fil = drive_service.files().insert(body=body, media_body=media_body).execute()
pprint.pprint(fil)
if __name__ == '__main__':
main(sys.argv)
スクリプトは正常に実行されているようです (エラーはありません。pprint は問題ないように見える出力を示しています)。ただし、アカウントの Google ドライブ ページには、アップロードされたファイルが表示されません。pprint 出力からリンクの 1 つにアクセスしてファイルを表示しようとすると、サービス アカウントを作成したアカウントにログインしているため、Google ドライブから「許可が必要です」というメッセージが表示されます。