finding correct wiki page via info gained from the API — Guild Wars 2 Forums
Home API Development

finding correct wiki page via info gained from the API

I am playing a bit with the gw2 API and i am building a tool that allows me to search for pshyical items (in my bank, bags, equipment, material storage, etc). The result also shows a link to the item on wikipedia. But that sometimes fails, because i am using the item's name that the API gives me. That often works well, but sometimes it does not...

Example: (name according to API) Cosmic Mining Tool --> replace spaces with underscores -> Cosmic_Mining_Tool --> wikipedia (english): https://wiki.guildwars2.com/wiki/Cosmic_Mining_Tool (correct)

But for some items, especially skins, this goes wrong:

Example: (name according to API) Exalted Shoulders --> replace spaces with underscores -> Exalted_Shoulders --> wikipedia (english): https://wiki.guildwars2.com/wiki/Exalted_Shoulders (fails)

The last example fails as the correct page for Exalted Shoulders is https://wiki.guildwars2.com/wiki/Exalted_Shoulders_Skin (_Skin added)

A more safe way to find an item is via searching via the gamelink (like [&AgGaXwEA]) but afaik you cant do that while combining it with https://wiki.guildwars2.com/wiki/, so https://wiki.guildwars2.com/wiki/[&AgGaXwEA] fails... :s

Anyone knows a good way to do this correctly?

Thanks in advance <3

Comments

  • edited September 20, 2020

    @GODh.3892 said:
    A more safe way to find an item is via searching via the gamelink (like [&AgGaXwEA]) but afaik you cant do that while combining it with https://wiki.guildwars2.com/wiki/, so https://wiki.guildwars2.com/wiki/[&AgGaXwEA] fails... :s

    Anyone knows a good way to do this correctly?

    Thanks in advance <3

    Something like this:
    https:/ /wiki.guildwars2.com/index.php?title=Special%3ASearch&search=%5B%26AgGaXwEA%5D&go=Go

  • That seems to work, thank you <3

    This does not solve all my wiki problems as that gamelink is not always available (especially when item is transmuted and i want the link for the new skin), but at least its solves a part of my problems :3

  • @GODh.3892 said:
    That seems to work, thank you <3

    This does not solve all my wiki problems as that gamelink is not always available (especially when item is transmuted and i want the link for the new skin), but at least its solves a part of my problems :3

    I think this could help, but you need to do a bit of math to get skin link separately: https://wiki.guildwars2.com/wiki/Chat_link_format#Wardrobe_skins_and_upgrades

  • Thank you. I think i have the skins covered but the API does not provide a gamelink for skins.

  • Ok, i think i got it working (no guarantees, but so far, i dont see any wrong wiki pages anymore). Thanks for the help <3

  • @GODh.3892 said:
    Ok, i think i got it working (no guarantees, but so far, i dont see any wrong wiki pages anymore). Thanks for the help <3

    Ok, glad it worked. Just for information, you can get chatlink from item/skin number from api. For example:

    Skin number - 7490, in hex 1D42, it's a skin so first byte is 0x0A (Wardrobe link), so full hex string is 0A 42 1D 00 00, convert it to base64 - CkIdAAA=, chat link is [&CkIdAAA=]

  • @WIR BRAUCHEN ONE EIGHTY.4257 said:
    Skin number - 7490, in hex 1D42, it's a skin so first byte is 0x0A (Wardrobe link), so full hex string is 0A 42 1D 00 00, convert it to base64 - CkIdAAA=, chat link is [&CkIdAAA=]

    Ok, that sounds interesting, but i have little experience in that direction (C#). In my app i know its a skin and i know it's skin-id, but after that i kinda lost you :'(

  • @GODh.3892 said:
    Ok, that sounds interesting, but i have little experience in that direction (C#). In my app i know its a skin and i know it's skin-id, but after that i kinda lost you :'(

    I wrote some code in C#:

          int skin_id = 5583;
           skin_id <<= 8;
           skin_id |= 0X0A;           
          
           byte[] bytes = BitConverter.GetBytes(skin_id);
          
          string chat_link;
          
          int addition = 0;
          
          if(skin_id > 0XFFFF)
            addition = 2;
          if(skin_id > 0XFF)
            addition = 1;
          
          byte[] newBytes = new byte[bytes.Length + addition];
          bytes.CopyTo(newBytes, 0);
          chat_link = Convert.ToBase64String(newBytes);
    

    Tried it with online compiler and it's working.
    Don't expect it to be perfect, I'm C++ programmer and have very little knowledge of C#.

  • GODh.3892GODh.3892 Member ✭✭
    edited September 20, 2020

    Thank you very much! This seems to work perfectly <3

    Part of my log:

    20:10:18: DEBUG created chatlink for item: 8319 name: 'Springer Kit Backpack' chatlink: [&Cn8gAAA=]
    20:10:18: DEBUG created chatlink for item: 1253 name: 'Flamekissed Vest' chatlink: [&CuUEAAA=]
    20:10:18: DEBUG created chatlink for item: 1255 name: 'Flamekissed Shoes' chatlink: [&CucEAAA=]
    20:10:18: DEBUG created chatlink for item: 1257 name: 'Flamekissed Gloves' chatlink: [&CukEAAA=]
    20:10:19: DEBUG created chatlink for item: 1258 name: 'Flamekissed Mask' chatlink: [&CuoEAAA=]
    20:10:19: DEBUG created chatlink for item: 1254 name: 'Flamekissed Pants' chatlink: [&CuYEAAA=]
    20:10:19: DEBUG created chatlink for item: 1256 name: 'Flamekissed Mantle' chatlink: [&CugEAAA=]
    20:10:20: DEBUG created chatlink for item: 4666 name: 'Kraitkin' chatlink: [&CjoSAAA=]

    I think i am decent with data, but this bit/byte stuff is a bit above my head. Your help is very appreciated :3

  • I still see a "small" problem. If the chatlink contains a + sign then the link looks ok (with the plus), but once in wiki (search mode) then the + is gone (it looks like it got replaced by a space) and wiki can't find it.

    Is there a way to avoid this? :'(

  • Replacing + with %B2 did the trick :#