2012-09-19 7 views
1

J'ai joué avec tweepy pendant un moment, mais je continue à avoir des problèmes de limitation de débit, obtenant 429 erreurs. Je sais que vous pouvez définir les en-têtes sur les appels individuels commeParamétrer tweepy useragent universellement?

api.get_user('twitter', headers={'User-Agent': 'MyUserAgent'}) 

mais est-il un moyen de définir l'en-tête en un seul endroit et ne pas avoir à le faire à chaque appel api?

Répondre

2

façon Hacky:

import functools 
class NewAPI(object): 
    def __init__(self, api): 
     self.api = api 
    def __getattr__(self, key): 
     call = getattr(self.api, key) 
     @functools.wraps(call) 
     def wrapped_call(*args, **kwargs): 
      headers = kwargs.pop('headers', {}) 
      headers['User-Agent'] = 'MyUserAgent' # or make this a class variable/instance variable 
      kwargs['headers'] = headers 
      return call(*args, **kwargs) 
     return wrapped_call 

api = NewAPI(api) 
print(api.get_user('twitter')) 

Avertissement: non testé que je n'ai pas tweepy.

+0

désolé, il a fallu du temps pour revenir à vous ... Je le teste maintenant, mais la limite de Twitter le limite ... Connaissez-vous de bons didacticiels 'functools'? Je veux juste comprendre cela un peu mieux – JKirchartz

+0

'functools' n'est pas la chose importante ici. Ce que je fais là est l'emballage de l'appel d'origine; 'functools.wraps' est juste un bon utilitaire qui fait que la fonction enveloppée ressemble un peu plus à l'original. – nneonneo