Этот вопрос старый, но он все еще применяется, поэтому я попытаюсь найти лучший ответ, основываясь на моем недавнем опыте.
Возможно получить доступ к очередям задач извлечения вне appengine, но, как сказал автор запросаХороших примеров нет, так что это более подробное руководство.В моем случае у меня был собственный скрипт Python, который должен был опрашивать очередь для запуска новых заданий.
Перед тем как идти по этому маршруту, у вас также есть возможность развернуть собственную защиту и сделать простую веб-оболочку длявызовы appengine taskqueue.Я испытал желание пойти по этому пути после того, как столкнулся с этим, но так как это работает, я использую его сейчас.
Настройка вашей машины
Настройка учетной записи
Используя Google Cloud Console , создайте зарегистрированное приложение (если у вас его еще нет. Нажмите на свой проект AppEngine -> API и auth -> Зарегистрированные приложения. Вы можете ввестиимя и тип приложения, а затем примите значения по умолчанию. Как только оно будет создано, запишите Client Id и Client Secret для дальнейшего использования.
Также обновите свой экран согласия (API и auth -> Consent)Экран.) Обратите внимание, что этот экран согласия вам понадобится только для первоначальной настройки учетных данных oauth. Вам нужно будет ввести адрес электронной почты и название продукта (я также ввел URL-адрес HomePage).
Создание учетных данных 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
- Обратите внимание на префикс '~' перед именем проекта в вызове удаления.Это будет работать, только если я добавлю это, и я считаю, что это ошибка .
Обновление 7/1 / 2014
Таким образом, на самом деле существует более простой способ сделать вызовы с сервера на сервер.Этот способ не требует использования «потока» (входа в Google) для получения ключа доступа.
Настройка устройства
Настройка учетной записи
- Используя Google Cloud Console , создайте зарегистрированное приложение (если у вас его еще нет. Нажмите на свой проект AppEngine -> API & Auth -> Учетные данные. Нажмите Создать новый идентификатор клиента, укажите учетную запись службызатем нажмите «Создать идентификатор клиента». Появится окно загрузки для загрузки вашего закрытого ключа, сохраните его в каталоге кода (или там, где я сохранил как 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')