0

Google 애널리틱스에서 어제의 데이터를 가져 오기 위해 python 스크립트를 작성했습니다. Google보고 API v4에서 OAuth v2를 사용하고 있습니다. 스크립트의 백본은 본질적으로 Google의 샘플 버전과 동일합니다. 단, 페이지 매김 제한을 극복하기위한 재귀를 포함하고 결과를 CSV 파일로 출력하는 경우는 제외됩니다. 오늘은 403 오류 반환하기 시작 :이전에 Google보고 API v4를 사용하여 Python 스크립트를 실행 중입니다. 403

HttpError 403 when requesting https://analyticsreporting.googleapis.com/v4/reports:batchGet?alt=json returned "The caller does not have permission" 

나는 해결책을 검색하여 내 실사를했다,하지만 난 이미 다른 계정에 로그인하지 않은 ViewID과가 실행중인 컴퓨터를 사용하고 있습니다 (보고서를 실행하는 것만 존재). 나는 또한 새로운 client_secrets.json 파일을 만들고 할당량 내에 있는지 확인하려고했지만 문제는 여전히 지속됩니다. 어제와 오늘 사이에는 아무 것도 변하지 않았지만, 오늘은 달릴 수 없습니다.

편집 나도 같은 연결 개체를 사용하고 , 코드 만 여기에 구글의 웹 사이트과 완전히 동일하며, 한 번 인스턴스화 된 ->이 Hello Analytics Reporting API v4 - Python

def initialize_analyticsreporting(): 
    parser = argparse.ArgumentParser(
     formatter_class=argparse.RawDescriptionHelpFormatter, 
     parents=[tools.argparser]) 
    flags = parser.parse_args([]) 

    flow = client.flow_from_clientsecrets(
     CLIENT_SECRETS_PATH, scope=SCOPES, 
     message=tools.message_if_missing(CLIENT_SECRETS_PATH)) 

    storage = file.Storage('analyticsreporting.dat') 
    credentials = storage.get() 
    if credentials is None or credentials.invalid: 
    credentials = tools.run_flow(flow, storage, flags) 
    http = credentials.authorize(http=httplib2.Http()) 

    analytics = build('analytics', 'v4', http=http, discoveryServiceUrl=DISCOVERY_URI) 
    return analytics 

나는 batchGet를 호출하고있어 그래서 같은 각 요청에 대한 방법 ...

response = analytics.reports().batchGet(body=loaded_request.get("request", {})).execute() 
+0

로그인 한 사용자가 데이터를 추출 할보기에 대해 '읽기 및 분석'권한을 가지고 있습니까? – vinoaj

+0

예, 계정은 않습니다. 그것은 좋은 일을하기 전 일했고, 첫 번째 요청에서 결코 발생하지 않았습니다. 심지어 후속 요청에서도 동일한 ID가 발생했습니다. – MosaicOrange

+0

첫 번째 요청에서 작동하고 후속 요청에서 작동하지 않는 경우, 후속 통화에서 올바른 자격 증명을 전달하지 않습니다. 코드를 보는 데 도움이 될 것입니다. – vinoaj

답변

1

나는 방법과 유사 블록을 제외/재귀와 함께 지수 백 오프를 사용하여이 문제를 해결 시도 관리했습니다 여기에 구글에 의해 추천 - 그래서처럼>Error Responses

: 오류가 N> 1 다음 경우 명중 그것은 일반적으로 잘 작동

try: 
    response = analytics.reports().batchGet(body=loaded_request.get("request", {})).execute() 
except HttpError as err: 
    print(err) 
    time.sleep(2**expontential_backoff) 
    expontential_backoff += 1 
    if expontential_backoff < 5: 
     get_response(analytics, request, page_token, file_name, expontential_backoff) 
    else: 
     print("expontential_backoff:", expontential_backoff, "Exceeded") 
    return 

합니다. 나는이 방법을별로 좋아하지 않는다. 이상적으로 나는 그것이 올바르게 작동하기를 바란다.

다른 해결 방법이 없다면 앞으로 도움이 될 것입니다.