Talk:WebAPI/Feedback

From Team Fortress Wiki
< Talk:WebAPI
Revision as of 22:20, 15 November 2010 by Joe (talk | contribs) (List of Problematic Attributes)
Jump to: navigation, search

Suggestions

Things that should be fixed in the Steam Web API system

  • 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

 "result": {
   "status": 1,
   "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:

 "result": {
   "status": 1,
   "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
     },
   ]
 }

--STUART 04:23, 5 July 2010 (UTC)

Methods that should be added to ITFItems_440

  • 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). --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. --STUART 04:22, 5 July 2010 (UTC)
  • A method that returns inventory images, or links to images. Currently the biggest hurdle of an update is digging all of the new data out of the tf2 gcfs. The three files at the moment are: items_game (partially covered by the GetSchema), tf_<lang> (Partially covered by GetSchema), and the backpack images (No solution). The images are also the most time consuming part. FireSlash 17:02, 5 July 2010 (UTC)
Biggest hurdle? Extract tf/materials/backpack and run it through VTFEdit's batch converter. Netshroud 23:27, 5 July 2010 (UTC)
As far as time consumption yes, since I also need tor resize and recompress images. items_game and tf_english are just a matter of extracting and uploading each file. Where in the images I have to sort through all the images in the gcf, dig out the new ones, extract convert resize and upload. If the images were available online, I could automate the process. FireSlash 00:58, 6 July 2010 (UTC)

Things that should be added to the next version of GetSchema

  • The revision number, so systems can compare it (for stored data) against the latest revision (as described above). --STUART 04:22, 5 July 2010 (UTC)
  • The defindex of attributes for items, rather than the attribute's name and class. If GetPlayerInventory uses defindex for its attributes, GetSchema should too. --STUART 04:22, 5 July 2010 (UTC)
  • Add missing fields used_by_classes and craft_class FireSlash 16:17, 5 July 2010 (UTC)
  • Add field propername to allow for simple construction of item name. i.e "A <Community> __" vs "The __", and "The Hound Dog" vs "Hound Dog". Ath 14:27, 12 August 2010 (UTC)
  • Descriptions for the items would be very much appreciated. Netham45 18:39, 10 October 2010 (UTC)

Things that should change in future versions of GetPlayerInventory

  • Ditch the "quantity" field. With a unique ID on the item, how can this be anything but 1? --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. --STUART 04:22, 5 July 2010 (UTC)
  • Add a "timestamp" field, similar to the GetGoldenWrenches method. This would be useful for statistics and curiosity of users. --AltPluzF4 11:44, 10 July 2010 (UTC)

Alternative WebAPI profile query methods

  • Allow developers to pass a vanity URL "ID" as an arguement to the WebAPI or more easily convert a vanity URL to a SteamID64. The Steam Community XML feed breaks easily and does not properly sanitise community-side user input. (I.e. Non-UTF8 characters present in feed) Ath 23:18, 10 August 2010 (UTC)
