Guild Wars 2 API .net

  • C#

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Markus Jacobs.

    Guild Wars 2 API .net

    Hi Leute,

    ich wollte mal Fragen ob jemand das Rollenspiel Guild Wars 2 spielt und bereits die vorkurzem bereitgestellte API genutzt hat? Wollte gerne die neue API nutzen und eine Applikation schreibe nur leider steige ich da iwie nicht durch. Gibts da jemanden der mir helfen könnte?

    gruß

    //Edit:
    Ich programmiere in C#

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „kassor“ ()

    Am besten mal die offizielle Doku lesen: forum-en.guildwars2.com/forum/…ity/api/API-Documentation
    Sonst hier das offizielle Support-Forum: forum-en.guildwars2.com/forum/community/api

    Wenn du nun zum Beispiel das Item mit der ID 12546 abfragen willst musst du diesen Link aufrufen: api.guildwars2.com/v1/item_det…son?item_id=12546&lang=de (mit dieser Seite kannst du dir alle ID's anzeigen lassen api.guildwars2.com/v1/items.json). Als Ergebnis bekommst du immer einen JSON-String zurück mit dem du dann weiter arbeiten kannst ;)
    Leider kann ich dir zu den Sachen nichts direkt sagen, da ich kein GW2 spiele.
    Hey ich hatte genau die gleiche Idee, doch als ich gesehen habe, das es schon so viele Programme gibt die das machen habe ich aufgehört. Hier kannste meinen (miesen) Programmcode haben. Vielleicht bringt er dir was.

    Das Programm sucht alle Server heraus auf welchen die Flammenzitadelle offen ist und listet sie auf. Um zu starten einfach doppelklick auf die Listbox.

    mfg Ebrithil
    Dateien
    Mein Erstes Tutorial: Erweitertes Arduino Tutorial

    Simpler D&D FTP Uploader: Edge-Load
    Zum Thema JSON und dessen bequeme Verarbeitung habe ich hier geschrieben.

    btw, warum ist das Thema im OT?
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    @ebrithil
    Danke für dein Upload.
    Es funktioniert soweit nur ich denke das die verarbeitung der Daten nicht so gehandeld werden sollte. Aber wie genau man die json ausgabe verarbeiten soll ist mir noch nicht klar.

    @Lukas
    Nettes Tutorial nur leider muss ich sagen, dass es mich überrumpelt. Da ich noch nie mit json zu tun hatte, wird mir nicht klar wie ich die json ausgabe verarbeiten soll. Kannst du mir vllt schritt für schritt erklären was ich tun muss?

    Ich will z.B. die Serverliste ausgeben lassen und die id sowie der name der server in ein array packen. Der Link ist:
    api.guildwars2.com/v1/world_names.json?lang=de

    In dem Beispiel von ebrithil hat er z.B. per Split befehl in einer Schleife alles stück für stück auseinandergenommen und das benötigte in die Arrays gepackt.
    Aber ich denke das nicht richtig oder?

    Hoffe es macht dir nichts aus, dass ich in C# programmiere.

    Danke dir schon mal.

    gruß

    //Edit:
    Der Thread kann gerne verschoben werden
    Wo genau hängst du?
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    VB.NET-Quellcode

    1. WebClient WC = new WebClient();
    2. private void serverLoad()
    3. {
    4. string dl = WC.DownloadString("https://api.guildwars2.com/v1/world_names.json?lang=de";
    5. }


    So hole ich mir die Serverliste. Diese JSON ausgabe packe ich in einen String. Wie Verarbeite ich am klügsten die Ausgabe?
    Hast du die Anleitung gelesen?

    Der erste Schritt ist, dieses Modell auf .NET anzupassen. Hierfür empfehle ich json2csharp.com. Das konvertiert zwar zu C#, aber mit einem Konverter ist das kein Problem.


    Damit übersetzt du diese JSON-Ausgabe in eine .NET-Klasse, die für die Deserialisierung gebraucht wird. Die Ausgabe wird sozusagen auf dieses Modell geparst. Wie das geht, steht weiter unten.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    VB.NET-Quellcode

    1. public partial class frmMain : Form
    2. {
    3. public frmMain()
    4. {
    5. InitializeComponent();
    6. }
    7. private void frmMain_Load(object sender, EventArgs e)
    8. {
    9. WC.Encoding = System.Text.Encoding.ASCII;
    10. serverLoad();
    11. }
    12. WebClient WC = new WebClient();
    13. private void serverLoad()
    14. {
    15. string dl = WC.DownloadString("https://api.guildwars2.com/v1/world_names.json?lang=de");
    16. RootObject jsonObject = JSONHelper.FromString<RootObject>(dl);
    17. string a = jsonObject.name;
    18. }
    19. }
    20. [DataContract]
    21. public class RootObject
    22. {
    23. [DataMember]
    24. public string id;
    25. [DataMember]
    26. public string name;
    27. }
    28. public class JSONHelper
    29. {
    30. public static T FromString<T>(string input)
    31. {
    32. if (string.IsNullOrWhiteSpace(input))
    33. {
    34. throw new ArgumentException("input");
    35. }
    36. var jsonSerializer = new DataContractJsonSerializer(typeof(T));
    37. using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(input)))
    38. {
    39. return (T)jsonSerializer.ReadObject(ms);
    40. }
    41. }


    Ist das so richtig?
    Ehrlich gesagt steige ich da nicht durch :(

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „kassor“ ()

    Kommt hin, ja. Allerdings sollte das RootObject eine Liste darstellen von Objekten mit ID- und Name-Eigenschaft.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Versuch es damit:

    C#-Quellcode

    1. var jsonObject = JSONHelper.FromString<List<RootObject>>(dl);


    Edit:
    Was macht der Thread im OffTopic?
    -> Verschoben.


    Noch ne kleine Empfehlung:
    Die JSONHelper-Klasse static machen und die Methode zur Extension-Method von String. Sieht dann so aus:

    C#-Quellcode

    1. public static class JsonHelper
    2. {
    3. public static T DeserializeJson<T>(this string input)
    4. {
    5. if (string.IsNullOrWhiteSpace(input))
    6. throw new ArgumentException("input");
    7. var jsonSerializer = new DataContractJsonSerializer(typeof(T));
    8. using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(input)))
    9. return (T)jsonSerializer.ReadObject(ms);
    10. }
    11. }

    Verwendung dann so:

    C#-Quellcode

    1. string apiResponse = wc.DownloadString("https://api.guildwars2.com/v1/world_names.json?lang=de");
    2. var liste = apiResponse.DeserializeJson<List<RootObject>>();
    Sieht schöner aus. :P
    Von meinem iPhone gesendet

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nikeee13“ ()

    Hi,

    Ich wollte mich auch mal an die GW2 API ranwagen und wollte einfach mal ein
    Feld machen, wo ich die Item ID eintrage und mir dann bei einem
    Knopfdruck die Eigenschaften des Items angezeigt werden.

    Ich habe bisher folgendes probiert:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim request As WebRequest = WebRequest.Create("https://api.guildwars2.com/v1/item_details.json?item_id=" + TextBox1.Text + "&lang=de")
    2. request.Credentials = CredentialCache.DefaultCredentials
    3. Dim response As WebResponse = request.GetResponse()
    4. MessageBox.Show(CType(response, HttpWebResponse).StatusDescription)
    5. Dim dataStream As Stream = response.GetResponseStream()
    6. Dim reader As New StreamReader(dataStream)
    7. Dim responseFromServer As String = reader.ReadToEnd()
    8. RichTextBox1.Text = (responseFromServer)
    9. reader.Close()
    10. response.Close()


    Folgendes habe ich dann beispielsweise in der RichTextBox stehen:
    Spoiler anzeigen

    Quellcode

    1. {"item_id":"30471","name":"Ascalon-Kurzbogen der Heftigkeit","description":"<c=@flavor>"Die höchste Handwerkskunst der Ascalonier, heruntergereicht durch die Zeitalter."<br>—Kiryn Brant</c>","type":"Weapon","level":"29","rarity":"Masterwork","vendor_value":"90","icon_file_id":"68100","icon_file_signature":"4BCEF9E3C9D95E3F95EF0130F9AFE7DE680D9242","game_types":["Activity",
    2. "Dungeon",
    3. "Pve",
    4. "Wvw"],"flags":["NoSalvage",
    5. "NoSell",
    6. "SoulbindOnAcquire",
    7. "SoulBindOnUse"],"restrictions":[],"weapon":{"type":"ShortBow","damage_type":"Physical","min_power":"274","max_power":"303","defense":"0","infusion_slots":[],"infix_upgrade":{"attributes":[{"attribute":"Healing","modifier":"38"},
    8. {"attribute":"Power","modifier":"27"}]},"suffix_item_id":"24613"}}


    Ich würde aber lieber anstatt der RTB eine Auflistung (Anzeige an sich ist Formsache und nicht relevant) der Eigenschaften haben.
    (Name: ...
    ID: ...
    etc.)

    Wo sollte ich am besten ansetzen wenn ich den "responseFromServer" in einer bestimmten Weise anzeigen möchte?
    Mal ne doofe Frage nebenbei, hab das Spiel seit Jahren hier rumliegen und nie wirklich gezockt. Aber was soll durch die API möglich sein? Besser gesagt für die User/Zocker gemütlicher, schöner oder besser werden?
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Orion schrieb:

    Aber was soll durch die API möglich sein? Besser gesagt für die User/Zocker gemütlicher, schöner oder besser werden?
    Nichts besonderes, du kannst halt dadurch alle Info´s zum Spiel kriegen um z.B. Hilfstools zu erstellen.
    Statt immer ein Wiki aufrufen zu müssen, könntest du auch einfach ein kleines Programm dafür machen und kriegst dann in ner tollen Übersicht Infos zu z.B. bestimmten Items, Monstern etc.