2014-10-09 132 views
0

我试图按照here给出的Google Analytics API教程。我一直在跟着它。下面是我的文件谷歌分析API - 错误:redirect_uri_mismatch

的client_secrets.json

{ 
    "installed": { 
    "client_id": "xxxxxxxxxxxxxxx.apps.googleusercontent.com", 
    "client_secret": "xxxxxxxxxxxxxxxxx", 
    "redirect_uris": ["http://127.0.0.1:8000/oauth2callback/"], 
    "auth_uri": "https://accounts.google.com/o/oauth2/auth", 
    "token_uri": "https://accounts.google.com/o/oauth2/token" 
    } 
} 

hello_analytics_api_v3_auth.py

#!/usr/bin/python 

import httplib2 

from apiclient.discovery import build 

from oauth2client.client import flow_from_clientsecrets 
from oauth2client.file import Storage 
from oauth2client.tools import run 

CLIENT_SECRETS = 'client_secrets.json' 
MISSING_CLIENT_SECRETS_MESSAGE = '%s is missing' % CLIENT_SECRETS 

FLOW = flow_from_clientsecrets(CLIENT_SECRETS, 
    scope='https://www.googleapis.com/auth/analytics.readonly', 
    message=MISSING_CLIENT_SECRETS_MESSAGE) 

TOKEN_FILE_NAME = 'analytics.dat' 

def prepare_credentials(): 
    storage = Storage(TOKEN_FILE_NAME) 
    credentials = storage.get() 
    if credentials is None or credentials.invalid: 
    credentials = run(FLOW, storage) 
    return credentials 

def initialize_service(): 
    http = httplib2.Http() 

    #Get stored credentials or run the Auth Flow if none are found 
    credentials = prepare_credentials() 
    http = credentials.authorize(http) 

    #Construct and return the authorized Analytics Service Object 
    return build('analytics', 'v3', http=http) 

hello_analytics_api_v3.py

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import sys 

# import the Auth Helper class 
import hello_analytics_api_v3_auth 

from apiclient.errors import HttpError 
from oauth2client.client import AccessTokenRefreshError 


def main(argv): 
    # Initialize the Analytics Service Object 
    service = hello_analytics_api_v3_auth.initialize_service() 

    try: 
    # Query APIs, print results 
    profile_id = get_first_profile_id(service) 

    if profile_id: 
     results = get_results(service, profile_id) 
     print_results(results) 

    except TypeError, error: 
    # Handle errors in constructing a query. 
    print ('There was an error in constructing your query : %s' % error) 

    except HttpError, error: 
    # Handle API errors. 
    print ('Arg, there was an API error : %s : %s' % 
      (error.resp.status, error._get_reason())) 

    except AccessTokenRefreshError: 
    # Handle Auth errors. 
    print ('The credentials have been revoked or expired, please re-run ' 
      'the application to re-authorize') 


def get_first_profile_id(service): 
    # Get a list of all Google Analytics accounts for this user 
    accounts = service.management().accounts().list().execute() 

    if accounts.get('items'): 
    # Get the first Google Analytics account 
    firstAccountId = accounts.get('items')[0].get('id') 

    # Get a list of all the Web Properties for the first account 
    webproperties = service.management().webproperties().list(accountId=firstAccountId).execute() 

    if webproperties.get('items'): 
     # Get the first Web Property ID 
     firstWebpropertyId = webproperties.get('items')[0].get('id') 

     # Get a list of all Views (Profiles) for the first Web Property of the first Account 
     profiles = service.management().profiles().list(
      accountId=firstAccountId, 
      webPropertyId=firstWebpropertyId).execute() 

     if profiles.get('items'): 
     # return the first View (Profile) ID 
     return profiles.get('items')[0].get('id') 

    return None 


def get_results(service, profile_id): 
    # Use the Analytics Service Object to query the Core Reporting API 
    return service.data().ga().get(
     ids='ga:' + profile_id, 
     start_date='2014-01-10', 
     end_date='2014-09-08', 
     metrics='ga:sessions').execute() 


def print_results(results): 
    # Print data nicely for the user. 
    if results: 
    print 'First View (Profile): %s' % results.get('profileInfo').get('profileName') 
    print 'Total Sessions: %s' % results.get('rows')[0][0] 

    else: 
    print 'No results found' 


if __name__ == '__main__': 
    main(sys.argv) 

要测试输出,我正在用我的终端命令

python hello_analytics_api_v3.py 

运行此打开它要求我来验证我的谷歌帐户的浏览器之后,我得到一个400错误

Error: redirect_uri_mismatch

The redirect URI in the request: http://localhost:8080/ did not match a registered redirect URI.

Google是如何获得http://localhost:8000/作为重定向URI的?这是我在谷歌开发者控制台应用程序

REDIRECT URIS http://127.0.0.1:8000/oauth2callback/

JAVASCRIPT ORIGINS http://127.0.0.1:8000/

+0

你输入8000,你确定你不是说8080? – DaImTo 2014-10-09 11:15:49

+0

@DaImTo不,我在端口8000上运行我的本地服务器。 – 2014-10-09 11:17:09

+0

尝试本教程可能更适合您。 http://www.marinamele.com/use-google-analytics-api-with-python同时我认为你应该仔细检查你的client_secret.json是否想知道它是从教程中读取的,而不是你创建的那个。 – DaImTo 2014-10-09 11:18:49

回答