Google DataLab oauth2.0链接&重定向不认证笔记本

时间:2017-06-02 02:18:12

标签: google-analytics-api google-authentication google-cloud-datalab

我正在尝试将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()

1 个答案:

答案 0 :(得分:-1)

Here就是答案!

  

craigcitro于2017年6月10日发表评论

     

这里的问题正是@ncouture所猜测的 - 你没有将任何args传递给parse_args,所以它试图解析sys.argv。

     

尝试调用argparser.parse_args([]),或者根据需要添加其他参数。

所以你只需用flags = parser.parse_args([' - noauth_local_webserver'])执行“创建服务”