2

GAE TaskQueue の REST API を使用して、タスクをキューから外部サーバー (GAE にないサーバー) にプルしようとしています。

  • 私のためにこれを行うライブラリはありますか?

  • API は非常にシンプルなので、認証を理解するだけで済みます。usinggtaskqueue_sampleから送信されたリクエストを調べたところ、ヘッダーが見つかりました。そのトークンを自分の要求に追加することはできましたが、トークンは定期的に (おそらく毎日) 期限切れになるようで、再生成する方法がわかりません。さらに言えば、gtaskqueue_sample 自体が機能しなくなりました ( への呼び出しは で失敗します)。google-api-python-client--dump_requestauthorization: OAuth XXXhttps://accounts.google.com/o/oauth2/tokenNo JSON object could be decoded

認証はどのように処理しますか? これはサーバー アプリなので、理想的には、それ以降使用できるトークンを生成できます。

4

3 に答える 3

4

この質問は古いですが、今でも当てはまるので、最近の経験に基づいてより良い回答を試みます。

appengine の外部のプル タスク キューにアクセスすることは可能ですが、質問者が述べたように、良い例がないため、ここに詳細なガイドがあります。私の場合、新しいジョブを実行するためにキューをポーリングする必要があるカスタム python スクリプトがありました。

この方法を取る前に、独自のセキュリティを展開し、appengine タスクキュー呼び出しに対する単純な Web ラッパーを作成するオプションもあります。これに対処した後、そのルートに行きたくなりましたが、これが機能しているので、今のところ使用しています。

マシンのセットアップ

アカウントの設定

  • Google Cloud Consoleを使用して、登録済みアプリを作成します (まだ持っていない場合は、AppEngine プロジェクト -> API と認証 -> 登録済みアプリをクリックします。名前とアプリケーション タイプを入力し、デフォルトを受け入れます。が作成されたら、後で使用できるようにクライアント ID とクライアント シークレットをメモします。

  • また、同意画面を更新します (API と認証 -> 同意画面)。この同意画面は、初めて oauth 資格情報を設定する場合にのみ必要になることに注意してください。電子メール アドレスと製品名を入力する必要があります (ホームページの URL も入力しました)。

OAuth クレデンシャルの生成

  • 資格情報ファイルを 1 回生成するだけで、Python スクリプトでの今後の呼び出しに使用されます。ブラウザーを開いて資格情報ファイルを生成するこの python コードを実行します。このコードのリファレンスはこちらです。

    from oauth2client.tools import run
    from oauth2client.client import OAuth2WebServerFlow
    from oauth2client.file import Storage
    import gflags
    FLAGS = gflags.FLAGS
    
    storage = Storage('credentials.json')
    
    flow = OAuth2WebServerFlow(client_id='<your_client_id>',
                           client_secret='<your_client_secret>',
                           scope='https://www.googleapis.com/auth/taskqueue',
                           redirect_uri='urn:ietf:wg:oauth:2.0:oob')
    
    credentials = run(flow, storage )
    

Taskqueue 呼び出しを行う

  • 上記の oauth ステップで使用したメール アドレスを使用して、 AppEngine queue.yamlにプル キューを追加したことを確認してください。

    from oauth2client.tools import run
    from oauth2client.client import OAuth2WebServerFlow
    from oauth2client.file import Storage
    from apiclient.discovery import build
    import httplib2
    
    storage = Storage('credentials.json')
    credentials = storage.get()
    http = httplib2.Http()
    http = credentials.authorize(http)
    task_api = build('taskqueue', 'v1beta2')
    tasks = task_api.tasks().lease(project='<your appengine project>',taskqueue='<pull queue name>', numTasks=1, leaseSecs=600).execute(http=http)
    task = tasks['items'][0]
    payload = task['payloadBase64']
    payload = base64.b64decode(payload)
    
    #then do your work and delete the task when done
    
    task_api.tasks().delete(project='s~<your appengine project>',taskqueue='<pull queue name>', task=task['id']).execute(http=http)
    
  • タスク キューAPI リファレンス

  • delete 呼び出しのプロジェクト名の前にあるプレフィックス「s~」に注意してください。これを追加した場合にのみ機能し、バグだと思います。

2014 年 7 月 1 日更新

したがって、実際には、サーバー間呼び出しを行う簡単な方法があります。この方法では、「フロー」(Google へのログオン) を使用してアクセス キーを取得する必要はありません。

マシンのセットアップ

アカウントの設定

  • Google Cloud Consoleを使用して、登録済みアプリを作成します (まだ持っていない場合は、AppEngine プロジェクト -> API & Auth -> Credentials をクリックします。[新しいクライアント ID の作成] をクリックし、サービス アカウントを指定して、[クライアント ID の作成] をクリックします。ダウンロード ボックスがポップアップして秘密鍵をダウンロードし、これをコード ディレクトリ (または client_key.p12 として保存した場所) に保存します。Web インターフェイスで、クライアント ID と電子メールをメモします。

上記の資格情報コードを置き換えます

from oauth2client.client import SignedJwtAssertionCredentials

email = '<***>.gserviceaccount.com'
f = file('client_key.p12', 'rb')
key = f.read()
f.close()
credentials = SignedJwtAssertionCredentials(email,
                                            key,
                                            scope='https://www.googleapis.com/auth/taskqueue')
于 2013-10-22T19:46:23.787 に答える
1

キューは queue.yaml を介してのみ作成でき、事実上 API はキューとタスクまたはプロジェクトを挿入するための API を公開しないため、これらの API は GAE サーバーに対してのみ機能します。

于 2011-12-30T15:37:11.610 に答える
0

プル キュー ページには、クライアント ライブラリとサンプル コードに関するセクション全体があります。

于 2011-08-08T04:22:16.600 に答える