ValveSoftware / Dota-2

Tracker for issues specific to Linux and Mac in the Reborn client. If you have a general issue or non-system-specific feature request please go to dev.dota2.com
463 stars 38 forks source link

WebApi - IDOTA2Match_570/GetMatchDetails returning 500 Internal Server Error after 7.36 release #2715

Open nlavalle opened 1 month ago

nlavalle commented 1 month ago

Your system information

this feels irrelevant to the issue but I'm running on fedora 39

Please describe your issue in as much detail as possible:

Describe what you expected should happen and what did happen. Please link any large pastes as a Github Gist.

I've been fetching match details for a hobby project trying to do some fantasy stuff because I really liked the TI2023 fantasy and wanted to do it for other leagues, anyway I do the /GetMatchHistory and /GetMatchDetails calls for the league ID and trying to pull DreamLeague 23 games after 7.36 I'm receiving 500 Internal Server errors, here's an example curl for a game in the last 24hr:

curl --location 'https://api.steampowered.com/IDOTA2Match_570/GetMatchDetails/v1?match_id=7754090781&key={{SteamKey}}'

The equivalent get match history works, and the last match detail I was able to pull with that previous curl format was 7750258646 which was 2 days ago so the timing feels related to the 7.36 patch.

I double checked the https://api.steampowered.com/ISteamWebAPIUtil/GetSupportedAPIList/v0001 endpoint and confirmed the GetMatchDetails is still listed there with the same parameters, but if there's a different endpoint/request I should be passing to that call now I'm happy to make the update.

mburst commented 1 month ago

+1 Same issue here since the 7.36 patch. Let me know if there is a different endpoint to switch to

adexp01 commented 1 month ago
JRybicki commented 4 weeks ago

+1 Also have this issue, can someone post if they know of a new endpoint?

LuddeFro commented 4 weeks ago

I can't see GetMatchDetails on https://api.steampowered.com/ISteamWebAPIUtil/GetSupportedAPIList/v0001. Am I missing it or has it disappeared? maybe you could confirm @nlavalle

ikonduktor commented 4 weeks ago

It doesn't work 5 days already

YatsynychRoman commented 4 weeks ago

I can't see GetMatchDetails on https://api.steampowered.com/ISteamWebAPIUtil/GetSupportedAPIList/v0001. Am I missing it or has it disappeared? maybe you could confirm @nlavalle

There is GetMatchDetails in this list, but you need to pass the API key as a query parameter for protected endpoints to show up.

b3lowster commented 4 weeks ago

Does anybody know when the API comes back? 😢

atomupgrader commented 4 weeks ago

