时间:2021-07-01 10:21:17 帮助过:31人阅读
http://blog.csdn.net/btyh17mxy/article/details/9939035 在Google Apps中域管理员可以访问域中其他用户的数据,包括Drive、Gmail什么的。当然要想访问就需要进行domain-wide(域)认证。 在Google的官方文档中只有https://developers.google.com/drive/del
http://blog.csdn.net/btyh17mxy/article/details/9939035
在Google Apps中域管理员可以访问域中其他用户的数据,包括Drive、Gmail什么的。当然要想访问就需要进行domain-wide(域)认证。
在Google的官方文档中只有https://developers.google.com/drive/delegation这么一篇,介绍的是Drive的domain-wide认证,我参考了这篇文档并做了些修改。
#-coding:utf-8 #!/usr/bin/python import httplib2 import pprint import sys from apiclient.discovery import build from oauth2client.client import SignedJwtAssertionCredentials """Email of the Service Account""" SERVICE_ACCOUNT_EMAIL = '下图中的email地址' """Path to the Service Account's Private Key file""" SERVICE_ACCOUNT_PKCS12_FILE_PATH = '密钥文件路径' def getCredentials(user_email): """Get cardentials for an Google Apps user Args: user_email: The email of the user Returns: The cardentials that you can use to get access to the user's data or something """ f = file(SERVICE_ACCOUNT_PKCS12_FILE_PATH, 'rb') key = f.read() f.close() credentials = SignedJwtAssertionCredentials(SERVICE_ACCOUNT_EMAIL, key, scope='https://www.googleapis.com/auth/drive', sub=user_email) return credentials
这样就获取到了域下指定用户的证书,可以使用该证书构建Drive服务,就像下面这样:
#-coding:utf-8 #!/usr/bin/python import httplib2 from apiclient.discovery import build from apiclient import errors class Drive: def __init__(self,credentials): self.credentials=credentials def getFileList(self,maxResults,pageToken,q,projection="FULL"): http = httplib2.Http() http = self.credentials.authorize(http) service = build('drive', 'v2', http=http) result = [] page_token = pageToken while True: try: #param = {'maxResults':500} param={'maxResults':maxResults,'pageToken':page_token,'projection':projection,'q':q} if page_token: param['pageToken'] = page_token files = service.files().list(**param).execute() #print files['items'] result.extend(files['items']) page_token = files.get('nextPageToken') if not page_token: break except errors.HttpError, error: print 'An error occurred: %s' % error break return result def getFileByID(fileID): """ Get a Drive File instance by it's id Args: fileID: id of this file item Rerurns: A Drive File instance if successful, None if otherwise """ try : file = self.service.files().get(fileID).execute() return file except errors.HttpError,e: print 'An error occurred: %s ' % e return None def print_file(file_id): """ Print a file's metadata. Args: service: Drive API service instance. file_id: ID of the file to print metadata for. """ try: file = self.service.files().get(fileId=file_id).execute() print 'Title: %s' % file['title'] print 'MIME type: %s' % file['mimeType'] except errors.HttpError, error: print 'An error occurred: %s' % error def download_file(drive_file): """ Download a file's content. Args: service: Drive API service instance. drive_file: Drive File instance. Returns: File's content if successful, None otherwise. """ download_url = drive_file.get('downloadUrl') if download_url: resp, content = self.service._http.request(download_url) if resp.status == 200: print 'Status: %s' % resp return content else: print 'An error occurred: %s' % resp return None else: # The file doesn't have any content stored on Drive. return None
#-coding:utf-8 #!/usr/bin/python import d_oauth from drive import Drive if __name__ == '__main__': c = d_oauth.getCredentials('btyh17mxy@gdocsapp.com') drive = Drive(c) files = drive.getFileList(1000,None,None) for f in files: print "FileName:%s\nFileType:%s\nFileID:%s\n" % (f['title'],f['mimeType'],f['id'])