GAE TaskQueue: пример кода для доступа к очереди извлечения извне App Engine?

Я пытаюсь использовать REST API GAE TaskQueue для переноса задач из очереди на внешний сервер (сервер не в GAE).

  • Есть ли библиотека, которая делает это для меня?

  • API достаточно прост, поэтому мне просто нужно разобраться с аутентификацией. Я изучил запрос, отправленный gtaskqueue_sample от google-api-python-client с помощью --dump_request, и нашел заголовок authorization: OAuth XXX. Добавление этого токена к моему собственному запрошенному сработало, но срок действия токена, похоже, периодически истекает (возможно, ежедневно), и я не могу понять, как его повторно сгенерировать. В этом отношении сам gtaskqueue_sample больше не работает (вызов https://accounts.google.com/o/oauth2/token не работает с No JSON object could be decoded).

Как позаботиться об аутентификации? Это серверное приложение, поэтому в идеале я мог бы сгенерировать токен, который я мог бы использовать с тех пор.


person Parand    schedule 06.08.2011    source источник


Ответы (3)


Этот вопрос старый, но он все еще актуален, поэтому я попытаюсь дать лучший ответ, основываясь на своем недавнем опыте.

Можно получить доступ к очередям задач извлечения за пределами 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 )
    

Вызовы из очереди задач


Обновление от 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
comment
Часть вашего ответа служебной учетной записи ОЧЕНЬ полезна для меня! Я сдаю в аренду задачу из своей очереди на вытягивание. Спасибо. - person hiroshi; 16.12.2014

Эти APIS работают только для сервера GAE, поскольку очереди могут быть созданы только с помощью queue.yaml, а на самом деле API не предоставляет никакого API для вставки очереди, задач или проекта.

person vibhooti verma    schedule 30.12.2011

На странице очередей извлечения есть целый раздел о клиентские библиотеки и примеры кода.

person Nick Johnson    schedule 08.08.2011
comment
@Parand Если в примере кода есть определенные вещи, в которых вы не уверены или нуждаетесь в помощи, вам следует задать вопросы именно о них. - person Nick Johnson; 08.08.2011
comment
Мысли: в примере кода используются различные соглашения Google (например, gflags), которые увеличивают кривую обучения и количество багажа. Он не представлен как повторно используемая библиотека (например, учетные данные жестко закодированы в клиенте). Это часть большого пакета кода и примеров, что усложняет поиск и навигацию. Было бы неплохо, если бы было простое и понятное объяснение того, как выполнить аутентификацию с помощью, например, python-oauth2. Что такое конечные точки OAuth, что означают области действия и т. д. Я предполагаю, что вся информация существует по частям, но, несмотря на большие усилия, мне еще предстоит собрать ее всю. - person Parand; 08.08.2011
comment
@Parand Достаточно честно. Я добавлю это в свою очередь постов в блоге. :) - person Nick Johnson; 09.08.2011