使用ESPN API提取实时数据

时间:2020-07-10 19:04:09

标签: python tkinter

我一直在研究一种将实时数据提取到tkinter GUI中的方法,并将其达到我想要的篮球水平,但似乎对于高尔夫而言,使用ESPN API提取数据的布局和方式是不同的。我知道我必须首先使用下面的代码中的第一个URL查找运动员的ID,但是在此之后,我将很难为那个运动员提取和发布数据。如果有人可以给我看一个例子,说明如何仅给一个特定的玩家提供当日ID的分数,或者到目前为止已经打了多少洞,那将是很好的。我对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 :(得分:0)

第二个请求返回的JSON包含1个键(“事件”),它是一个包含1个项目的列表,其中包含“工作日慈善公开赛”的数据。随后,此数据包含键“竞争”,这是一个包含1个项目的列表,其中包含事件的所有详细信息。因此,要遍历JSON以访问此事件的竞争对手数据,您需要执行以下操作:

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

然后访问特定玩家ID的数据:

player_data = [i for i in competitors if i["id"] == id_][0]

答案 1 :(得分:0)

因此,在player_data数据中(请参见下面的图像,可见),您需要转到键['score']['displayValue']linescores也是一样。但是,请注意linescores是一个列表,所以我怀疑他们每天都会在其上附加最新的分数,因此,您需要调用列表中的最后一项。我也把它放在那里,但把它注释掉了

enter image description here

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

答案 2 :(得分:0)

在右侧(如果它是默认布局),应该有一个名为“变量窗口”,“变量显示”或“变量浏览”的选项卡(类似这样,无法确切记住名称,但它是“变量”)。然后,一旦存储了某些内容,您就可以双击浏览它的内容了,是的,当我第一次学习时,它确实帮助了我理解json结构。