J'utilise https://pypi.python.org/pypi/twitter comme bibliothèque d'API Twitter, mais notez que l'appel de méthode a changé.
Cette bibliothèque ne se présente pas sous la forme de passer directement l'URL de l'API, mais dans le style d'appeler la méthode correspondant à l'API. Par exemple, si l'API est users / show, utilisez la méthode twitter.users.show ().
À propos, l'URL des utilisateurs / show est https://api.twitter.com/1.1/users/show.json?screen_name=twitterdev Cela ressemble à ceci.
Cependant, cette méthode n'est pas implémentée dans la classe Twitter et la classe TwitterCall de cette bibliothèque, et l'URL est assemblée à partir du nom de la méthode en utilisant pleinement __getattr__ pour appeler l'API.
Comme exemple de code, cela ressemble à ceci
class A(object):
def __init__(self, cls, urlparts):
self.callable_cls = cls
self.urlparts = urlparts
def __getattr__(self, k):
print('called {}'.format(k))
try:
return object.__getattr__(self, k)
except AttributeError:
def extend_call(args):
return self.callable_cls(self.callable_cls, self.urlparts + (args,))
return extend_call(k)
def __call__(self, **kwargs):
return self.urlparts
a = A(A, ())
res = a.users.show()
print(res)
Cela renverra un tapple ('users', 'show') en conséquence.
À partir de maintenant, je vais créer une URL https://api.twitter.com/1.1/users/show.json?screen_name=twitterdev et l'appeler.
Comme explication, lorsque ʻa.users est appelé, il n'y a pas de champ ou de méthode appelé ʻusers, donc __getattr__ est appelé. Dans celui-ci, ʻextend_call (users) est appelé et ajouté en tant que taple à self.urlparts. Ensuite, a.users.show est appelé, car il n'y a pas de méthode appelée show, getattrest appelé. Cela va également dansself.urlpartscomme un taple. Lorsqu'il est finalement appelé en tant que méthode,call est appelé et renvoie le contenu de self.urlparts`.
Je ne pense pas que j'utiliserais ce genre d'implémentation, mais en guise de note
Recommended Posts