Получение данных в реальном времени с помощью ESPN API - PullRequest
0 голосов
/ 10 июля 2020

Я работал над способом извлечения данных в реальном времени в tkinter GUI и дошел до той точки, которую я хочу для баскетбола, но кажется, что макет и способ извлечения данных с помощью ESPN API отличаются для гольфа. Я знаю, что сначала мне нужно найти идентификатор игрока, используя первый URL-адрес в приведенном ниже коде, но после этого у меня возникают проблемы с получением и отправкой данных только для этого одного спортсмена. Если бы кто-нибудь мог показать мне пример того, как просто узнать счет для одного конкретного игрока, учитывая идентификатор на текущий день или сколько лунок они сыграли до сих пор, это было бы здорово. Я новичок в Python, поэтому любая помощь приветствуется. Заранее спасибо.

import requests
import time

def get_data(query):

    url = 'https://site.web.api.espn.com/apis/common/v3/search?region=us&lang=en&query={}&limit=5&mode=prefix&type=player'.format(query)

    r = requests.get(url)
    data = r.json()

    id_ = data['items'][0]['id']
    name = data['items'][0]['displayName']

    url = 'https://site.web.api.espn.com/apis/site/v2/sports/golf/leaderboard?league=pga'
    r = requests.get(url)

    data = r.json()

    DailyScore = data['competition']['']['']

    return (id_,name,DailyScore)

# --- main ---

query = 'Rickie'

print('id:', id_)
print('name:',name)
print('Daily Score:',DailyScore)

Ответы [ 3 ]

0 голосов
/ 17 июля 2020

Итак, в этих player_data данных (см. Изображение ниже для визуализации) вам нужно go для ключей ['score']['displayValue']. То же для linescores. ОДНАКО, обратите внимание, что linescores - это список, поэтому я подозреваю, что каждый день они будут добавлять последний счет, поэтому для этого вам нужно будет вызвать последний элемент в списке. Я тоже вставил это туда, но закомментировал

введите описание изображения здесь

import requests

def get_data(query):

    url = 'https://site.web.api.espn.com/apis/common/v3/search?region=us&lang=en&query={}&limit=5&mode=prefix&type=player'.format(query)

    r = requests.get(url)
    data = r.json()

    id_ = data['items'][0]['id']
    name = data['items'][0]['displayName']

    url = 'https://site.web.api.espn.com/apis/site/v2/sports/golf/leaderboard?league=pga'
    r = requests.get(url)

    data = r.json()

    competitors = data["events"][0]["competitions"][0]["competitors"]
    player_data = [i for i in competitors if i["id"] == id_][0]
    
    DailyScore = player_data['score']['displayValue']
    #DailyScore = player_data['linescores'][-1]['displayValue']

    return (id_,name,DailyScore)

# --- main ---

query = 'Rickie'

id_, name, DailyScore = get_data(query)

print('id:', id_)
print('name:',name)
print('Daily Score:',DailyScore)

Вывод:

id: 3702
name: Rickie Fowler
Daily Score: +9
0 голосов
/ 20 июля 2020

Справа (если это макет по умолчанию) должна быть вкладка, называемая окном переменных, или отображением переменных, или исследованием переменных (что-то в этом роде, не могу точно вспомнить имя, но это «переменная». Затем, когда что-то сохранено, вы можете дважды щелкнуть по нему и изучить его содержимое. Да, это действительно помогло мне понять структуры json, когда я впервые учился.

0 голосов
/ 10 июля 2020

JSON, возвращаемое вторым запросом, содержит 1 ключ («события»), который представляет собой список, содержащий 1 элемент с данными для «Workday Charity Open». Впоследствии эти данные содержат ключевые «соревнования», которые представляют собой список, содержащий 1 пункт со всеми подробностями события. Следовательно, чтобы пройти через JSON и получить доступ к данным конкурентов для этого события, вам нужно сделать что-то вроде:

competitors = data["events"][0]["competitions"][0]["competitors"]

А затем получить доступ к данным для указанного c идентификатора игрока:

player_data = [i for i in competitors if i["id"] == id_][0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...