时间: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'])