首页 > 解决方案 > 在 Python 中解析 Discord Bot 的 JSON 输出

问题描述

摘要 我目前正在将 JSON 数组的第一个对象转储到 Discord 中,但我只想要一部分数据,特别是teams. 我相信我需要编辑第 50 行return(odds_json['data'][0]),任何人都可以帮助我提取这个特定的数据吗?

这里说转储:

{'id':'19c709db17e33a20f7c88af1a119cef1','sport_key':'basketball_nba','sport_nice':'NBA','teams':['亚特兰大老鹰队','纽约尼克斯队'],'commence_time':1622394647,'home_team ':'亚特兰大老鹰队','网站':[{'site_key':'fanduel','site_nice':'FanDuel','last_update':1622399415,'赔率':{'h2h':[-1350, 700] }}, {'site_key': 'betmgm', 'site_nice': 'BetMGM', 'last_update': 1622399373, '赔率': {'h2h': [-650, 475]}}, {'site_key': ' betrivers', 'site_nice': 'BetRivers', 'last_update': 1622399389, 'odds': {'h2h': [-910, 540]}}, {'site_key': 'draftkings', 'site_nice':'DraftKings','last_update':1622399388,'赔率':{'h2h':[-835, 525]}},{'site_key':'sugarhouse','site_nice':'SugarHouse','last_update ':1622399399,'赔率':{'h2h':[-1000, 575]}},{'site_key':'barstool','site_nice':'Barstool Sportsbook','last_update':1622399403,'赔率': {'h2h': [-1000, 575]}}, {'site_key': 'unibet', 'site_nice': 'Unibet', 'last_update': 1622399400, '赔率': {'h2h': [-1000, 575]}},{'site_key':'betfair','site_nice':'Betfair','last_update':1622399405,'赔率':{'h2h':[-500, 470],'h2h_lay':[- 476, 500]}}, {'site_key':'pointsbetus', 'site_nice': 'PointsBet (US)', 'last_update': 1622399407, 'odds': {'h2h': [-620, 410]}}, {'site_key': 'williamhill_us', 'site_nice' : 'William Hill (US)', 'last_update': 1622399389, 'odds': {'h2h': [-650, 450]}}, {'site_key': 'foxbet', 'site_nice': 'FOX Bet' , 'last_update': 1622399401, '赔率': {'h2h': [-909, 450]}}, {'site_key': 'gtbets', 'site_nice': 'GTbets', 'last_update': 1622399392, '赔率': {'h2h': [-946, 543]}}, {'site_key': 'caesars', 'site_nice': 'Caesars', 'last_update': 1622399398, 'odds': {'h2h': [- 455, 320]}}, {'site_key': 'bovada', 'site_nice': 'Bovada', 'last_update': 1622399102, 'odds': {'h2h': [120, -160]}}, {'site_key': 'mybookieag', 'site_nice': 'MyBookie.ag', 'last_update': 1622399393, '赔率': {'h2h': [-285, 210]}}], 'sites_count': 15}

这是 .py 文件。

import discord
import os
import requests
import json

api_key = os.environ['API_KEY']

client = discord.Client()

def get_odds():
  sports_response = requests.get('https://api.the-odds-api.com/v3/sports', params={
      'api_key': api_key
  })

  sports_json = json.loads(sports_response.text)

  if not sports_json['success']:
      print(
          'There was a problem with the sports request:',
          sports_json['msg']
      )

  else:
    print('Keep it 200')

  sport_key = 'basketball_nba'

  odds_response = requests.get('https://api.the-odds-api.com/v3/odds', params={
      'api_key': api_key,
      'sport': sport_key,
      'region': 'us', # uk | us | eu | au
      'mkt': 'h2h', # h2h | spreads | totals
      'oddsFormat': 'american'
  })

  odds_json = json.loads(odds_response.text)
  if not odds_json['success']:
      print(
          'There was a problem with the odds request:',
          odds_json['msg']
      )

  else:
      # odds_json['data'] contains a list of live and 
      #   upcoming events and odds for different bookmakers.
      # Events are ordered by start time (live events are first)
      print(
          'Successfully found {} events'.format(len(odds_json['data']))
      )
      return(odds_json['data'][0])

      # Check your usage
      print('Remaining requests', odds_response.headers['x-requests-remaining'])
      print('Used requests', odds_response.headers['x-requests-used'])

@client.event
async def on_ready():
    print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if message.content.startswith('$odds'):
        odds = get_odds()
        await message.channel.send(odds)

client.run(os.getenv('TOKEN'))

标签: pythonjsondiscord

解决方案


赔率响应对象包含事件列表。您目前只返回第一个带有return(odds_json['data'][0]). (索引 0 只为您提供列表的第一个元素。)

如果你想打印所有的球队,你可以遍历事件并像这样得到每场比赛:

for event in odds_json['data']:
    print(event["teams"])

推荐阅读