Does anybody know when the API comes back? :(

eremenko1 commented 4 weeks ago

fix this pls

wdunlap commented 4 weeks ago

Same issue here.

yukinorong commented 3 weeks ago

same problem +1

amandladev commented 3 weeks ago

same 😢

snudel commented 3 weeks ago

same here :(

eremenko1 commented 2 weeks ago

Help

playcat commented 2 weeks ago

guys, it looks like this repo is a bit of a miss - ths is not about the web api

playcat commented 2 weeks ago

also, I've found solution here: https://github.com/ValveSoftware/Dota2-Gameplay/issues/17910 you can use GetMatchHistoryBySequenceNum - with some tweaking, it does the same. You just send make sure you know your match sequence number

atomupgrader commented 2 weeks ago

also, I've found solution here: ValveSoftware/Dota2-Gameplay#17910 you can use GetMatchHistoryBySequenceNum - with some tweaking, it does the same. You just send make sure you know your match sequence number

It is not always possible to know that number. If I parse 'GetLiveLeagueGames' or similar endpoints, I would not want to parse all matches using 'GetMatchHistoryBySequenceNum' to find the match I am interested in.

playcat commented 2 weeks ago

I have a simple updater which keeps track of games for me and my friends. It keeps our steam ids in a db, pulls most recent games for each of us, grabs details where available. It also does a bit or "merging" for games we play together.

Anyway, we first call getMatchHistory and then grab details with the problematic request. But when you get history (https://api.steampowered.com/IDOTA2Match_570/GetMatchHistory/V001/), you also get a field 'match_seq_num', which you can send to GetMatchHistoryBySequenceNum and set number of results to return to 1. Then it's just a matter of accessing the proper array element (because GetMatchHistoryBySequenceNum returns same data as GetMatchDetails, but an array of them).

# from this:   return data['result']
# to this:  return data['result']['matches'][0]
Noxville commented 1 week ago

@playcat that endpoint doesn't have all the data in it that was in GetMatchHistory. It's not a suitable replacement for all cases.

JRybicki commented 1 week ago

Replying to https://github.com/ValveSoftware/Dota-2/issues/2715#issuecomment-2158217884

This did work for me since I'm only grabbing some basic game data, sounds like we have pretty similar apps. Thanks for sharing.

iAMD1ver commented 5 days ago

Any fix?

golangman commented 3 days ago

Any fix?

Dmytro4 commented 2 days ago

Over a month with no fix. How will tournament organizers and broadcast studios track stats to show during the tournaments? Imagine having TI with no info because the API just does not work

atomupgrader commented 2 days ago

Over a month with no fix. Sure, Valve does not really care about us, but how will tournament organizers and broadcast studios track stats to show during the tournaments? Imagine having TI with no info because the API just does not work

by another labels in api that works

Dmytro4 commented 2 days ago

Over a month with no fix. Sure, Valve does not really care about us, but how will tournament organizers and broadcast studios track stats to show during the tournaments? Imagine having TI with no info because the API just does not work

by another labels in api that works

what works? You were already told that those endpoints does not have enough data and this requires to constantly tracking another endpoint in attempt to catch the needed match which means much more queries and time than simply receiving the info about match by id

atomupgrader commented 2 days ago

what works? You were already told that those endpoints does not have enough data and this requires to constantly tracking another endpoint in attempt to catch the needed match which means much more queries and time than simply receiving the info about match by id

if you grab all data by that working endpoints you needn't some narrow endpopints like one-match-data

Dmytro4 commented 2 days ago

what works? You were already told that those endpoints does not have enough data and this requires to constantly tracking another endpoint in attempt to catch the needed match which means much more queries and time than simply receiving the info about match by id

if you grab all data by that working endpoints you needn't some narrow endpopints like one-match-data

this is the key issue. Good luck collecting up to 1kk matches every day just to be able to track main data for a specific match. This also will not work for any match that will be played before you start to track matches so you will need a specific algorithm to continuously make queries with different SequenceNum until you catch a needed match

atomupgrader commented 2 days ago

Replying to https://github.com/ValveSoftware/Dota-2/issues/2715#issuecomment-2186652403

but "tournament organizers and broadcast studios" just doing it...

Noxville commented 2 days ago

@atomupgrader Tournament organizers are in lobbies, so they can just get the final snapshots from GSI to power their graphics.

nlavalle commented 1 day ago

this is the key issue. Good luck collecting up to 1kk matches every day just to be able to track main data for a specific match. This also will not work for any match that will be played before you start to track matches so you will need a specific algorithm to continuously make queries with different SequenceNum until you catch a needed match

I'm not sure I'm fully following you, but if you use the /GetMatchHistory endpoint you can request a specific match ID with start_at_match_id={{matchId}}&matches_requested=1, then that response gives you a match_seq_num that you can pass into the GetMatchHistoryBySeqNum to get the match details for that ID

more generally I don't know valve's situation but my guess is their backlog of things to fix before TI is huge with facet interactions. an exploit in some in-game interaction will significantly impact the TI experience more than this endpoint being down, so my personal expectation is this might not get fixed until after TI because it's flagged as lower priority on some giant ticket board they have

Noxville commented 1 day ago

@nlavalle the GetMatchHistoryBySeqNum is more heavily rate-limited than the other endpoints (1 per 7 seconds) so you're really limited in your ability to get data this way (~12k matches a day if you're only getting 1 match per request).

Your only alternative is just to keep up with the sequence, which in itself is very difficult to do on a single IP address.

nlavalle commented 1 day ago

oh wow that's painful, I didn't realize, my apologies

Simon1093 commented 1 day ago

At first I was thinking that Valve are extending data for GetMatchDetails endpoint, but now I realized that they just broke this endpoint and forgot about it =0