Difference between revisions of "Talk:WebAPI/Feedback"

From Team Fortress Wiki
Jump to: navigation, search
(Things that should be added to the next version of GetSchema)
m (Undo edit by Callbackfunction (Talk) (1780109) I'm just gonna restore this back to how it was.)
 
(191 intermediate revisions by 31 users not shown)
Line 1: Line 1:
== Suggestions ==
+
{{ambox|type=notice-2|image=Pictogram_info.png|contents=Please use this page for reporting and discussing possible issues or inconsistencies with the API documentation or API itself. This is not for learning how to properly use one.}}
=== Things that should be fixed in the Steam Web API system ===
+
{{Archive list|archives = [[/Archive 1|1]] [[/Archive 2|2]] [[/Archive 3|3]]}}
*JSON and VDF should use arrays rather than objects containing arrays. Having them structured differently from XML complicates code unnecessarily (and result.items.item[1] is redundant compared to results.items[1]). This seems to have been designed to preserve the element name used for the individual objects in XML (allowing multiple arrays to be defined in the event of mixed types, which should be structured as multiple arrays in XML as well). When everything in an array is of the same class, nobody in JSON cares about that class's name (only its index in the containing array, and anybody using VDF is using code that was written for the original data file, which ''is'' structured this way.
 
  
Short version: this
+
[[Category:WebAPI|Feedback]]
  
  "result": {
+
== Dota 2 — item rarity ==
    "status": 1,
+
Can you add item '''rarity''' (not '''quality''') to the ''GetSchema API'' call? It`s very strange to not present rarity here. There is only quality now, but it is useless for Dota 2. --[[User:Ohar|Ohar]] ([[User talk:Ohar|talk]]) 03:52, 30 October 2013 (PDT)
    "items": {
 
      "item": [
 
        {
 
          "id": 18446744073709019323,
 
          "defindex": 125,
 
          "level": 1,
 
          "quality": 3,
 
          "inventory": 2149580806,
 
          "quantity": 1
 
        },
 
        {
 
          "id": 1029705,
 
          "defindex": 36,
 
          "level": 5,
 
          "quality": 3,
 
          "inventory": 2147483655,
 
          "quantity": 1
 
        },
 
      ]
 
    }
 
  }
 
  
should look like this:
+
== Improperly formed JSON float_values for decal attributes - still not resolved ==
  
  "result": {
+
http://wiki.teamfortress.com/wiki/Talk:WebAPI/Feedback/Archive_3 has the previous thread. I'm still receiving the improperly formed JSON :( Just FYI - thanks! [[User:VMDX|VMDX]] 14:37, 21 November 2011 (PST)
    "status": 1,
+
: Alright I've been on the lookout for this regression on my own logs for optf2 and asking around. I cannot find any reproductions. Care to give an id64 that exhibits this problem? -- [[User:Lagg|Lagg]] [[File:Backpack_Stickybomb_Launcher.png|24px|link=User_talk:Lagg]] 22:05, 30 November 2011 (PST)
    "items": [
 
      {
 
        "id": 18446744073709019323,
 
        "defindex": 125,
 
        "level": 1,
 
        "quality": 3,
 
        "inventory": 2149580806,
 
        "quantity": 1
 
      },
 
      {
 
        "id": 1029705,
 
        "defindex": 36,
 
        "level": 5,
 
        "quality": 3,
 
        "inventory": 2147483655,
 
        "quantity": 1
 
      },
 
    ]
 
  }
 
  
--[[User:STUART|STUART]] 04:23, 5 July 2010 (UTC)
+
::  ex: in 76561198005981351 : "attributes": [ { "defindex": 152, "value": 1879034420, "float_value": 158326252166124510000000000000. }, { "defindex": 227, "value": 117757579, "foat_value": 0.000000 } ]
 +
:: Some json decoders break because the number doesn't have the 0 after the dot.  I don't see this happen in PHP but I've heard others having this problem [[User:Ruiner|Ruiner]] 21:02, 22 April 2012 (PDT)
 +
::: [https://plus.google.com/b/107947934768801101757/107947934768801101757/posts/ESL2ibu3VDR Yep I've spoken to an employee about it and they said they'll look into it tomorrow. Apologies for not noting this on the talk page sooner.] -- [[User:Lagg|Lagg]] [[File:Backpack_Stickybomb_Launcher.png|24px|link=User_talk:Lagg]] 21:15, 22 April 2012 (PDT)
  
===Methods that should be added to ITFItems_440===
+
== Painted items ==
*A method that returns all of a language's strings for a given language (like resource/tf_english.txt). This would allow simpler caching of GetSchema with regards to translation (clients would only need 1 GetSchema return for all languages, and could request each language individually without needing to get all of the schema data again, increasing the signal:noise ratio significantly for translation). --[[User:STUART|STUART]] 04:22, 5 July 2010 (UTC)
 
*A method that returns the latest revision information for each of these, so systems know when they need to make the heavy call to GetSchema and other static methods. --[[User:STUART|STUART]] 04:22, 5 July 2010 (UTC)
 
  
===Things that should be added to the next version of GetSchema===
+
I noticed that the steam community inventory viewer has images with paints embedded in them. Would it be possible for the backpack items to include the encoded URL for the image with paint.
*The revision number, so systems can compare it (for stored data) against the latest revision (as described above). --[[User:STUART|STUART]] 04:22, 5 July 2010 (UTC)
+
ex: [http://cdn.steamcommunity.com/economy/image/HZzrHVtyDPzKTe4tK5JD9aXQIawfAgKiD4I1O4JoElrAlMX9DCVb5GOV9N8PsxFmtIshuhcCEqEajjoi3DFGA9HJza8Ue0jiaoeliFD7F2aqmTy_SkNe_guGJjeSbgtS6pLN_SpnWflp37-MVbhKaf3FZL4dHBXmT4JmYtQ1SAeDnJztTTMLsm_cqd5U60sz-5Zs8lVDSg==/96fx96f with paint] -- [[User:Ruiner|Ruiner]] 07:13, 25 February 2012 (PST)
*The defindex of attributes for items, rather than the attribute's name and class. If GetPlayerInventory uses defindex for its attributes, GetSchema should too. --[[User:STUART|STUART]] 04:22, 5 July 2010 (UTC)
 
*Add missing fields used_by_classes and craft_class [[User:FireSlash|FireSlash]] 16:17, 5 July 2010 (UTC)
 
  
===Things that should change in future versions of GetPlayerInventory===
+
== custom texture lo - Invalid JSON ==
*Ditch the "quantity" field. With a unique ID on the item, how can this be anything but 1? --[[User:STUART|STUART]] 04:22, 5 July 2010 (UTC)
 
*Separate the "inventory" field into an "inventory_slot" value and "equipped" object (with a "true" for each class the item is equipped for, and empty if no classes have the item equipped). This is a Web API: consumers shouldn't have to do binary operations to parse it. --[[User:STUART|STUART]] 04:22, 5 July 2010 (UTC)
 
  
== Problems ==
+
I had another talk with Drunken. This is the relevant part of his response on the matter. I'll be giving a language-independent workaround in a while if time permits.
I'm still seeing "TF_Unique_Achievement_FireAxe1" returned from GetSchema with language=en defined. --[[User:STUART|STUART]] 03:50, 5 July 2010 (UTC)
+
<pre>
: Indeed. It seems to do this for every achievement-unlockable weapon.--[[User:RJackson|RJackson]] 04:15, 5 July 2010 (UTC)
+
1:34 PM - Drunken F00l: I know why it's printing bad values, yes
 +
1:34 PM - Drunken F00l: it's just truncating
 +
1:35 PM - Drunken F00l: I'll get it fixed but the fix probably won't ship until next week
 +
</pre> -- [[User:Lagg|Lagg]] [[File:Backpack_Stickybomb_Launcher.png|24px|link=User_talk:Lagg]] 16:10, 23 April 2012 (PDT)
 +
 
 +
: Here is a temporary workaround for the problem, as promised. This call is for python's re module but should be similarly easy to modify as needed for basically any regex implementation out there. What the expression is doing is searching for a line with 0 or more characters of whitespace at the beginning, followed by the normal float_value key and then an arbitrary length integer followed by a decimal point and non-decimal character. The part of the string preceding the decimal point is captured and reinserted into a string suffixed with '.0'. I hope you find it useful. <code>re.sub('(\s*"float_value": -?\d+)\.[^\d]', '\\1.0', obj)</code> -- [[User:Lagg|Lagg]] [[File:Backpack_Stickybomb_Launcher.png|24px|link=User_talk:Lagg]] 21:08, 23 April 2012 (PDT)
 +
 
 +
:: Fixed a small bit of the regexp. I'll let my commit message describe what the change was since it does it best: Because apparently I thought that the bug was choosy about what side of a 0 it appears on. -- [[User:Lagg|Lagg]] [[File:Backpack_Stickybomb_Launcher.png|24px|link=User_talk:Lagg]] 08:48, 24 April 2012 (PDT)
 +
 
 +
::replace(".\n",".0\n") [[User:Base1024|base1024]] 12:35, 24 April 2012 (PDT)
 +
::: Keeping in mind that this will break on caching/minifying proxies -- [[User:Lagg|Lagg]] [[File:Backpack_Stickybomb_Launcher.png|24px|link=User_talk:Lagg]] 12:37, 24 April 2012 (PDT)
 +
 
 +
== Item Origin ==
 +
 
 +
Item origin is buggy and/or incorrect. For example, many Bill's Hats are showing as timed drop. This was a promotional item and should be marked as such. There is also an origin flag "traded", but it's not clear when that attribute is used: Traded items usually do not acquire the origin to be set as "traded". For example, store purchased keys will keep their store purchased after being traded. My suggestion would be to make the item origin cumulative. If an item was purchased, then traded, it should be possible to tell what the original origin was, as well as the current origin. This way, we can tell in a user's inventory if the item has ever been traded, or if he is the original owner.
 +
 
 +
-- [[User:Ruiner|Ruiner]] 18:48, 24 April 2012 (PDT)
 +
 
 +
== Unexpected EOT character in Chinese (zh-tw) custom item name ==
 +
 
 +
Backpack in question: 76561198038762828
 +
 
 +
 
 +
TF2B: http://tf2b.com/tf2/76561198038762828 '''FAILED'''
 +
 
 +
OPTF2: http://optf2.com/tf2/user/76561198038762828 <del>'''FAILED'''</del>  '''SUCCESS (Thanks)'''
 +
 
 +
TF2Items: http://www.tf2items.com/profiles/76561198038762828 '''SUCCESS'''
 +
 
 +
 
 +
''ValueError: Invalid control character at: line 766 column 44 (char 12881)''
 +
 
 +
http://i.imgur.com/5o6C9.png
 +
 
 +
 
 +
I hope this is the last error I find.
 +
 
 +
[[User:Base1024|base1024]] 04:51, 27 May 2012 (PDT)
 +
 
 +
== Unexpected SOH character in Russian custom item name ==
 +
 
 +
Backpack in question: 76561198045241951
 +
 
 +
 
 +
TF2B: http://tf2b.com/tf2/76561198045241951 '''FAILED'''
 +
 
 +
OPTF2: http://optf2.com/tf2/user/76561198045241951 <del>'''FAILED'''</del>  '''SUCCESS (Thanks)'''
 +
 
 +
TF2Items: http://www.tf2items.com/profiles/76561198045241951 '''SUCCESS'''
 +
 
 +
 
 +
''ValueError: Invalid control character at: line 2233 column 37 (char 39047)''
 +
 
 +
http://i.imgur.com/RKud0.png
 +
 
 +
[[User:Base1024|base1024]] 05:12, 27 May 2012 (PDT)
 +
 
 +
: Hmm, I've known about this error for some time now but it looks like I misjudged where it actually was, and thought that it was fixed in optf2 for quite a long time, as did Athernar. This also happens with some english names that have certain non-ASCII characters in them if I recall correctly. So stuff that does strict encoding will fail on it. Well, at least now that '''FAILED''' for optf2 can be turned into '''SUCCESS'''. Thanks for providing me a real reproduction. -- [[User:Lagg|Lagg]] [[File:Backpack_Stickybomb_Launcher.png|24px|link=User_talk:Lagg]] 15:48, 27 May 2012 (PDT)
 +
 
 +
== Date/Time of when the item was acquired? Also, ResolveVanityURL ==
 +
 
 +
Heres a suggestion: On each item in GetPlayerItems, it could also return the timestamp of when that item was found/bought/traded/otherwise appeared in the users' inventory.
 +
 
 +
This would allow people to check when an item was found and also could be used to make visual graphs about a users' item drops.
 +
 
 +
Also, I don't see the point behind ResolveVanityURL. Why have it as a separate method? It just means that I have to query the API twice whenever I have a vanity URL, which slows things down quite significantly (when you're from Australia with ~250ms ping to api.steampowered.com, this makes a difference.) Why not just have a separate field in most things, so you either have to supply the SteamID or the vanity URL?
 +
If thats not possible, you could also adjust ResolveVanityURL to take a list of vanity strings -- something like GetPlayerSummaries but with a list of vanity URLs instead.
 +
 
 +
my two cents [[User:Pigophone|Pigophone]] 03:04, 27 April 2013 (PDT)
 +
 
 +
: I agree with the timestamp. That would certainly be nice. As for the vanity resolver it was mostly a compromise between myself, Joe, and Athernar and possibly some other authors. For one reason or another they wouldn't write something to give vanity URLs directly to the methods. It's mostly to stop people from having to make requests to steamcommunity.com/id/whatever to get the id64s. So compared to that it's fantastic. One of the reasons gave for not just allowing the vanity url and id64 in the same parameter was ambiguity since people can make their vanity urls the same as someone's id64. Your suggestion for different parameters would work. But it'd be so much easier for them to just not allow people to do that and do the vanity resolves themselves since their database access is almost certainly going to be faster than a request. -- [[User:Lagg|Lagg]] [[File:Backpack_Stickybomb_Launcher.png|24px|link=User_talk:Lagg]] 03:55, 27 April 2013 (PDT)
 +
 
 +
== Inconsistent group IDs ==
 +
 
 +
There's a problem with retrieving group IDs via the web API. If you use <code>ISteamUser/GetUserGroupList/v1</code> to get the user's groups, each group entry contains a <code>guid</code> which is supposedly the 64-bit ID of the group. '''But''', if you call <code>ISteamUser/GetPlayerSummaries/v0002/</code> with the same user ID, the group ID you get in <code>primaryclanid</code> is marginally bigger than any other ID <code>GetUserGroupList</code> gave you. When you go and check the group's page for links that contain the ID, like the "Invite Friends" link, you see the bigger group ID is the correct one.
 +
 
 +
Basically, it looks like <code>ISteamUser/GetUserGroupList/v1</code> returns older "32-bit" Steam IDs while <code>primaryclanid</code> inside <code>ISteamUser/GetPlayerSummaries/v0002/</code>'s data appears to be a correct, 64-bit Steam ID. [[User:Smiley|Smiley]] ([[User talk:Smiley|talk]]) 16:06, 16 September 2013 (PDT)
 +
: It's not really a matter of which ID is new or old. The smaller (32 bit) ones are merely condensed versions of the 64 bit ones which for the most part have static bits. It's an optimization choice on the part of valve since naturally it saves space when sending packets (it seems silly but in practice those 4 bytes really add up when sending out UDP packets). Getting a 64 bit ID is merely a matter of taking the most significant 32 bits of a given 64 bit group ID and ORing those on to the condensed group ID (note that these might be 33 bits long, I can't remember at the moment if the group ID width can be the same as a user). -- [[User:Lagg|Lagg]] [[File:Backpack_Stickybomb_Launcher.png|24px|link=User_talk:Lagg]] 17:01, 16 September 2013 (PDT)
 +
 
 +
== Content of crates ==
 +
 
 +
Any way to get a list? The schema only stores the names. [[User:Klenium|Klenium]] ([[User talk:Klenium|talk]]) 14:35, 22 November 2013 (PST)

Latest revision as of 02:13, 14 October 2014

Dota 2 — item rarity

Can you add item rarity (not quality) to the GetSchema API call? It`s very strange to not present rarity here. There is only quality now, but it is useless for Dota 2. --Ohar (talk) 03:52, 30 October 2013 (PDT)

Improperly formed JSON float_values for decal attributes - still not resolved

http://wiki.teamfortress.com/wiki/Talk:WebAPI/Feedback/Archive_3 has the previous thread. I'm still receiving the improperly formed JSON :( Just FYI - thanks! VMDX 14:37, 21 November 2011 (PST)

Alright I've been on the lookout for this regression on my own logs for optf2 and asking around. I cannot find any reproductions. Care to give an id64 that exhibits this problem? -- Lagg Backpack Stickybomb Launcher.png 22:05, 30 November 2011 (PST)
ex: in 76561198005981351 : "attributes": [ { "defindex": 152, "value": 1879034420, "float_value": 158326252166124510000000000000. }, { "defindex": 227, "value": 117757579, "foat_value": 0.000000 } ]
Some json decoders break because the number doesn't have the 0 after the dot. I don't see this happen in PHP but I've heard others having this problem Ruiner 21:02, 22 April 2012 (PDT)
Yep I've spoken to an employee about it and they said they'll look into it tomorrow. Apologies for not noting this on the talk page sooner. -- Lagg Backpack Stickybomb Launcher.png 21:15, 22 April 2012 (PDT)

Painted items

I noticed that the steam community inventory viewer has images with paints embedded in them. Would it be possible for the backpack items to include the encoded URL for the image with paint. ex: with paint -- Ruiner 07:13, 25 February 2012 (PST)

custom texture lo - Invalid JSON

I had another talk with Drunken. This is the relevant part of his response on the matter. I'll be giving a language-independent workaround in a while if time permits.

1:34 PM - Drunken F00l: I know why it's printing bad values, yes
1:34 PM - Drunken F00l: it's just truncating
1:35 PM - Drunken F00l: I'll get it fixed but the fix probably won't ship until next week

-- Lagg Backpack Stickybomb Launcher.png 16:10, 23 April 2012 (PDT)

Here is a temporary workaround for the problem, as promised. This call is for python's re module but should be similarly easy to modify as needed for basically any regex implementation out there. What the expression is doing is searching for a line with 0 or more characters of whitespace at the beginning, followed by the normal float_value key and then an arbitrary length integer followed by a decimal point and non-decimal character. The part of the string preceding the decimal point is captured and reinserted into a string suffixed with '.0'. I hope you find it useful. re.sub('(\s*"float_value": -?\d+)\.[^\d]', '\\1.0', obj) -- Lagg Backpack Stickybomb Launcher.png 21:08, 23 April 2012 (PDT)
Fixed a small bit of the regexp. I'll let my commit message describe what the change was since it does it best: Because apparently I thought that the bug was choosy about what side of a 0 it appears on. -- Lagg Backpack Stickybomb Launcher.png 08:48, 24 April 2012 (PDT)
replace(".\n",".0\n") base1024 12:35, 24 April 2012 (PDT)
Keeping in mind that this will break on caching/minifying proxies -- Lagg Backpack Stickybomb Launcher.png 12:37, 24 April 2012 (PDT)

Item Origin

Item origin is buggy and/or incorrect. For example, many Bill's Hats are showing as timed drop. This was a promotional item and should be marked as such. There is also an origin flag "traded", but it's not clear when that attribute is used: Traded items usually do not acquire the origin to be set as "traded". For example, store purchased keys will keep their store purchased after being traded. My suggestion would be to make the item origin cumulative. If an item was purchased, then traded, it should be possible to tell what the original origin was, as well as the current origin. This way, we can tell in a user's inventory if the item has ever been traded, or if he is the original owner.

-- Ruiner 18:48, 24 April 2012 (PDT)

Unexpected EOT character in Chinese (zh-tw) custom item name

Backpack in question: 76561198038762828


TF2B: http://tf2b.com/tf2/76561198038762828 FAILED

OPTF2: http://optf2.com/tf2/user/76561198038762828 FAILED SUCCESS (Thanks)

TF2Items: http://www.tf2items.com/profiles/76561198038762828 SUCCESS


ValueError: Invalid control character at: line 766 column 44 (char 12881)

5o6C9.png


I hope this is the last error I find.

base1024 04:51, 27 May 2012 (PDT)

Unexpected SOH character in Russian custom item name

Backpack in question: 76561198045241951


TF2B: http://tf2b.com/tf2/76561198045241951 FAILED

OPTF2: http://optf2.com/tf2/user/76561198045241951 FAILED SUCCESS (Thanks)

TF2Items: http://www.tf2items.com/profiles/76561198045241951 SUCCESS


ValueError: Invalid control character at: line 2233 column 37 (char 39047)

RKud0.png

base1024 05:12, 27 May 2012 (PDT)

Hmm, I've known about this error for some time now but it looks like I misjudged where it actually was, and thought that it was fixed in optf2 for quite a long time, as did Athernar. This also happens with some english names that have certain non-ASCII characters in them if I recall correctly. So stuff that does strict encoding will fail on it. Well, at least now that FAILED for optf2 can be turned into SUCCESS. Thanks for providing me a real reproduction. -- Lagg Backpack Stickybomb Launcher.png 15:48, 27 May 2012 (PDT)

Date/Time of when the item was acquired? Also, ResolveVanityURL

Heres a suggestion: On each item in GetPlayerItems, it could also return the timestamp of when that item was found/bought/traded/otherwise appeared in the users' inventory.

This would allow people to check when an item was found and also could be used to make visual graphs about a users' item drops.

Also, I don't see the point behind ResolveVanityURL. Why have it as a separate method? It just means that I have to query the API twice whenever I have a vanity URL, which slows things down quite significantly (when you're from Australia with ~250ms ping to api.steampowered.com, this makes a difference.) Why not just have a separate field in most things, so you either have to supply the SteamID or the vanity URL? If thats not possible, you could also adjust ResolveVanityURL to take a list of vanity strings -- something like GetPlayerSummaries but with a list of vanity URLs instead.

my two cents Pigophone 03:04, 27 April 2013 (PDT)

I agree with the timestamp. That would certainly be nice. As for the vanity resolver it was mostly a compromise between myself, Joe, and Athernar and possibly some other authors. For one reason or another they wouldn't write something to give vanity URLs directly to the methods. It's mostly to stop people from having to make requests to steamcommunity.com/id/whatever to get the id64s. So compared to that it's fantastic. One of the reasons gave for not just allowing the vanity url and id64 in the same parameter was ambiguity since people can make their vanity urls the same as someone's id64. Your suggestion for different parameters would work. But it'd be so much easier for them to just not allow people to do that and do the vanity resolves themselves since their database access is almost certainly going to be faster than a request. -- Lagg Backpack Stickybomb Launcher.png 03:55, 27 April 2013 (PDT)

Inconsistent group IDs

There's a problem with retrieving group IDs via the web API. If you use ISteamUser/GetUserGroupList/v1 to get the user's groups, each group entry contains a guid which is supposedly the 64-bit ID of the group. But, if you call ISteamUser/GetPlayerSummaries/v0002/ with the same user ID, the group ID you get in primaryclanid is marginally bigger than any other ID GetUserGroupList gave you. When you go and check the group's page for links that contain the ID, like the "Invite Friends" link, you see the bigger group ID is the correct one.

Basically, it looks like ISteamUser/GetUserGroupList/v1 returns older "32-bit" Steam IDs while primaryclanid inside ISteamUser/GetPlayerSummaries/v0002/'s data appears to be a correct, 64-bit Steam ID. Smiley (talk) 16:06, 16 September 2013 (PDT)

It's not really a matter of which ID is new or old. The smaller (32 bit) ones are merely condensed versions of the 64 bit ones which for the most part have static bits. It's an optimization choice on the part of valve since naturally it saves space when sending packets (it seems silly but in practice those 4 bytes really add up when sending out UDP packets). Getting a 64 bit ID is merely a matter of taking the most significant 32 bits of a given 64 bit group ID and ORing those on to the condensed group ID (note that these might be 33 bits long, I can't remember at the moment if the group ID width can be the same as a user). -- Lagg Backpack Stickybomb Launcher.png 17:01, 16 September 2013 (PDT)

Content of crates

Any way to get a list? The schema only stores the names. Klenium (talk) 14:35, 22 November 2013 (PST)