Какой самый лучший способ получить данные, которые я хочу от Twitter? - PullRequest
0 голосов
/ 24 июня 2009

В настоящее время я сохраняю некоторые данные Twitter в MySQL. Мой хост позволяет мне запускать задания cron каждый час, поэтому, чтобы полу-симулировать результаты в реальном времени, я копировал один и тот же файл 6 раз и запускал один файл каждые 10 минут (хост ДОЛЖЕН управлять часовым смещением). Я думаю, это глупо.

Есть ли какой-нибудь механизм, о котором я могу узнать, который подтолкнет данные в мою сторону? Любые мысли или предложения приветствуются.

(я старался не запрашивать их сервер при каждом просмотре страницы; я знаю достаточно, чтобы понять, что это плохая практика)

Ответы [ 5 ]

1 голос
/ 24 июня 2009

Вы можете разумно извлекать данные из твиттера, сгенерированные из ваших запросов. Это немного эзотерично, но по сути вы храните данные блокировки в таблице, чтобы гарантировать, что только один запрос опрашивает данные из твиттера каждые N минут (или всякий раз, когда вам это нужно). Пример:

  1. Запрос проверки, чтобы узнать, нужно ли извлекать новые данные из твиттера
  2. Проверьте таблицу блокировок, чтобы увидеть, если другой запрос уже обращается к Twitter
  3. Добавить запись в таблицу блокировок. Обязательно укажите данные в столбце, для которого задано уникальное значение с помощью ограничения базы данных. Это не даст вам сделать два замка.
  4. Поговорите с твиттером, сохраните данные твиттера.
  5. Удалить блокировку записи

Для скорости убедитесь, что ваша таблица блокировок находится в памяти или используйте вместо нее memcached. Конечно, если вы можете использовать memcached, вы, тем не менее, имеете полный контроль над cron. :)

1 голос
/ 24 июня 2009

Как насчет доступа к веб-странице (которая, в свою очередь, выполнит программу), размещенной на сервере, добавив cron на стороне клиента (домашняя система):

/usr/bin/curl http://yourserver.com/twitter

В противном случае вы можете запускать следующий скрипт bash каждый час:

#!/bin/bash

for (( i = 0; i < 6; i += 1 )); do
    /usr/bin/curl 'http://yourserver.com/twitter'
    sleep 600
done
0 голосов
/ 24 июня 2009

Почему бы просто не поместить цикл while в вашу программу, а затем поспать N секунд между тем, как долго вам нужны обновления? Вы можете умереть через 59 минут 30 секунд.

В качестве альтернативы, чтобы оптимизировать копирование нескольких файлов, вы можете добавить несколько вызовов в вашу программу в пределах одной строки cron. Что-то вроде:

./prog.pl; sleep 60; ./prog.pl

0 голосов
/ 24 июня 2009

Довольно легко запускать код каждую секунду или около того.

// pseudocode
while(1) {
    // do request

    // sleep 1 second
    sleep(1);
}
0 голосов
/ 24 июня 2009

Относительно простым решением является запуск задания cron на другом компьютере. Он будет отправлять запросы в Twitter, а затем выполнять HTTP-запрос POST на назначенную страницу на сервере (например, http://foo.com/latestTwitterData).. Конечно, вы хотите иметь аутентификацию, чтобы предотвратить отправку вам случайного дерьма.

Я не знаю, подходит ли это для вашей ситуации.

...