#python #json #python-3.x #datetime
#python #json #python-3.x #дата и время
Вопрос:
Я использую определенный API через лотерейный сервис для извлечения результатов. Чтобы быть более конкретным, я хочу извлечь выигрышные номера первого розыгрыша каждого дня прошлого месяца. URL-адрес API, который я использую, — это https://api.opap.gr/draws/v3.0 /{GameID}/draw-date/{FromDate}/{ToDate} который извлекает только идентификаторы розыгрыша и предоставляет возможность указывать определенные диапазоны дат, но, к сожалению, я получаю следующую ошибку.
{"code":26,"message":"Validation Error: toDate:NotExceedMaxRange,fromDate:NotExceedMaxRange","data":[{"type":"NotExceedMaxRange","property":"toDate","value":"2020-12-02","inputType":"path"},{"type":"NotExceedMaxRange","property":"fromDate","value":"2020-12-01","inputType":"path"}],"source":"infostore","type":"ValidationException","guid":"cda6908c-362d-4368-918e-1c64456bf5e1"}
Ошибка перестает появляться, когда я помещаю одни и те же даты в поля {FromDate} / {ToDate}.
Итак, я создал следующий код,
import requests
import json
import datetime
start = datetime.datetime(2020, 12, 1)
end = datetime.datetime(2020, 12, 26)
delta = datetime.timedelta(days=1)
fmt = "https://api.opap.gr/draws/v3.0/1100/draw-date/{date1:%Y-%m-%d}/{date1:%Y-%m-%d}/draw-id"
urls=[]
while start < end:
date1 = start
date2 = start delta
url = fmt.format(date1=date1, date2=date2)
start = date2
print(url)
r=requests.get(url)
html=r.text
draws=json.loads(html)
print(draws)
Я получаю URL-адреса, из которых мне нужно извлечь файлы JSON, но я получаю много ошибок в основном потому, что (по крайней мере, я думаю) данные, заключенные в каждый JSON, огромны.
Есть ли какой-либо способ извлечь ключ выигрышного номера, который я хочу, из каждого JSON???
Комментарии:
1. итак
https://api.opap.gr/draws/v3.0/1100/draw-date/2020-12-25/2020-12-25/draw-id
, только выигрышные розыгрыши, и вы хотите затем найти эти розыгрыши в главном списке?2. Каждый день проводится 180 розыгрышей. URL извлекает только номера идентификаторов drawid для определенного дня. Затем я должен найти первый идентификатор розыгрыша из этого списка и извлечь из него выигрышные номера. Что это должно быть сделано x30-31 для каждого дня месяца.
Ответ №1:
Это даст вам все выигрышные номера на заданную дату (дата — это строка), не позволит вам запрашивать более одного дня за раз:
import requests
def get_winning_numbers(date: str, game_id: str = '1100'):
url = f'https://api.opap.gr/draws/v3.0/{game_id}/draw-date/{date}/{date}'
data = requests.get(url).json()
winning_numbers = [game['winningNumbers']['list']
for game in data['content']]
return winning_numbers
print(get_winning_numbers('2020-12-01'))
Вывод:
[[49, 44, 55, 63, 79, 54, 19, 16, 59, 41, 4, 8, 23, 77, 36, 73, 35, 66, 3, 51],
[3, 8, 24, 20, 4, 10, 33, 30, 65, 19, 68, 69, 17, 76, 39, 23, 27, 61, 49, 48],
[66, 2, 50, 47, 24, 11, 25, 18, 80, 59, 22, 73, 48, 16, 65, 21, 5, 46, 67, 14],
[32, 10, 8, 45, 69, 26, 72, 74, 13, 67, 79, 2, 25, 9, 58, 7, 20, 28, 66, 70],
[46, 29, 41, 70, 72, 71, 34, 27, 38, 48, 68, 67, 31, 69, 74, 45, 11, 37, 75, 50],
[28, 54, 69, 48, 79, 39, 60, 56, 9, 20, 11, 59, 4, 76, 61, 18, 78, 5, 64, 17],
[7, 32, 31, 59, 68, 61, 20, 2, 15, 75, 23, 76, 74, 64, 37, 56, 41, 72, 65, 45],
[23, 57, 4, 47, 51, 36, 16, 6, 17, 46, 29, 74, 35, 8, 15, 68, 33, 19, 40, 39],
[14, 4, 23, 40, 36, 77, 31, 17, 5, 50, 35, 32, 39, 51, 38, 52, 26, 63, 30, 42],
[25, 20, 66, 34, 22, 60, 43, 1, 40, 42, 31, 15, 4, 38, 26, 23, 75, 41, 44, 79]]