Estoy tratando de pasar un número arbitrario de argumentos a una función, y sigo recibiendo errores, y no estoy seguro de dónde me estoy equivocando. Esta es la primera vez que intento usar ** kwargs.
Más específicamente, estoy tratando de usar la biblioteca Facepy para obtener datos de la API de gráficos de Facebook. Según la documentación (https://facepy.readthedocs.org/en/latest/usage/graph-api.html), la get
El método debe aceptar parámetros opcionales como "Dado", "hasta", etc. Dado que solo quiero pasar algunos de estos parámetros en cualquier consulta dada, este parece un momento ideal para usar ** kwargs.
Primero creo una función que envuelve la biblioteca de facepy:
def graph_retriever(object_id, metric_url, **kwargs):
#optional args that I want to pass include since, until, and summary
graph = facepy.GraphAPI(access_token)
retries = 3 # An integer describing how many times the request may be retried.
object_data = graph.get('%s/%s' % (object_id, metric_url), False, retries, **kwargs)
return object_data
Aquí hay dos ejemplos en los que llamo a la función con diferentes argumentos:
for since, until in day_segmenter(start, end): # loop through the date range
raw_post_data = graph_retriever(str(page), 'posts', {'since': since, 'until': until})
post_dict['comment_count'] = graph_retriever(post_id, 'comments', {'summary':1})['summary']['total_count']
Sin embargo, cuando intento ejecutar esto, recibo el siguiente error:
Traceback (most recent call last):
raw_post_data = graph_retriever(str(page), 'posts', {'since': since, 'until': until})
TypeError: graph_retriever() takes exactly 2 arguments (3 given)
¿Qué estoy haciendo mal?