2010-08-08 7 views
8

Je travaille avec une application java Twitter (en utilisant Twitter4J api). Toutefois, lorsque vous utilisez l'application, il semble assez rapidement dépasser les 150 demandes par heure limite de débit sur les clients Twitter (je connais les développeurs peut augmenter cela à 350 sur des comptes donnés, mais cela ne résoudrait pas pour d'autres utilisateurs).Limite de débit dépassée - Application Twitter personnalisée

Sûrement que cela n'affecte pas tous les clients, des idées sur la façon de contourner cela?

Est-ce que quelqu'un sait ce qui compte comme une demande? Par exemple, lorsque je visualise le profil d'un utilisateur, je charge l'objet Utilisateur (twitter4j) et récupère le pseudo, le nom d'utilisateur, la description de l'utilisateur, le statut de l'utilisateur, etc. à placer dans un objet JSON. ou serait-il plusieurs d'inclure tous les appels user.get ...?

Merci à l'avance

Répondre

4

Vous avez vraiment besoin de garder une trace de ce que votre compte de la demande actuelle est en matière de Twitter. Cependant, Twitter ne semble pas laisser tomber le nombre de 304 Non Modifié (du moins pas la dernière fois que je l'ai traité), donc assurez-vous qu'il n'y a pas quelque chose qui viole votre utilisation normale de la mise en cache HTTP, et votre demande pratique par heure monte. Notez que twitter souffre d'un bug dans mod_gzip sur apache où le e-tag est mal formé en le changeant pour refléter que le codage du contenu est différent de celui de l'entité non gzippée (c'est la bonne chose à faire, il y a juste un bug dans la mise en œuvre). Pour cette raison, accepter du contenu gzipé sur Twitter signifie qu'il n'enverra jamais un 304, ce qui augmente le nombre de requêtes et, dans de nombreux cas, compromet les gains d'efficacité de l'utilisation de gzip. Par conséquent, si vous acceptez gzip (votre bibliothèque Web peut le faire par défaut, voir ce que vous pouvez voir avec un outil comme Fiddler, je suis un gars .NET avec seulement un peu de connaissances Java, répondant à la niveau de comment Twitter traite avec HTTP, donc je ne connais pas les détails des bibliothèques Web Java), essayez d'éteindre cela, et voir si cela améliore les choses.

+0

Merci pour le conseil - Je vais étudier la mise en cache HTTP et assurez-vous que je cache les appels de manière appropriée. J'ai réussi à identifier une grande partie du problème: lorsque je faisais la liste des objets JSON (par exemple, la chronologie récente), j'allais chercher toutes les données qui pourraient être nécessaires plus loin (par exemple pour chaque mise à jour sur le chronologie je cherchais toutes les informations d'utilisateurs telles que le nom/description/num suiveurs etc). Je l'ai changé afin qu'il récupère seulement les données de base pour la liste et puis "paresseusement" récupère d'autres données quand nécessaire. Merci encore! – rhinds

+0

FWIW, j'ai signalé le bug avec l'interaction entre 304 et gzip à twitter. Comme il s'agit d'un bug apache, il ne sera probablement pas corrigé à leur niveau. Le bug apache était déjà connu à Apache quand je l'ai découvert sur Twitter. –

1

Presque chaque type de lecture sur les serveurs de Twitter (c'est-à-dire tout ce qui appelle HTTP GET) compte comme une requête. Obtenir des chronologies utilisateur, des retweets, des messages directs, obtenir des données utilisateur comptent pour 1 requête chacun. Pratiquement le seul appel de l'API Twitter qui lit sur le serveur sans compter la limite de l'API vérifie le statut de la limite de débit.

Questions connexes