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

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
一大坨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
        

#-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'])



Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
MySQL String Types: Storage, Performance, and Best PracticesMySQL String Types: Storage, Performance, and Best PracticesMay 10, 2025 am 12:02 AM

MySQLstringtypesimpactstorageandperformanceasfollows:1)CHARisfixed-length,alwaysusingthesamestoragespace,whichcanbefasterbutlessspace-efficient.2)VARCHARisvariable-length,morespace-efficientbutpotentiallyslower.3)TEXTisforlargetext,storedoutsiderows,

Understanding MySQL String Types: VARCHAR, TEXT, CHAR, and MoreUnderstanding MySQL String Types: VARCHAR, TEXT, CHAR, and MoreMay 10, 2025 am 12:02 AM

MySQLstringtypesincludeVARCHAR,TEXT,CHAR,ENUM,andSET.1)VARCHARisversatileforvariable-lengthstringsuptoaspecifiedlimit.2)TEXTisidealforlargetextstoragewithoutadefinedlength.3)CHARisfixed-length,suitableforconsistentdatalikecodes.4)ENUMenforcesdatainte

What are the String Data Types in MySQL?What are the String Data Types in MySQL?May 10, 2025 am 12:01 AM

MySQLoffersvariousstringdatatypes:1)CHARforfixed-lengthstrings,2)VARCHARforvariable-lengthtext,3)BINARYandVARBINARYforbinarydata,4)BLOBandTEXTforlargedata,and5)ENUMandSETforcontrolledinput.Eachtypehasspecificusesandperformancecharacteristics,sochoose

How to Grant Permissions to New MySQL UsersHow to Grant Permissions to New MySQL UsersMay 09, 2025 am 12:16 AM

TograntpermissionstonewMySQLusers,followthesesteps:1)AccessMySQLasauserwithsufficientprivileges,2)CreateanewuserwiththeCREATEUSERcommand,3)UsetheGRANTcommandtospecifypermissionslikeSELECT,INSERT,UPDATE,orALLPRIVILEGESonspecificdatabasesortables,and4)

How to Add Users in MySQL: A Step-by-Step GuideHow to Add Users in MySQL: A Step-by-Step GuideMay 09, 2025 am 12:14 AM

ToaddusersinMySQLeffectivelyandsecurely,followthesesteps:1)UsetheCREATEUSERstatementtoaddanewuser,specifyingthehostandastrongpassword.2)GrantnecessaryprivilegesusingtheGRANTstatement,adheringtotheprincipleofleastprivilege.3)Implementsecuritymeasuresl

MySQL: Adding a new user with complex permissionsMySQL: Adding a new user with complex permissionsMay 09, 2025 am 12:09 AM

ToaddanewuserwithcomplexpermissionsinMySQL,followthesesteps:1)CreatetheuserwithCREATEUSER'newuser'@'localhost'IDENTIFIEDBY'password';.2)Grantreadaccesstoalltablesin'mydatabase'withGRANTSELECTONmydatabase.TO'newuser'@'localhost';.3)Grantwriteaccessto'

MySQL: String Data Types and CollationsMySQL: String Data Types and CollationsMay 09, 2025 am 12:08 AM

The string data types in MySQL include CHAR, VARCHAR, BINARY, VARBINARY, BLOB, and TEXT. The collations determine the comparison and sorting of strings. 1.CHAR is suitable for fixed-length strings, VARCHAR is suitable for variable-length strings. 2.BINARY and VARBINARY are used for binary data, and BLOB and TEXT are used for large object data. 3. Sorting rules such as utf8mb4_unicode_ci ignores upper and lower case and is suitable for user names; utf8mb4_bin is case sensitive and is suitable for fields that require precise comparison.

MySQL: What length should I use for VARCHARs?MySQL: What length should I use for VARCHARs?May 09, 2025 am 12:06 AM

The best MySQLVARCHAR column length selection should be based on data analysis, consider future growth, evaluate performance impacts, and character set requirements. 1) Analyze the data to determine typical lengths; 2) Reserve future expansion space; 3) Pay attention to the impact of large lengths on performance; 4) Consider the impact of character sets on storage. Through these steps, the efficiency and scalability of the database can be optimized.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools