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 dans
self.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