Как узнать время сервера твиттера?

Поэтому я пытаюсь создать инструмент мониторинга ключевых слов в твиттере в реальном времени, используя tweet Sharp. Я использую поисковый API для сбора запросов каждые 10-15 секунд. Когда я звоню, я хочу собирать только твиты, появившиеся после предыдущего обновления.

var twitter = FluentTwitter.CreateRequest().AuthenticateAs("username", "password").Search().Query().Containing("key word").Take(1000);
var response = twitter.Request();

currentResponseDateTime= Convert.ToDateTime(response.ResponseDate);

var messages = from m in response.AsSearchResult().Statuses
               where m.CreatedDate > lastUpdateDateTime
               select m;

lastUpdateDateTime = currentResponseDateTime;

Моя проблема в том, что время сервера Twitter отличается от времени клиента на несколько секунд. Я осмотрелся и попытался получить дату и время, когда я получил ответ от свойства Response.ResponseDate, но похоже, что он установлен на основе времени локального компьютера. То есть currentResponseDateTime на несколько секунд опережает время сервера Twitter. Так что в итоге я не собираю несколько твитов.

Кто-нибудь знает, как я могу получить текущее время сервера из поиска в твиттере или REST API?

Спасибо


person abudker    schedule 05.02.2010    source источник
comment
Вы можете предположить, что они синхронизируются с сервером NTP. Если нет простого способа, вы можете проверить, синхронизировав его с сервером NTP, а затем программно выполнив вызов API в известное время и записав время, когда вызов уходит, и время, когда вы получаете ответ. Затем вы можете использовать этот интервал для сравнения с аннотацией времени в твитах.   -  person Kaleb Pederson    schedule 05.02.2010


Ответы (2)


Я не уверен, как вы могли бы получить локальное время сервера службы твиттера, но один подход, который вы могли бы использовать, — сохранить дату самого последнего обновления твиттера, отображаемого в поле «lastUpdateDateTime». Таким образом, вы гарантированно получите все сообщения, начиная с последнего, которое вы видели, независимо от смещения сервера Twitter.

        var twitter = FluentTwitter.CreateRequest().AuthenticateAs("username", "password").Search().Query().Containing("key word").Take(1000);
        var response = twitter.Request();

        currentResponseDateTime= Convert.ToDateTime(response.ResponseDate);

        var messages = from m in response.AsSearchResult().Statuses
                       where m.CreatedDate > lastUpdateDateTime
                       select m;

        lastUpdateDateTime = messages.Select(m => m.CreatedDate).Max();
person Ryan Brunner    schedule 05.02.2010

Другой подход (и тот, который рекомендует Твиттер) состоит в том, чтобы извлечь заголовок Date из ответа своего API-сервера, который обеспечивает представление Твиттера о времени по Гринвичу. Это предполагает, что вы можете получить доступ к заголовкам ответа сервера, и это зависит от метода, который вы используете для доступа к API.

Например, нажав https://api.twitter.com/1/help/test.json

$ lynx --dump --head https://api.twitter.com/1/help/test.json
HTTP/1.0 200 OK
Date: Tue, 22 Jan 2013 13:30:36 GMT
...

Ссылка: как получить время сервера Twitter (синхронизировать)? на сайте поддержки dev.twitter.com .

Цитируя Taylor Singletary:

Текущее время, которое Twitter «думает», возвращается в заголовке HTTP «Дата» каждого ответа на вызов API, который вы делаете. Вы также можете отправить простой HTTP-запрос HEAD для GET help/test, чтобы получить заголовок в качестве начального шага синхронизации для вашего приложения.

person Inactivist    schedule 22.01.2013