One thing you could do until this happens is just search for the tag without passing it to a full parser. It's less lines of code and works regardless of encoding on the rest of the page. This is what I do in steamodd, and this way you only have to rely on the tag name not changing. Lagg 10:35, 11 August 2010 (UTC)
I make use of other parts of the XML too (May as well if I have to fetch it anyway :( ), so passing it to PHP's SimpleXML lib (through utf8_encode first) is simple and effective enough I find. Thanks for the suggestion though. Ath 14:27, 11 August 2010 (UTC)

Use these on the wiki?

Surely there must be a way to use these, they seem very cool. Namely the News and Percentage of achievements. Anyone able to figure out a way? -- Smashman... (ts) 11:57, 2 July 2010 (UTC)

Way ahead of you. Jeff has a list of things he would like to try, and he added WebAPI integration just for me! :D -- Pilk (talk) 23:10, 2 July 2010 (UTC)

Numbered Gibus?

Not sure if this is a bug or not, but were the 10,000 Gibus's that were given away during the Halloween update numbered? I thought they were, but their numbers have never been included in the API. --Pc Madness 18:35, 18 August 2010 (UTC)

No, the only number they have is the serial number found in all non-common items. Lagg 01:45, 19 August 2010 (UTC)

Problems

GetSchema

I'm still seeing "TF_Unique_Achievement_FireAxe1" returned from GetSchema with language=en defined. --STUART 03:50, 5 July 2010 (UTC)

Indeed. It seems to do this for every achievement-unlockable weapon.--RJackson 04:15, 5 July 2010 (UTC)
You can use the information files tf2_<language>.txt to pull the names of the items based on the name provided. e.g. TF_Unique_Achievement_Shield in tf2_english.txt = "The Chargin' Targe". Not a perfect system, but it will give you the in-game names. These files are in orangebox/tf/resource (from the directory in which the 'steam' binary is located). I agree though, bit of a pain in some ways to have to use local data, but as I said, it ensures consistency between in-game and what you see outside of it if you do it that way Swixel 01:15, 9 July 2010 (UTC)
item_name now seems to be assigned the correct localised string, however "The" is excluded as well as the propername attribute. The addition of the propername attribute in the schema feed or just straight up prefixing "The" to the relevant names should solve the problem, propername is preferred however. Ath 21:27, 26 July 2010 (UTC)
This also happens with at least 1 attribute (#Attrib_Scattergun_NoReloadSingle) Lagg 23:14, 15 July 2010 (UTC)

The Dalokohs Bar buff attribute and Crit-o-Cola minicrit attribute have the same description token. Lagg 23:14, 15 July 2010 (UTC)

"referenced id item low" and "referenced id item high" don't have description_string set. -- Lagg Backpack Stickybomb Launcher.png 12:38, 31 October 2010 (UTC)

Despite it being easy enough to use "Hat" when printing the item_type_name for non-misc. headwear, I think we should have a string for TF_Wearable_Hat to be consistent. Lagg 03:02, 23 July 2010 (UTC)

If its not to much trouble, could we get minilevel added back to GetSchema? If you're trying to display items on pages other than showing someones backpack (eg debug pages, crafting), you're forced to show them all as Level 1's. --Pc Madness 17:31, 7 November 2010 (UTC)

GetGoldenWrenches

What appears to be Wrench #74 (itemID 103444671, has a timestamp between #73 and #75) is listed with a "wrenchNumber" value of 76. --STUART 21:54, 8 July 2010 (UTC)

When using Yahoo Pipes to access the Wrench Info it displays all steam ids as 0 --ILOVEPIE 03:18, 19 August 2010 (UTC)

Image assets

Is Valve providing hosting for backpack image files anywhere? Or, if not, is anyone aware of a script for the extraction of image_inventory VTFs and conversion to PNG? Since this is a web API, I'm not sure how image_inventory is expected to be used without the image assets available. Maqr 16:06, 11 July 2010 (UTC)

I don't think they're available, no. It would be nice if they were. Usually I extract the VTF's from the GCF and then convert to PNG with a Photoshop plugin.--RJackson 16:08, 11 July 2010 (UTC)
Fair enough. What plugin are you using and do you have it batched in some way? It'd be great if someone put together a downloadable archive with image names that matched image_inventory results. Also, do you think there are licensing issues with doing this? I'm not sure how strict Valve is. Maqr 16:47, 11 July 2010 (UTC) edit: Nevermind, VTFEdit will convert entire folders :) Maqr 19:20, 11 July 2010 (UTC)
I made a backpack viewer iPhone app (currently awaiting approval), but I just used VTFEdit's batch convert feature, then a small shell script to recursively rename *_large.png to *@2x.png
They are not available anywhere at the moment. I hope to change that someday. Until then, feel free to use the images from the GCF in any way permitted by the Steam Web API Terms of Use. Joe 01:34, 21 July 2010 (UTC)
Backpack images for all items are now available. See the image_url and image_url_large fields in GetSchema. Joe 21:13, 30 July 2010 (UTC)
Nice! Thanks Joe. -- Smashman... (ts) 21:36, 30 July 2010 (UTC)
We really need to develop a plugin for this wiki that'll get the information from the API. That'd be most handy. -- Smashman... (ts) 21:37, 30 July 2010 (UTC)
Joe, could you please fix the transparency on the _large images for Scrap Meta, Refined Metal and Reclaimed Metal? Thanks. Netshroud 02:24, 1 August 2010 (UTC)
Same problem with the Texas Slim's Dome Shine images, but the Scrap Metal ones appear to be fine. Lagg 21:30, 2 August 2010 (UTC)
The large images for refined and reclaimed metal are fixed. I'll try to get the hatless images fixed tomorrow. Joe 02:09, 3 August 2010 (UTC)
The nohat images for scout, sniper, and engineer are fixed now too. Just leave a note here if you see any more backpack images with problems. Joe 21:56, 4 August 2010 (UTC)
Thanks Joe Lagg 06:39, 5 August 2010 (UTC)
A couple more things: CheatDetectedMinor and CheatDetectedMajor have bogus image URLs, and http://media.steampowered.com/apps/440/icons/c_syringegun_large.png 404s. Netshroud 08:39, 12 August 2010 (UTC)
I wonder what should be set for pseudo-items like that in the future. Perhaps a transparent PNG? Removing the key altogether might break some code. Lagg 18:54, 12 August 2010 (UTC)

Looks like the URL for the Lumbricus Lid is bad. Lagg 20:39, 26 August 2010 (UTC)

Joe, any chance we could get the Lumbricus Lid, CheatDetectedMinor, CheatDetectedMajor and and http://media.steampowered.com/apps/440/icons/c_syringegun_large.png fixed? Netshroud 02:46, 26 September 2010 (UTC)

URL for Rimmed Raincatcher (http://media.steampowered.com/apps/440//icons/drinking_hat.png) appears to be broken.--Geit 07:55, 2 October 2010 (UTC)

Fixed Lagg 21:51, 15 October 2010 (UTC)

Ambassador, Lugermorph, Sydney Sleeper, Scottish Resistance, Eyelander, and Big Kill Names Are Wrong

The Ambassador's localized name appears in the schema as "The Ambassador" rather than "Ambassador". Lagg 18:48, 28 August 2010 (UTC)

It's that way for a lot of weapons, but we always remove the "The" from names — Wind 20:40, 28 August 2010 (UTC)
Er, if by "a lot" you mean just the Ambassador, Lugermorph, and Big Kill then yes it's that way for a lot of them. I think you're misunderstanding the problem though. Look at the "item_name" values in the schema and you'll see why it's wrong. Deciding whether to prefix "The", "Community", "Developer", etc. is something that should be left for the code using the API to decide. Updated the section name to reflect the other two weapons (just discovered these were wrong too). Lagg 00:42, 29 August 2010 (UTC)

proper_name is progress, but all 4 of these are still wrong. proper_name should be false for these. Lagg 00:37, 7 October 2010 (UTC)

proper_name should be set to true for these items, the additional "The" present for these items in item_name however should be stripped out. I brought the lack of proper_name/propername to Robin's attention so I'll send him a follow-up email regarding these items and see what happens. Ath 01:26, 7 October 2010 (UTC)
It is set to true, but if the extra "The " is there it should be false. I didn't think this required an explanation. Lagg 01:34, 7 October 2010 (UTC)
This also seems to be the case with the Eyelander and Scottish Resistance. Lagg 01:57, 7 October 2010 (UTC)
The "The" prefix should be stripped from item_name and proper_name retained at a value of true. That's the entire point of proper_name, so the end-developer can just prepend the correct prefix rather than strip/replacing "The" for "A" as an example. I didn't think this required an explanation. Ath 02:03, 7 October 2010 (UTC)
So you would rather it be true and have "The " in it? I don't see your reasoning. Obviously "The " needs to be removed from the names but I was operating under the assumption Valve wouldn't change the names. They haven't since I first mentioned this more than a month ago after all. Lagg 02:08, 7 October 2010 (UTC)
I'd rather the items in question stick to the convention like all the others do in both the WebAPI and tf_english/items_game. tf_english does not have "The" present in it's definition for #TF_Unique_Achievement_StickyLauncher, so I don't see why it should be any different in the WebAPI. Ath 02:14, 7 October 2010 (UTC)
So would I, and no it doesn't. I'm simply assuming that the names might not get changed (which isn't an unreasonable assumption). I too prefer the saner fix, don't get me wrong. Lagg 02:21, 7 October 2010 (UTC)
So if you're simply assuming that they won't change the names (Which I agree could be viewed as a change beyond the purview of the current API version), why didn't you just say that to begin with? We could've avoided this messy arguement. Regardless, let us cease this discussion or take it elsewhere lest this get out of hand. Ath 02:31, 7 October 2010 (UTC)

Abandoned Syringe Gun Images

The abandoned syringe gun's (index 33 in the schema) small image is 256x256 when it should be 128x128 like all the other images. The large image is 404. Also, all 3 of the abandoned medic weapons have a quality of 255. Not sure if this is intentional but as it is it's a bug because there's no matching ID in the quality name objects. Lagg 11:54, 25 September 2010 (UTC)

Looks like Valve removed these from the schema during the Polycount Update. I approve. Lagg 01:14, 4 October 2010 (UTC)

Polycount Update Bugs

The attribute "set item tint RGB" which is for the Paint cans is missing a hidden property. They're in the items_games.txt, but not in the feed. I think "cannot trade" (153) and "attach particle effect" (134) have the same problem. :) Pc Madness 17:09, 2 October 2010 (UTC)


Also, whats the correct way of converting the Steam ID's for Gifts into a profile ID? I know that you're supposed use them to create a "STEAM_0:" number but I'm not sure how you're supposed to tell if a 0 or 1 should follow after the first 0. --Pc Madness 18:09, 2 October 2010 (UTC)

This is what I managed to work out based on the existing functions and the format in which the SteamID was provided by the WebAPI http://pastebin.com/aac6cayD - Basically, Id's that are even are :0: (id/2), Id's that aren't are :1: ( (id-1)/2 ) Geit 23:00, 2 October 2010 (UTC)
What value is given that then needs to be converted into a string? If it's the 64-bit SteamID, then that's well documented - see http://developer.valvesoftware.com/wiki/SteamID#Steam_ID_as_a_Steam_Community_ID Netshroud 10:56, 4 October 2010 (UTC)
It's not a 64 Bit Steam ID, it's the final numerical part of the 32 bit SteamID*2 and if it's from auth server 1 then +1--Geit 19:41, 5 October 2010 (UTC)
So the 64-bit SteamID is just '<value> + 76561197960265728LLU'? "Add 1197960265728 to this value and prefix it with 7656 for a 64 bit Steam Community ID" sounds like it was written by someone who doesn't know about 64-bit unsigned integers. Netshroud 22:28, 5 October 2010 (UTC)
Eh? I wrote it assuming the reader would know that "prefix" means concatenate "7656" and the string representation of the value added to the magic number, of course you do seem to be the only one having trouble with it. There's also example code for this in optf2. Lagg 22:36, 5 October 2010 (UTC)
I'm partly having trouble with it because I can't find a test backpack that has an item with this attribute. Why though would you concatenate and store a string for a numeric identifier? If you're adding a number to it, why add and prefix instead of just adding a larger number? The way you wrote it has left me utterly confused. Netshroud 22:43, 5 October 2010 (UTC)
Because it's more efficient. There are no API calls or anything that uses the community ID in fact that needs it as an integer. It's also easier if your code is running on platforms that might have a different endianness and in all cases you will be converting it to a string anyway. It's also cleaner code wise to concatenate the two string representations. Here is a user that has a gift item. Lagg 22:51, 5 October 2010 (UTC)

The attributes "duel loser account id" and "gifter account id" have no localised description string. Netshroud 10:56, 4 October 2010 (UTC)

Missing descriptions?

I'm looking through the Schema, and it provides negative attribute descriptions and positive attribute descriptions. I don't see neutral attribute descriptions, or item descriptions(such as the Holy Mackerel's 'Getting hit by a fish has got to be humiliating').

Do I -NEED- to have it parse the items file? Does VALVe host an items file anywhere? Or, am I just missing something with the schema?

Netham45 19:56, 9 October 2010 (UTC)

No you're not missing anything. Valve hasn't provided any description strings yet. Lagg 21:05, 9 October 2010 (UTC)
Okay, Do you know if they have any plans on supporting them? Netham45 23:16, 9 October 2010 (UTC)
Something will more than likely be added eventually, but no one from Valve has said anything about it as far as I know. Lagg 23:18, 9 October 2010 (UTC)
Okay, thanks. Also, do you know if there's separate pictures for the paint cans anywhere? Netham45 01:46, 10 October 2010 (UTC)
Unfortunately there aren't any provided by the API right now, but now that we have usable tuples for tint attributes you could generate links to the ones here on the wiki. Lagg 01:48, 10 October 2010 (UTC)
Okay. Do you know who I could contact at VALVe? I just want to know if it's worth it to work around the lack of strings, I don't want to do that just to have it obsolete in a week. Netham45 09:18, 10 October 2010 (UTC)
With Valve's pace it almost certainly won't be in a week. The "official" API guy is Joe but he hasn't been around for a while. Robin may also do something if he gets around to reading the mails. Lagg 09:22, 10 October 2010 (UTC)
This seems to be a bug, but custom names aren't escaped, I'm having my site fail when a custom name has a ' or a " in it. Netham45 05:39, 12 October 2010 (UTC)
Edit: Looks like a bug in my code, not in the API. Nevermind. Netham45 05:40, 12 October 2010 (UTC)

This is particularly important to have exposed in the API now that we have description tags and hat descriptions. -- Lagg Backpack Stickybomb Launcher.png 12:25, 31 October 2010 (UTC)

The <weapon>

In what cases is "The" inserted before the weapon name? My understanding was all Unique (achievement) unlocks have this, but there are the odd few like Natascha which don't. And Hats/Misc. Netshroud 02:38, 21 July 2010 (UTC)

Usually you would want to use item_name instead, I believe name is something specific to the game client. If the localization wasn't broken you would normally check the quality of the item and if it was unique you would prefix "The " to item_name. Lagg 21:30, 21 July 2010 (UTC)
I am using item_name. Netshroud 00:04, 22 July 2010 (UTC)
Are you sure? Unless you're reading tf_english.txt there's currently no way to get the localized item name, if you are reading tf_english.txt instead of using the first block of names use the second block(which have "The" or lack of it already prefixed). If the quality for an item is unique, see if it exists in the second block, if it does use that string, if not use your own prefix. So for example I iterate through Robin's inventory, I hit an entry for natascha, I see if the quality is unique, I find the second "TF_Unique_Achievement_Minigun" in tf_english.txt, take it's definition and use that, if I don't find it (or the quality is not unique) I take the "TF_Unique_Achievement_Minigun" from the first block and write my own prefix. Lagg 16:25, 22 July 2010 (UTC)
append &language=en to your GetSchema call. You get localised names. That's what I'm now using. Netshroud 23:51, 22 July 2010 (UTC)
WOAH, Someone fixed the localizer! Thanks User:Joe! Correction, the localizer /was/ broken. In that case, what I said still applies if you want it exactly like the ingame viewer (don't pass a language and use the tokens with tf_english.txt's second block) Lagg 00:23, 23 July 2010 (UTC)
That defeats the point. I'm trying to break reliance on tf_english.txt. Netshroud 00:26, 23 July 2010 (UTC)
True, but it's the only way so far without hardcoding anything. Personally I don't think it's that bad, and there are only a few items that don't use "The ". Lagg 00:29, 23 July 2010 (UTC)
I'm hardcoding Natascha, Jarate, and Crit-A-Cola in to not get prefixed with "The" (via defindex). There's got to be a better way though. Netshroud 01:31, 23 July 2010 (UTC)
I'd settle for Valve using more consistent names, but as it is I'm not sure much can be done about it. Without the current system we'd have stuff like "Community The Kritzkrieg" again. One option would be to add a special attribute for items that shouldn't be emphasized as unique. We already have an attribute or two that isn't meant to be printed unmodified ("attach particle effect" for example). Maybe something like "unemphasized unique weapon", and we can easily handle it appropriately. That's the only non-breaking way that makes sense really. I have to admit though, prefixing "The " to everything unique even if it doesn't make sense grammatically sure brings me back, and I think whoever did it that way at Valve felt the same way. e.g. seeing loot called "Legendary The Firebane". Or maybe someone at Valve thought that we'd think that and were really just being lazy. Hmmm Lagg 02:54, 23 July 2010 (UTC)
When I used tf_english.txt, I worked around "Community The Kritzkrieg" or "Valve The Equalizer" by removing "The" if it was non-unique. On another note, this indentation is getting crazy. Netshroud 03:16, 23 July 2010 (UTC)

Breaking GetPlayerItems Bug

With certain backpacks (for example, 76561197967454254, one of the PCGamer employees) there appears to be a floating point error inserted into attribute values without being checked before hand. This results in invalid JSON that most parsers will fail on.

Example:

							{
								"defindex": 127,
								"value": 4294967294,
								"float_value": -1.#QNAN0
							},

-- Lagg Backpack Stickybomb Launcher.png 09:43, 10 November 2010 (UTC)

Oh joy. Glad to see serious issues like negative IDs were fixed though! Ath 19:42, 10 November 2010 (UTC)

Changing Item IDs After Trade or Customization

I probably don't need to explain why it's a bad idea to change this every time an item is customized. Please fix this. -- Lagg Backpack Stickybomb Launcher.png 19:39, 10 November 2010 (UTC)

Invalid Encoding in Certain Item Names, Descriptions, Personas, and Real Names

It appears that custom item names, descriptions, and community profile names and personas (and probably anything else that takes user input) isn't being sanitized before the JSON is generated. Invalid character encoding is also invalid JSON. -- Lagg Backpack Stickybomb Launcher.png 19:50, 10 November 2010 (UTC)

List of Problematic Attributes

Please feel free to edit or correct this list if I missed anything (I want to keep it all here to be more visible to Joe) -- Lagg Backpack Stickybomb Launcher.png 03:57, 14 November 2010 (UTC)

Attributes with no description string
27 alt-fire disabled
29 alt-fire is vampire
43 scattergun no reload single
53 fire retardent
116 mod soldier buff type
117 dmg falloff increased
122 mod demo buff type
167 disguise damage reduction
183 aiming movespeed decreased
184 duel loser account id
189 elevate quality
Attributes with undefined description_string
192 referenced item id low
193 referenced item id high
Attributes with incorrect description strings
195 always tradable
196 noise maker
144 lunchbox adds minicrits
Attributes attached to items they shouldn't be attached to
144 lunchbox adds minicrits (attached to the GRU)
The behavior on referenced_item_id_* is intentional. These are hidden attributes, so they don't have a description. Some of the others that have the wrong descriptions are also hidden and need their descriptions removed. The next webAPI update (which will happen soon) adds the hidden flag to what is provided for attributes, so it's easier to detect these attributes. I'll look at the others. -- Joe 22:20, 15 November 2010 (UTC)