2009-11-06 4 views
0

Я пишу приложение агрегации, которое сбрасывает данные из нескольких веб-источников и отображает эти данные с новым интерфейсом. Сайты, с которых я обновляю обновления каждые пару минут, и я хочу убедиться, что данные в моем агрегаторе обновлены.Как загружать данные в Google App Engine периодически?

Каков наилучший способ периодически отправлять свежие данные в приложение App Engine из автоматизированного сценария?

Ограничения:

  1. Приложение написано на Python.

  2. Процесс соскабливания для каждого сайта занимает больше одной секунды, поэтому я не могу обработать данные в обработчике App Engine.

  3. Хост, на котором запускался скрипт обновления, является общим, поэтому я предпочитаю не хранить мой пароль на диске.

  4. Я бы хотел проверить код для приложения на нашей кодовой базе. В то время как мои партнеры не злонамеренны, они - шутники, и я хотел бы помешать им вставлять поддельные данные в мое приложение.

  5. Я знаю, что App Engine поддерживает некоторую remote_api вещь, но мне пришлось бы поставить эту точку входа за аутентификацией (см. Ограничение 3) или скрыть URL-адрес (см. Ограничение 4).

Предложения?

+0

Если вы не можете доверять своим партнерам, чтобы они не мешали продуктовому приложению, вам нужны новые партнеры! –

ответ

3

Задайте задачу очереди задач или задание cron для приложения, чтобы справиться с этим. Я не знаю, где вы слышали, что существует ограничение на 1 секунду на любых операциях в App Engine. Запросы ограничены 30 секундами, а выборки URL имеют максимальный срок в 10 секунд.

+0

Ах! Я думал, что предел составляет 1 секунду. Благодаря! –

0

Единственный способ получить данные в AppEngine - вызывать веб-приложение (как веб-приложение) и передавать его через обычные HTTP-ish-средства, то есть в качестве параметров для запроса GET (для коротких данных) или POST (если длинный или двоичный).

Другими словами, вам понадобится создать собственный маленький dataloader, к которому вы будете обращаться как к веб-приложению, и, в свою очередь, запишет данные в базу данных за AppEngine.

Возможно, вы захотите по крайней мере защитить паролем в этом приложении, чтобы никто не загружал поддельные данные в ваше приложение.

0

Можете ли вы разбить процесс соскабливания на независимые куски, которые могут быть завершены в таймфрейме запроса appengine? (который может работать дольше одной секунды). Затем вы можете просто создать множество задач, используя API-интерфейс задачи, который при объединении выполняет полную очистку. Затем используйте API cron для запуска этих задач каждые N минут.

0

Я спросил вокруг и некоторые друзья придумали два решения:

  • Загрузить файл с общим секретным маркером вместе с приложением, но при совершении в кодовом, изменить маркер.

  • Создайте небольшую модель хранилища данных с одной строкой, секретным токеном.

В обоих случаях маркер может использоваться для проверки подлинности POST запросов, используемых для загрузки новых данных.