2010-02-05 3 views
0

Donc j'essaie de construire un outil de surveillance en temps réel pour les mots clés de Twitter en utilisant tweet sharp. J'utilise l'API de recherche pour collecter des requêtes toutes les 10-15 secondes. Quand je fais les appels, je veux seulement rassembler des tweets qui sont apparus depuis la mise à jour perméable.Comment obtenir l'heure du serveur 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 = currentResponseDateTime; 

Mon problème est que l'heure du serveur Twitter est différente de l'heure du client de quelques secondes. J'ai regardé autour et j'ai essayé d'obtenir le datetime j'ai reçu la réponse de la propriété Response.ResponseDate, mais il semble que ce soit réglé en fonction de l'heure de l'ordinateur local. I.e currentResponseDateTime est quelques secondes en avance sur l'heure du serveur Twitter. Donc, je finis par ne pas recueillir quelques-uns des tweets.

Est-ce que quelqu'un sait comment je peux obtenir l'heure actuelle du serveur à partir de la recherche sur Twitter ou de l'API REST?

Merci

+0

Vous pouvez supposer qu'ils se synchronisent avec un serveur NTP. Si ce n'est pas facile, vous pouvez tester en synchronisant avec un serveur NTP, puis en programmant un appel d'API à un moment donné et en enregistrant l'heure à laquelle l'appel est émis et le moment où vous obtenez une réponse. Vous pouvez ensuite utiliser cet intervalle comme une comparaison avec l'annotation de temps sur les tweets. –

Répondre

4

Je ne sais pas comment vous obtiendrez le temps de serveur local du service Twitter, mais une approche que vous pourriez prendre est de stocker la date de la dernière mise à jour twitter vu dans la « lastUpdateDateTime » champ. De cette façon, vous êtes assuré d'obtenir tous les messages depuis le dernier que vous avez vu, quel que soit le décalage du serveur 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(); 
+0

La façon dont je voulais le dire – Vestel

+0

C'est une bonne idée. Merci! – abudker

0

Une autre approche (et qui recommande Twitter) est de tirer l'en-tête Date de la réponse de leur serveur API, qui fournit la notion de Twitter de temps en GMT. Cela suppose que vous pouvez accéder aux en-têtes de réponse du serveur, et cela dépend de la méthode que vous utilisez pour accéder à l'API.

Par exemple, frapper 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 
... 

Référence: how to get the twitter server time (synchronize)? sur le site de support dev.twitter.com.

Taylor Singletary Citation:

L'heure actuelle que Twitter « pense » qu'il est est retourné dans la « date » en-tête HTTP de chaque réponse à une API appel que vous faites. Vous pouvez également envoyer une requête HTTP HEAD simple à GET help/test pour obtenir l'en-tête comme étape de synchronisation initiale pour votre application.

Questions connexes