Heim > Datenbank > MySQL-Tutorial > 一大坨GoogleAPI的学习笔记之三(基于oAuth2.0的domain

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-06-07 15:08:07
Original
1066 Leute haben es durchsucht

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
Nach dem Login kopieren
一大坨GoogleAPI的学习笔记之三(基于oAuth2.0的domain

这样就获取到了域下指定用户的证书,可以使用该证书构建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
        
Nach dem Login kopieren

#-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'])
Nach dem Login kopieren



Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage