Параллельный доступ к данным Google AdWords

Дано

Я разрабатываю два разных приложения, использующих одни и те же учетные данные для доступа к API AdWords. Приложение-бот предназначено только для сбора/анализа данных из API.

Приложениям № 1 и № 2 требуется примерно 1 час, чтобы завершить процесс получения/анализа данных из API.

Я использую:

  1. мой собственный аккаунт AdWords,
  2. метод аутентификации ClientLogin,
  3. рубиновый язык.

Проблема

Иногда оба таймфрейма (для приложений № 1 и № 2) могут перекрываться, и я начинаю получать массу этих ошибок:

AdwordsApi::Errors::ReportXmlError: HTTP code: 400, error type: 'AuthorizationError.USER_PERMISSION_DENIED'

Следующая последовательность событий приводит к проблеме:

  1. Приложение № 1 запрашивает токен аутентификации у Google и кэширует его после получения.
  2. Приложение № 1 запускает процесс приема данных с использованием токена,
  3. Приложение № 2 запрашивает токен аутентификации у Google и кэширует его после получения.
  4. Приложение № 2 запускает процесс приема данных с использованием токена,
  5. Приложение № 1 запрашивает еще одну порцию данных из API AdWords, но из-за пункта 3 токен авторизации для Приложения 1 стал недействительным, и приложение начинает задыхаться из-за вышеуказанной ошибки.

Итак, возникает вопрос: есть ли способ сделать такую ​​настройку, чтобы оба приложения могли одновременно обращаться к API AdWords без вмешательства/аннулирования токена?


person gmile    schedule 02.01.2013    source источник


Ответы (1)


У нас есть много приложений, которые следуют тому же шаблону, который вы описали, но мы не сталкиваемся с аннулированием токенов.

AdwordsApi::Api.new(credentials).authorize

Мы кэшируем возвращенный там токен, а затем повторно используем его для последующих запросов, но учетные данные, которые мы используем, используются многими приложениями, токен используется только одним приложением. Мы кэшируем его на 12 часов, а затем истекаем, что приводит к выпуску нового.

person lloydpick    schedule 04.01.2013