1

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 ドライブから「許可が必要です」というメッセージが表示されます。

4

1 に答える 1

1

ファイルは、Google アカウントではなく、サービス アカウントによって所有されます。サービス アカウントには、Google ドライブ用に独自の 5 GB のスペースがあります。

ユーザー アカウントでファイルを共有するか、サービス アカウントでユーザー アカウントを偽装して(Google Apps ドメインにいる場合)、ファイルがユーザー アカウントによって作成および所有されるようにする必要があります。

于 2013-09-24T23:33:51.050 に答える