Этот вопрос старый, но он все еще актуален, поэтому я попытаюсь дать лучший ответ, основываясь на своем недавнем опыте.
Можно получить доступ к очередям задач извлечения за пределами appengine, но, как сказал спрашивающий, хороших примеров нет, поэтому вот более подробное руководство. В моем случае у меня был собственный скрипт Python, который должен был опросить очередь для запуска новых заданий.
Прежде чем пойти по этому пути, у вас также есть возможность развернуть собственную систему безопасности и создать простую веб-оболочку для вызовов очереди задач appengine. У меня возник соблазн пойти по этому пути после того, как я разобрался с этим, но, поскольку это работает, я пока использую его.
Настройте свою машину
Настройте свой аккаунт
Используя Google Cloud Console, создайте зарегистрированное приложение (если у вас его еще нет. Нажмите на AppEngine проект -> API и аутентификация -> Зарегистрированные приложения. Вы можете ввести имя и тип приложения, а затем принять значения по умолчанию. После его создания запишите идентификатор клиента и секрет клиента на будущее.
Также обновите экран согласия (API и авторизация -> Экран согласия). Обратите внимание, что этот экран согласия вам понадобится только для первой настройки учетных данных oauth. Вам нужно будет ввести адрес электронной почты и название продукта (я также ввел URL-адрес домашней страницы).
Создать учетные данные OAuth
Вам нужно создать файл учетных данных только один раз, затем он будет использоваться для будущих вызовов в вашем скрипте 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 )
Вызовы из очереди задач
Убедитесь, что вы добавили очередь извлечения в свой AppEngine queue.yaml с адресом электронной почты, который вы использовали на шаге oauth выше.
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
- Обратите внимание на префикс 's~' перед именем проекта в вызове удаления. Это сработает, только если я добавлю это и считаю, что это ошибка.
Обновление от 01.07.2014
Таким образом, на самом деле есть более простой способ совершать вызовы между серверами. Этот способ не требует использования «потока» (входа в Google) для получения ключа доступа.
Настройте свою машину
Настройте свой аккаунт
- Используя Google Cloud Console, создайте зарегистрированное приложение (если у вас его еще нет. Нажмите на AppEngine проект -> API и аутентификация -> Учетные данные. Нажмите «Создать новый идентификатор клиента», укажите учетную запись службы, затем нажмите «Создать идентификатор клиента». Появится окно загрузки, чтобы загрузить ваш закрытый ключ, сохраните его в каталоге кода (или где-либо еще, я сохранил как client_key.p12).В веб-интерфейсе запишите идентификатор клиента и адрес электронной почты.
Замените учетный код сверху
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')
person
JimJty
schedule
22.10.2013