我正在尝试将Google Analytics数据导入Google Cloud DataLab,并且无法使用oauth2部分。
我基本上跟随this quick start并且我在我的终端中工作但后来我将其移动到Cloud Datalab我运行代码并收到此消息:
Your browser has been opened to visit:
https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fanalytics.readonly&redirect_uri=http%3A%2F%2Flocalhost%3A8090%2F&response_type=code&client_id=xxxxxxxxxxxx.apps.googleusercontent.com&access_type=offline
If your browser is on a different machine then exit and re-run this
application with the command-line parameter
--noauth_local_webserver
我单击该链接并完成身份验证过程并允许访问,但它会将我踢回到404s的localhost网址: http://localhost:8090/?code=4/xxxxxxxxxxxxxxx2C-WoxViSyyyyyyyyyxMsvGgs#
永远不会访问datalab笔记本。
如何让它重定向回到正确的位置或验证该笔记本?或者我应该使用另一种oauth方法吗?
以下是我正在运行的所有代码:
import argparse
from apiclient.discovery import build
import httplib2
from oauth2client import client
from oauth2client import file
from oauth2client import tools
def get_service(api_name, api_version, scope, client_secrets_path):
"""Get a service that communicates to a Google API.
Args:
api_name: string The name of the api to connect to.
api_version: string The api version to connect to.
scope: A list of strings representing the auth scopes to authorize for the
connection.
client_secrets_path: string A path to a valid client secrets file.
Returns:
A service that is connected to the specified API.
"""
# Parse command-line arguments.
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
parents=[tools.argparser])
flags = parser.parse_args([])
# Set up a Flow object to be used if we need to authenticate.
flow = client.flow_from_clientsecrets(
client_secrets_path, scope=scope,
message=tools.message_if_missing(client_secrets_path))
# Prepare credentials, and authorize HTTP object with them.
# If the credentials don't exist or are invalid run through the native client
# flow. The Storage object will ensure that if successful the good
# credentials will get written back to a file.
storage = file.Storage(api_name + '.dat')
credentials = storage.get()
if credentials is None or credentials.invalid:
credentials = tools.run_flow(flow, storage, flags)
http = credentials.authorize(http=httplib2.Http())
# Build the service object.
service = build(api_name, api_version, http=http)
return service
def get_results(service, profile_id):
# Use the Analytics Service Object to query the Core Reporting API
# for the number of sessions in the past seven days.
return service.data().ga().get(
ids='ga:' + profile_id,
start_date='7daysAgo',
end_date='today',
metrics='ga:sessions').execute()
def print_results(results):
# Print data nicely for the user.
if results:
print ('View (Profile): %s' % results.get('profileInfo').get('profileName'))
print ('Total Sessions: %s' % results.get('rows')[0][0])
else:
print ('No results found')
def get_data():
# Define the auth scopes to request.
scope = ['https://www.googleapis.com/auth/analytics.readonly']
# Authenticate and construct service.
service = get_service('analytics', 'v3', scope, 'client_secrets.json')
profile = '75633300' #get_first_profile_id(service)
print_results(get_results(service, profile))
get_data()
答案 0 :(得分:-1)
Here就是答案!
craigcitro于2017年6月10日发表评论
这里的问题正是@ncouture所猜测的 - 你没有将任何args传递给parse_args,所以它试图解析sys.argv。
尝试调用argparser.parse_args([]),或者根据需要添加其他参数。
所以你只需用flags = parser.parse_args([' - noauth_local_webserver'])执行“创建服务”