【问题标题】:Parsing JSON output for Discord Bot in Python [closed]在 Python 中解析 Discord Bot 的 JSON 输出 [关闭]
【发布时间】:2021-08-18 05:43:13
【问题描述】:

总结 我目前正在将 JSON 数组的第一个对象转储到 Discord 中,但我只想要一部分数据,特别是 teams。我认为我需要编辑第 50 行 return(odds_json['data'][0]),有人可以帮我提取这段特定的数据吗?

这里说转储:

{'id': '19c709db17e33a20f7c88af1a119cef1', 'sport_key': 'basketball_nba', 'sport_nice': 'NBA', 'teams': ['Atlanta Hawks', 'New York Knicks'], 'commence_time': 1622394647 , 'home_team': '亚特兰大老鹰队', 'sites': [{'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,'赔率':{'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': 'b etfair, 'site_nice': 'Betfair', 'last_update': 1622399405, '赔率': {'h2h': [-500, 470], 'h2h_lay': [-476, 500]}}, {'site_key' : 'pointsbetus', 'site_nice': 'PointsBet (US)', 'last_update': 1622399407, '赔率': {'h2h': [-620, 410]}}, {'site_key': 'williamhill_us', ' site_nice': 'William Hill (US)', 'last_update': 1622399389, '赔率': {'h2h': [-650, 450]}}, {'site_key': 'foxbet', 'site_nice': 'FOX赌注', '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,'赔率':{'h2h': [-455, 320]}}, {'site_key': 'bovada', 'site_nice': 'Bovada', 'last_update': 1622399102, '赔率': {'h2h': [120, -160]}}, {'site_key': 'mybookieag', 'site_nice': 'MyBookie.ag', 'last_update': 1622399393, 'odds': {'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'))

【问题讨论】:

  • 您可以删除您的问题,然后在准备好后取消删除
  • 顺便说一句,欢迎来到 Stack Overflow!如果需要提示,请查看tourHow to Ask
  • @snakeowens,欢迎来到 SO,如果您已经在这方面尝试过,请举例说明您需要什么部分以及任何代码示例
  • 我刚刚用代码和示例更新了问题,抱歉我最初发布时遇到了问题。
  • @wjandrea,必须让它发布才能编辑它或等待 90 分钟重新发布一个新的 q,所以我只是现场编辑!

标签: python json discord


【解决方案1】:

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

如果您想打印所有球队,您可以循环访问事件并像这样获得每场比赛:

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

【讨论】:

  • 谢谢比尔!这让我朝着正确的方向前进。我现在得到了团队,但仍然只在我使用return(event["teams"]) 时参加第一个活动。当我使用 print 时,我确实在解释器中看到了所有事件,所以它正在工作,我现在只需要让它与 Discord 一起玩得很好。再次感谢!
  • @snakeowens 不客气。如果您需要返回所有团队,那么您需要将它们添加到另一个列表(或其他数据结构)并返回。这仅取决于您接下来要对它们做什么。祝你好运!
猜你喜欢
  • 2019-02-03
  • 2020-12-15
  • 2018-10-16
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 2019-05-18
  • 2018-10-18
  • 2014-01-30
相关资源
最近更新 更多