Google App Engine上的Google云端硬盘服务帐户访问权限,可模拟用户

时间:2013-08-12 16:55:39

标签: python google-app-engine google-drive-api google-api-python-client

我正在尝试获取对Google Drive API的服务帐户访问权限。我在构建应用程序时遵循了Google Drive SDK example。我的代码几乎完全类似于示例:

class MainPage(webapp2.RequestHandler):
    def get(self):
      build = createDriveService(user)
      searchFile = build.files().get(fileId='FILEID').execute()
      self.response.write(searchFile)

def createDriveService(userEmail):
    API_KEY = 'APIKEY' 
    credentials = AppAssertionCredentials(
        scope='https://www.googleapis.com/auth/drive',
        sub=userEmail)
    http = httplib2.Http()
    http = credentials.authorize(http)

    return build('drive', 'v2', http=http, developerKey=API_KEY)

当我打电话访问我的GAE页面时,我得到的日志中的错误是:

<"File not found: FILEID">

我知道文件ID存在,因为我从UI复制了它。我使用简单的Key访问变量API_KEY。我应该以不同的方式验证我的申请吗?

EDIT1

我尝试过关注各种其他StackOverflow。其中一个涉及使用SignedJwtAssertionCredentials并将.p12键转换为.pem键。在这个改变之后我得到了一个

 cannot import SignedJwtAsserionCredentials 

错误。从那里我确保在我的app.yaml中包含pycrypto库。有什么想法吗?

EDIT2

我已成功模仿app引擎上的用户。我按照this之前回答的问题进行了操作。

1 个答案:

答案 0 :(得分:0)

我不理解您的代码的用户部分,因为您使用的是Google App Engine项目用户帐户。 有关如何使用和查找此帐户,请参阅this doc。您也可以使用以下方式结帐:

from google.appengine.api import app_identity
logging.info('service account : ' + app_identity.get_service_account_name())

确保您已授予此项目用户帐户访问驱动器文件或文件夹的权限!

我的代码如下所示:

def createDriveService():

    SCOPE = 'https://www.googleapis.com/auth/drive'
    API_KEY = 'AIzaSyB9UkK4OH5Z_E4v3Qp6bay6QEgGpzou3bc'     # GAE
    credentials = AppAssertionCredentials(scope=SCOPE)
    logging.info('using service account : ' + app_identity.get_service_account_name())
    http = credentials.authorize(httplib2.Http())
    return build('drive', 'v2', http=http, developerKey=API_KEY)