복붙노트

[PYTHON] gflags없이 Google 애널리틱스 자격증 명을 얻는 방법 - run_flow ()를 대신 사용 하시겠습니까?

PYTHON

gflags없이 Google 애널리틱스 자격증 명을 얻는 방법 - run_flow ()를 대신 사용 하시겠습니까?

설명하는 데는 몇 초가 걸릴 수 있으므로 나와 함께 참아주십시오.

Google Analytics 데이터를 가져와야하는 작업을위한 프로젝트를 진행하고 있습니다. 원래이 링크를 따라했기 때문에 API 클라이언트 pip install -upgrade google-api-python-client를 설치하고 client_secrets.json과 같은 설정을 한 후 run ()을 실행하기 위해 gflags를 설치해야했습니다. 성명서. (즉, 자격증 명 = 실행 (FLOW, 저장))

이제 gflags를 설치하기 위해 오류 메시지가 표시되거나 run_flow ()를 사용하는 것이 좋습니다 (정확한 오류 메시지는 this).

원래 gflags (몇 달 전)를 사용했지만 프레임 워크 (피라미드)와 호환되지 않았으므로 문제가 무엇인지 파악할 때까지 제거했습니다. 그리고 gflags에서 run_flow ()로 전환하는 것이 바람직한 이유는 gflags가 더 이상 사용되지 않으므로 사용하지 않으려 고합니다. 내가 지금하고있는 일은 run_flow ()를 사용하는 것으로 전환하는 것이다.

이 문제는 run_flow ()가 명령 줄 인수를 보내고 명령 줄 응용 프로그램이 아니라는 것을 예상합니다. 도움이되었지만 run_flow () 함수에 대한 플래그를 작성해야하는 설명서가 있습니다.

설명하기 전에 코드 하나를 보여주기 전에.

run_flow ()는 세 개의 인수를 취합니다 (여기의 문서). run ()과 마찬가지로 플로우와 저장 공간을 필요로하지만 flags 객체도 필요합니다. gflags 라이브러리는 oauth2client 실행 메소드에서 사용 된 플래그 ArgumentParser 객체를 만들었습니다.

argumentParser 객체를 만드는 데 도움이되는 몇 가지 다른 링크 :

두 번째 링크는 실행 방법을 이해하는 데 매우 도움이되므로 유사한 작업을 수행하려고 할 때 sys.argv는 pserve를 실행중인 내 가상 환경의 위치를 ​​가져오고 .ini 파일도 가져옵니다. 내 컴퓨터에 대한 자격 증명을 저장하여 가상 환경을 실행합니다.) 하지만 그게 뭔가 다른 것을 기대하기 때문에 오류가 발생합니다. 그리고 이것이 내가 붙어있는 곳입니다.

암호:

CLIENT_SECRETS = client_file.uri
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(self, argv):
    storage = Storage(self.TOKEN_FILE_NAME)
    credentials = storage.get()

    if credentials is None or credentials.invalid:
        parser = argparse.ArgumentParser(description=__doc__,
            formatter_class=argparse.RawDescriptionHelpFormatter,
            parents=[tools.argparser])
        flags = parser.parse_args(argv[1:]) # i could also do just argv, both error
        credentials = run_flow(self.FLOW, storage, flags) 
    return credentials

def initialize_service(self, argv):
    http = httplib2.Http()
    credentials = self.prepare_credentials(self, argv)
    http = credentials.authorize(http)
    return build('analytics', 'v3', http=http)

initialize_service를 호출하는 sys.argv를 전달하는 주 함수를 호출합니다.

def main(self, argv):
    service = self.initialize_service(self, argv)

    try:
        #do a query and stuff here

내 응용 프로그램이 명령 줄 응용 프로그램이 아니라 오히려 완전한 통합 서비스이기 때문에 이것이 효과가 없을 것이라는 것을 알았지 만 나는 가치가 있다고 생각했습니다. flags 객체를 올바르게 작성하는 방법에 대한 생각은?

해결법

  1. ==============================

    1.

    from oauth2client import tools
    
    flags = tools.argparser.parse_args(args=[])
    credentials = tools.run_flow(flow, storage, flags)
    

    조금 비틀 거 렸지만 두 개의 함정을 빠져 나갔다.

  2. ==============================

    2.이 코드 조각은 나를 위해 Gmail API를 위해 작동합니다.

    이 코드 조각은 나를 위해 Gmail API를 위해 작동합니다.

    (이 링크도 도움이되었습니다.) 명령 줄 도구

    import argparse
    import httplib2
    from oauth2client.tools import run_flow
    from oauth2client.tools import argparser
    from oauth2client.file import Storage
    
    CLIENT_SECRETS_FILE = "your_file.json"
    OAUTH_SCOPE = 'https://www.googleapis.com/auth/gmail.readonly'
    
    STORAGE = Storage("storage")
    
    flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE, scope=OAUTH_SCOPE)
    http = httplib2.Http()
    
    credentials = STORAGE.get()
    
    if credentials is None or credentials.invalid:
        #magic 
        parser = argparse.ArgumentParser(parents=[argparser])
        flags = parser.parse_args()
        credentials = run_flow(flow, STORAGE, flags, http=http)
    
    
    http = credentials.authorize(http)
    gmApi = build('gmail', 'v1', http=http)
    # ...
    
  3. ==============================

    3.전달할 수있는 플래그는 다음에서 찾을 수 있습니다.

    전달할 수있는 플래그는 다음에서 찾을 수 있습니다.

      --auth_host_name: Host name to use when running a local web server
        to handle redirects during OAuth authorization.
        (default: 'localhost')
    
      --auth_host_port: Port to use when running a local web server to handle
        redirects during OAuth authorization.;
        repeat this option to specify a list of values
        (default: '[8080, 8090]')
        (an integer)
    
      --[no]auth_local_webserver: Run a local web server to handle redirects
        during OAuth authorization.
        (default: 'true')
    

    나는 정확히 이들을 파싱하는 방법을 알아 내려고 노력했지만,이 3 가지 플래그 각각에 대해 다양한 값을 전달하려고 시도했지만 아무 것도 작동하지 않습니다. 대답 할 때 너에게 쓸모있는 질문이 여기에있다.

  4. from https://stackoverflow.com/questions/24890146/how-to-get-google-analytics-credentials-without-gflags-using-run-flow-instea by cc-by-sa and MIT license