Как очистить имена команд и шансы НХЛ от API? - PullRequest
0 голосов
/ 22 ноября 2018

Я надеюсь получить следующую информацию:

1) Названия команд НХЛ

2) Коэффициенты ставок

Вот сайт: https://www.bovada.lv/services/sports/event/v2/events/A/description/hockey/nhl.

Вот мой код:

import requests

source = requests.get("https://www.bovada.lv/services/sports/event/v2/events/A/description/hockey/nhl").json()   

data = source[0]    

for game in data['events'][2].items():
    print(game)

Приведенный выше код печатает данные только для одной игры.Я надеялся на все игры.Есть ли простой способ пройти через все из них?Я также не уверен, как разобрать информацию, которую я ищу.

  • Названия команд

Я заметил, что названия команд расположены в разделе под названием «участники»:

competitors":[{"id":"3596982-510","name":"Philadelphia Flyers","home":true},{"id":"3596982-376","name":"New York Rangers","home":false}]

В приведенном выше примере я ищу информацию о Philadelphia Flyers и New York Rangers соответственно.

  • Коэффициенты

(Примечание: коэффициенты меняются, поэтому числа, которые вы видите, могут отличаться)

Я также заметил спред с коэффициентами находится в разделе «Группы отображения»:

"displayGroups":[{"id":"100-128","description":"Game Lines","defaultType":true,"alternateType":false,"markets":[{"id":"57349611","description":"Total","key":"2W-OU","marketTypeId":"120743","status":"O","singleOnly":false,"notes":"","period":{"id":"1191","description":"Match","abbreviation":"M","live":false,"main":true},"outcomes":[{"id":"294606239","description":"Over","status":"O","type":"O","price":{"id":"1836755921","handicap":"6.5","american":"EVEN","decimal":"2.00","fractional":"1/1","malay":"1.00","indonesian":"1.00","hongkong":"1.00"}},{"id":"294606240","description":"Under","status":"O","type":"U","price":{"id":"1836755922","handicap":"6.5","american":"-125","decimal":"1.800","fractional":"4/5","malay":"0.80","indonesian":"-1.25","hongkong":"0.80"}}]},{"id":"57349614","description":"Moneyline","key":"2W-12","marketTypeId":"372","status":"O","singleOnly":false,"notes":"","period":{"id":"1191","description":"Match","abbreviation":"M","live":false,"main":true},"outcomes":[{"id":"294606235","description":"New York Rangers","status":"O","type":"A","competitorId":"3596982-376","price":{"id":"1836569815","american":"+125","decimal":"2.250","fractional":"5/4","malay":"-0.80","indonesian":"1.25","hongkong":"1.25"}},{"id":"294606236","description":"Philadelphia Flyers","status":"O","type":"H","competitorId":"3596982-510","price":{"id":"1836569814","american":"-155","decimal":"1.645161","fractional":"20/31","malay":"0.65","indonesian":"-1.55","hongkong":"0.65"}}]},{"id":"57349618","description":"Puck Line","key":"2W-HCAP","marketTypeId":"120744","status":"O","singleOnly":false,"notes":"","period":{"id":"1191","description":"Match","abbreviation":"M","live":false,"main":true},"outcomes":[{"id":"294606248","description":"New York Rangers","status":"O","type":"A","competitorId":"3596982-376","price":{"id":"1836755920","handicap":"1.5","american":"-210","decimal":"1.47619","fractional":"10/21","malay":"0.48","indonesian":"-2.10","hongkong":"0.48"}},{"id":"294606249","description":"Philadelphia Flyers","status":"O","type":"H","competitorId":"3596982-510","price":{"id":"1836569799","handicap":"-1.5","american":"+175"

В приведенном выше примере информация, которую я ищу, это 1.5 и -210 (для "Нью-Йорк Рейнджерс") и -1,5 и + 175 (для "Филадельфийских листовок").

Вот пример данных, которые я хотел бы получить для одной игры:

                            Spread       Win         Total
New York Rangers        +1.5 (-230)     +130     O 6.0 (-105)
Philadelphia Flyers     -1.5 (+190)     -150     O 6.0 (-115)

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

Я новичок в чистке и у меня нет опыта программирования.Любая помощь будет оценена.Заранее спасибо за ваше время и усилия!

  • Обновление:

Вот URL: https://www.bovada.lv/sports/hockey

Iищу информацию по линии ставок:

enter image description here

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

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

import requests

source = requests.get("https://www.bovada.lv/services/sports/event/v2/events/A/description/hockey/nhl").json()   

data = source[0] 
for game in data:
    for team in data['events']:
        try:
            team_1 = team['competitors'][0]['name']
            team_2 = team['competitors'][1]['name']
            try: odd_1_1 = team['displayGroups'][0]['markets'][0]['outcomes'][0]['price']['handicap'] 
            except KeyError: odd_1_1 = None
            try: odd_1_2 = team['displayGroups'][0]['markets'][0]['outcomes'][0]['price']['american'] 
            except KeyError: odd_1_2 = None
            try: odd_2_1 = team['displayGroups'][0]['markets'][0]['outcomes'][1]['price']['handicap'] 
            except KeyError: odd_2_1 = None
            try: odd_2_2 = team['displayGroups'][0]['markets'][0]['outcomes'][1]['price']['american'] 
            except KeyError: odd_2_2 = None
            print("{0} ({2}, {3}) vs {1} ({4}, {5})".format(team_1,team_2, odd_1_1, odd_1_2, odd_2_1, odd_2_2))
        except IndexError:
            pass

Вывод:

Philadelphia Flyers (6.0, -115) vs New York Rangers (6.0, -105)
Washington Capitals (1.5, -150) vs Detroit Red Wings (-1.5, +125)
Anaheim Ducks (5.5, -110) vs Edmonton Oilers (5.5, -110)
...

Обратите внимание, что в некоторых записях ключ competitors не имеет значения, поэтому я использовал try/ except чтобы справиться с этим делом ...

0 голосов
/ 22 ноября 2018

Это данные в формате JSON, поэтому используйте модуль python json

import json
json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
>>> ['foo', {'bar': ['baz', None, 1.0, 2]}]

. Вы можете использовать отладчик для наблюдения за структурой данных, функция loads(str) вернет.Это будет dict в вашем случае.Затем перейдите по спискам и словарям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...