Библиотека даты и времени в Python дает неверный формат для YYYY-MM-DD, что приводит к ошибке после встраивания в вызов API - PullRequest
4 голосов
/ 14 января 2020

я новичок в python и пытаюсь работать с API Sendgrid и библиотекой datetime:

Чтобы попытаться получить статистику электронной почты, мой код:

import http.client

conn = http.client.HTTPSConnection("api.sendgrid.com")

payload = "{}"

headers = { 'authorization': "Bearer SG.***" }

conn.request("GET", "/v3/stats?aggregated_by=day&start_date=2020-01-14", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

Этот код работает и я получаю желаемый вывод, однако я хочу создать это приложение таким образом, чтобы оно работало каждый день через планировщик задач и генерировало отчет без изменения даты начала вручную.

Я пытался:

from datetime import date
today = date.today()

если я печатаю (сегодня), он дает мне точный формат 20120-01-14, но если я позвоню прямо сегодня, он говорит:

today
Out[37]: datetime.date(2020, 1, 14)

Ниже я попытался указать "сегодня" в качестве даты начала, но получил ошибку в формате

import http.client

conn = http.client.HTTPSConnection("api.sendgrid.com")

payload = "{}"

headers = { 'authorization': "Bearer SG.***" }

conn.request("GET", "/v3/stats?aggregated_by=day&start_date=today", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

Однако, это дает мне ошибку: {"errors": [{"message": "start_date требуется и должно быть в формате YYYY-MM-DD"} ]}

Что я могу сделать, чтобы вставить start_date для того, чтобы он всегда брал текущую дату, не меняя ее вручную?

Ответы [ 2 ]

1 голос
/ 14 января 2020

Попробуйте это:

date.today().strftime('%Y-%m-%d')

И измените эту строку с этого:

conn.request("GET", "/v3/stats?aggregated_by=day&start_date=today", payload, headers)

на это:

conn.request("GET", "/v3/stats?aggregated_by=day&start_date={}".format(today), payload, headers)

И посмотрите на python встроенные функции даты

0 голосов
/ 14 января 2020

Измените

"/v3/stats?aggregated_by=day&start_date=today"

на

f"/v3/stats?aggregated_by=day&start_date={str(today)}"

или на это, если вы используете Python до 3,6

"/v3/stats?aggregated_by=day&start_date={}".format(str(today))

, что

'2020-01-14'

И это будет работать!

...