24

これを説明するには少し時間がかかるかもしれませんが、ご容赦ください。

私は、Google アナリティクス データを取り込む必要がある仕事のプロジェクトに取り組んでいます。私はもともとこのリンクに従ってこれを行ったので、API クライアントpip install --upgrade google-api-python-clientをインストールして のように設定した後、ステートメントclient_secrets.jsonを実行するために gflags をインストールする必要がありましたrun()。(つまりcredentials = run(FLOW, storage))

今、gflagsをインストールするか、より適切に使用するためのエラーメッセージが表示されましたrun_flow()(正確なエラーメッセージはこれでした):

NotImplementedError: tools.run() を使用するには、gflags ライブラリをインストールする必要があります。gflags をインストールするか、できれば tools.run_flow() を使用するように切り替えてください。

私はもともと gflags を使用していました (数か月前) が、フレームワーク (ピラミッド) と互換性がなかったため、問題が何であるかがわかるまで削除しました。また、gflags から gflags に切り替えることが望ましい理由run_flow()は、gflags が非推奨になったため、以前のように使用したくないためです。私が今やろうとしているのは、使用に切り替えることですrun_flow()

これに関する問題run_flow()は、コマンド ライン引数が送信されることを想定しており、これはコマンド ライン アプリケーションではありません。役立つドキュメントをいくつか見つけましたが、関数のフラグの作成に行き詰まっていrun_flow()ます。

コードを表示する前に、もう 1 つ説明します。

run_flow()3 つの引数を取ります(ドキュメントはこちら)。これはフローとストレージを使用するのと同じように使用run()しますが、フラグ オブジェクトも使用します。gflags ライブラリは、実行メソッドArgumentParserで使用される flags オブジェクトを構築しました。oauth2client

argumentParserオブジェクトの構築に役立つ他のいくつかのリンク:

2番目のリンクは、それがどのように実行されるかを確認するのに非常に役立ちsys.argvます.仮想環境を実行します)。しかし、それは何か他のものを期待しているため、エラーがスローされます。これが私が立ち往生している場所です。pserve.ini

  • 送信するために構築する必要があるフラグ オブジェクトがわかりませんrun_flow()
  • ステートメントが正しい情報を取得するために渡す必要がある argv 引数がわかりflags = parser.parse_args(argv[1:])ません (正しい情報がどうあるべきかわかりません)

コード:

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)

を呼び出すメイン関数をsys.argv呼び出します。initialize_service

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

    try:
        #do a query and stuff here

私のアプリケーションはコマンド ライン アプリケーションではなく、完全に統合されたサービスであるため、これが機能しないことはわかっていましたが、試してみる価値があると考えました。flags オブジェクトを正しく構築する方法について何か考えはありますか?

4

3 に答える 3

-2

渡すことができるフラグはここにあり、次のとおりです。

  --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 つのフラグのそれぞれにさまざまな値を渡そうとしましたが、何もうまくいきません。私はここに報奨金の質問があります。答えたときに役立つかもしれません。

于 2014-08-27T14:28:59.800 に答える