请求库googleapiclient

问题描述 投票:1回答:1

以下是代码使用httplib2的库来访问谷歌的存储桶

import json
from httplib2 import Http
from oauth2client.client import SignedJwtAssertionCredentials
from googleapiclient.discovery import build
from pprint import pprint
client_email = 'my.iam.gserviceaccount.com'

json_file = 'services.json'


cloud_storage_bucket = 'my_bucket'

files = 'reviews/reviews_myapp_201603.csv'
private_key = json.loads(open(json_file).read())['private_key']

credentials = SignedJwtAssertionCredentials(client_email, 
private_key,'https://www.googleapis.com/auth/devstorage.read_only')
storage = build('storage', 'v1', http=credentials.authorize(Http()))
pprint(storage.objects().get(bucket=cloud_storage_bucket, object=files).execute())

谁能告诉我,如果我可以在这里使用Python要求库中的http请求?如果是的话,怎么样?

python oauth-2.0 google-api python-requests google-api-python-client
1个回答
2
投票

是的,你可以使用带有请求或任何你想要的库中的HTTP标头Authorization: Bearer <access_token>

Service account

from google.oauth2 import service_account

credentials = service_account.Credentials.from_service_account_file(
    'services.json',
    scopes=['https://www.googleapis.com/auth/devstorage.read_only'],
)

# Copy access token
bearer_token = credentials.token

User account credentials

import json

from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow

flow = InstalledAppFlow.from_client_secrets_file(
    'test.json',
    'https://www.googleapis.com/auth/devstorage.read_only'
)

# Construct cache path for oauth2 token
oauth2_cache_path = 'test-oauth2.json'

credentials = None

try:
    # Try to load existing oauth2 token
    with open(oauth2_cache_path, 'r') as f:
        credentials = Credentials(**json.load(f))
except (OSError, IOError) as e:
    pass

if not credentials or not credentials.valid:
    credentials = flow.run_console()

    with open(oauth2_cache_path, 'w+') as f:
        f.write(json.dumps({
            'token': credentials.token,
            'refresh_token': credentials.refresh_token,
            'token_uri': credentials.token_uri,
            'client_id': credentials.client_id,
            'client_secret': credentials.client_secret,
            'scopes': credentials.scopes,
        }))

# Copy access token
bearer_token = credentials.token

Use requests lib

import requests

# Send request
response = requests.get(
    'https://www.googleapis.com/storage/v1/<endpoint>?access_token=%s'
    % bearer_token)
# OR
response = requests.get(
    'https://www.googleapis.com/storage/v1/<endpoint>',
    headers={'Authorization': 'Bearer %s' % bearer_token})

Use googleapiclient lib

我建议,因为谷歌图书馆发送您的API调用(如检查参数,可以端点,权威性和使用方法)之前,做一些检查,你直接使用build()方法,而不是请求。发现错误时,该库还引发异常。

from googleapiclient.discovery import build

storage = build('storage', 'v1', credentials=credentials)
print(storage.objects().get(bucket='bucket', object='file_path').execute())

更多信息在这里:https://developers.google.com/identity/protocols/OAuth2WebServer#callinganapi(点击 “HTTP / REST” 选项卡上)

© www.soinside.com 2019 - 2024. All rights reserved.