Ограничение скорости API поиска Twitter Zend

Мы пытаемся создать приложение, которое позволяет пользователю отображать последние новости Twitter о 20 футбольных командах. Мы используем Zend_Service_Twitter_Search с запросом футбольной команды, например. "Арсенал".

Проблема, с которой мы сталкиваемся, заключается в том, что в любой момент веб-сайт может принимать запросы на просмотр новостей всех 20 команд, поэтому 20 вызовов API, если это делают многие пользователи, почасовой лимит будет достигнут.

Нам нужны последние новости обо всех 20 командах, поэтому мы не хотим кэшировать данные дольше 1 минуты. Есть ли у кого-нибудь какой-нибудь совет по этому поводу? Я просмотрел документацию, но там нет предложений.

Ваше здоровье

J


person John Jones    schedule 17.02.2012    source источник


Ответы (2)


Я реализовал нечто подобное недавно. Простой ответ: подсчитайте, сколько запросов вам нужно сделать. Скажем, по 1 на каждую команду, то есть по 20 за раз. Разделите 60 секунд (период ограничения скорости) на (ограничение скорости / количество запросов) и просто кэшируйте свои результаты в чем-то вроде memcache на это количество секунд. Затем, когда пользователь посещает сайт, извлекайте результаты из memcache, если они там есть, в противном случае получайте их свежими. Memcache хорош тем, что он автоматически очищает данные с истекающим сроком действия, поэтому вы не превысите ограничение скорости и всегда будете иметь самые свежие данные (без нарушения ограничения скорости).

Итак, если ограничение скорости составляет 200 в минуту (я знаю, что это не так, но это упрощает математику), вы будете кэшировать свои результаты на 60 / (200/20) = 6 секунд. Таким образом, при максимальной скорости вы будете делать 10 запросов для каждой из 20 команд в минуту, то есть 200 запросов в минуту, что превышает ограничение скорости.

person Endophage    schedule 18.02.2012

Мне кажется, это больше проблема дизайна бэкэнда. Проблемы, с которыми вы хотите справиться:

  1. Предоставлять актуальные данные для пользователей любого масштаба
  2. не превышать лимиты API, которые не опубликованы лимиты API Twitter

Похоже, что решением является некая база данных/хранилище данных для сохранения данных.
Вы можете сделать так, чтобы ваши 20 вызовов API каждую минуту сохраняли информацию, а затем делали ее доступной для пользователей столько, сколько вам нужно.

После краткого просмотра документации Twitter API не похоже, что существуют какие-либо ограничения на хранение данных. Хотя вы, возможно, захотите пересмотреть, как часто использовать поисковый API, поскольку ограничение не опубликовано.

person RockyFord    schedule 18.02.2012