Je ne suis pas sûr si j'ai utilisé la bonne terminologie dans la question.Quelle est la meilleure façon de forcer un mot clé en utilisant ** kwargs?
Actuellement, j'essaie de créer un wrapper/interface autour de l'API Blogger de Google (service Blog). [Je sais que cela a déjà été fait, mais j'utiliser cela comme un projet pour apprendre POO/python.]
J'ai fait une méthode qui obtient un ensemble de 25 messages d'un blog:
def get_posts(self, **kwargs):
""" Makes an API request. Returns list of posts. """
api_url = '/blogs/{id}/posts'.format(id=self.id)
return self._send_request(api_url, kwargs)
def _send_request(self, url, parameters={}):
""" Sends an HTTP GET request to the Blogger API.
Returns JSON decoded response as a dict. """
url = '{base}{url}?'.format(base=self.base, url=url)
# Requests formats the parameters into the URL for me
try:
r = requests.get(url, params=parameters)
except:
print "** Could not reach url:\n", url
return
api_response = r.text
return self._jload(api_response)
le problème est, je dois spécifier la clé API chaque fois que j'appelle la fonction get_posts
:
someblog = BloggerClient(url='http://someblog.blogger.com', key='0123')
someblog.get_posts(key=self.key)
chaque appel de l'API exige que la clé soit envoyée en tant que paramètre sur l'URL. Alors, quelle est la meilleure façon de le faire?
Je pense une façon possible (? Mais probablement pas la meilleure façon), est d'ajouter la clé du kwargs dictionnaire dans le _send_request()
:
def _send_request(self, url, parameters={}):
""" Sends an HTTP get request to Blogger API.
Returns JSON decoded response. """
# Format the full API URL:
url = '{base}{url}?'.format(base=self.base, url=url)
# The api key will be always be added:
parameters['key']= self.key
try:
r = requests.get(url, params=parameters)
except:
print "** Could not reach url:\n", url
return
api_response = r.text
return self._jload(api_response)
Je ne peux pas vraiment obtenir ma tête quel est le meilleur moyen (ou le plus pythonique) de le faire.