Twitter API предлагает API потоковой передачи, который, вероятно, именно то, что вы хотите сделать, чтобы обеспечить захват всего:
http://dev.twitter.com/pages/streaming_api_methods
Если я понимаю, что вы ищете, вы, вероятно, захотите statuses/filter
, используя параметр track
с любыми отличительными характеристиками (хэштегами, словами, фразами, местоположениями, пользователями), которые вы ищете.
Во многих библиотеках Twitter API это встроено, но в основном вы оставляете HTTP-соединение открытым, и Twitter постоянно отправляет вам твиты по мере их появления. Подробнее об этом см. В обзоре потокового API . Если ваша библиотека не делает это за вас, вам нужно будет проверить наличие сброшенных соединений и переподключиться, проверить коды ошибок и т. Д. - все это в обзоре. Но добавление их по мере их поступления позволит вам полностью исключить дубликаты (если только вы не разрешите только одну запись для пользователя - но это ограничения на стороне клиента, с которыми вы столкнетесь позже).
Если вы не забиваете свою БД, то, если у вас есть Твиттер, просто отправляющий вам материал, вы сами контролируете свои задачи - вы можете легко заставить своего клиента кешировать твиты по мере их поступления, а затем записывать их в дБ в заданное время или с интервалами подсчета - напишите все, что он собрал каждые 5 минут, или напишите, как только у него будет 100 твитов, или оба (очевидно, эти числа являются просто местозаполнителями). Это когда вы можете проверить существующие имена пользователей, если вам нужно - написание кэшированного списка даст вам лучший шанс сделать вещи эффективными, как вы хотите.
Обновление:
Мое решение выше, вероятно, лучший способ сделать это, если вы хотите получить живые результаты (что, кажется, вы делаете). Но, как упомянуто в другом ответе, вполне возможно, что можно просто использовать API поиска для сбора записей после окончания конкурса и не беспокоиться о их сохранении вообще - вы можете указать страницы, когда спросите для результатов (как указано в ссылке API поиска), но есть ограничения на количество результатов, которые вы можете получить в целом, что может привести к пропуску некоторых записей. Какое решение лучше всего подойдет для вашего приложения, зависит только от вас.