当前位置:Gxlcms > mysql > 一大坨GoogleAPI的学习笔记之三(基于oAuth2.0的domain

一大坨GoogleAPI的学习笔记之三(基于oAuth2.0的domain

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

人气教程排行