Hilfe beim parsing

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Hilfe beim parsing

    Hallo ihr lieben,

    ich versuche Aktuell die Spiele von meinem Steam Account aufzulisten.

    Ein teil des Quelltextes ist dieser:
    <script language="javascript">
    var rgGames = [{"appid":730,"name":"Counter-Strike: Global Offensive","logo":"https:\/\/steamcdn-a.akamaihd.net\/steamcommunity\/public\/images\/apps\/730\/d0595ff02f5c79fd19b06f4d6165c3fda2372820.jpg","friendly_name":"CSGO","has_adult_content":1,"friendlyURL":"CSGO","availStatLinks":{"achievements":true,"global_achievements":true,"stats":false,"gcpd":true,"leaderboards":false,"global_leaderboards":false},"hours":"37.2","hours_forever":"624","last_played":1570990297},{"appid":466240,"name":"Deceit","logo":"https:\/\/steamcdn-a.akamaihd.net\/steamcommunity\/public\/images\/apps\/466240\/d6fbc0126c00d030d3e82478b3acd2595a0cdc08.jpg","friendlyURL":466240,"availStatLinks":{"achievements":true,"global_achievements":true,"stats":false,"gcpd":false,"leaderboards":false,"global_leaderboards":false},"hours_forever":"36","last_played":1558726553},{"appid":544730,"name":"Catan Universe","logo":"https:\/\/steamcdn-a.akamaihd.net\/steamcommunity\/public\/images\/apps\/544730\/20ef326108c33d14dbcbe1cf4649fbd0cd9bff69.jpg","friendlyURL":544730,"availStatLinks":{"achievements":true,"global_achievements":true,"stats":false,"gcpd":false,"leaderboards":false,"global_leaderboards":false},"hours_forever":"22","last_played":1563117659},{"appid":513710,"name":"SCUM","logo":"https:\/\/steamcdn-a.akamaihd.net\/steamcommunity\/public\/images\/apps\/513710\/adc1bb03b02c2f4867563515861c93fcbb4a927e.jpg","friendlyURL":513710,"availStatLinks":{"achievements":true,"global_achievements":true,"stats":false,"gcpd":false,"leaderboards":false,"global_leaderboards":false},"hours_forever":"0.8","last_played":1562177857},{"appid":733070,"name":"Sudoku Universe","logo":"https:\/\/steamcdn-a.akamaihd.net\/steamcommunity\/public\/images\/apps\/733070\/0647358a31e9cc39936415d9f79ee0ac158dce82.jpg","friendlyURL":733070,"availStatLinks":{"achievements":true,"global_achievements":true,"stats":false,"gcpd":false,"leaderboards":false,"global_leaderboards":false},"hours_forever":"0.7","last_played":1561136682},{"appid":562810,"name":"Monopoly Plus","logo":"https:\/\/steamcdn-a.akamaihd.net\/steamcommunity\/public\/images\/apps\/562810\/c411fd712d750106e071755a0ce2ae4c0da47b00.jpg","friendlyURL":562810,"availStatLinks":{"achievements":true,"global_achievements":true,"stats":false,"gcpd":false,"leaderboards":false,"global_leaderboards":false},"hours_forever":"0.3","last_played":1562615883},{"appid":60,"name":"Ricochet","logo":"https:\/\/steamcdn-a.akamaihd.net\/steamcommunity\/public\/images\/apps\/60\/f7a039402735c2dea82cbd412340873535e2be4c.jpg","friendlyURL":60,"availStatLinks":{"achievements":true,"global_achievements":true,"stats":false,"gcpd":false,"leaderboards":false,"global_leaderboards":false},"last_played":1558884685},{"appid":444640,"name":"Bloons TD Battles","logo":"https:\/\/steamcdn-a.akamaihd.net\/steamcommunity\/public\/images\/apps\/444640\/f271eb39df4d7919dc620290855e7c2578f50a1f.jpg","friendlyURL":444640,"availStatLinks":{"achievements":true,"global_achievements":true,"stats":false,"gcpd":false,"leaderboards":false,"global_leaderboards":false},"last_played":1558861500}];
    var rgChangingGames = [];


    Wie bekomme ich das da vernünftig mit Split raus? Leider stehen die Spiele nicht in einer reihe so das ich einfach reihe für reihe durchgehen kann.

    Was gibt es da für Methoden oder Möglichkeiten?
    Liebe Grüße,
    C.O.D.E

    Testautomatisierung (TA):

    5%
    Du findest meinen Beitrag Hilfreich? :thumbup: Dann drück auf Hilfreich!
    Warum machst du dir das so schwer? Nutze die Steam-API, dafür ist die da!

    developer.valvesoftware.com/wi…me_interfaces_and_methods


    GetOwnedGames (v0001)
    GetOwnedGames returns a list of games a player owns along with some
    playtime information, if the profile is publicly visible. Private,
    friends-only, and other privacy settings are not supported unless you
    are asking for your own personal details (ie the WebAPI key you are
    using is linked to the steamid you are requesting).

    Example URL: api.steampowered.com/IPlayerSe…1197960434622&format=json

    Arguments
    steamid
    The SteamID of the account.

    include_appinfo
    Include game name and logo information in the output. The default is to return appids only.

    include_played_free_games
    By default, free games like Team Fortress 2 are excluded (as
    technically everyone owns them). If include_played_free_games is set,
    they will be returned if the player has played them at some point. This
    is the same behavior as the games list on the Steam Community.

    format
    Output format. json (default), xml or vdf.

    appids_filter
    You can optionally filter the list to a set of appids. Note
    that these cannot be passed as a URL parameter, instead you must use the
    JSON format described in Steam_Web_API#Calling_Service_interfaces. The expected input is an array of integers (in JSON: "appids_filter: [ 440, 500, 550 ]" )



    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    NoIde schrieb:

    Warum machst du dir das so schwer? Nutze die Steam-API, dafür ist die da!


    ?( Oh man, das ist ja viel einfacher. Ich habe mir gerade kostenlos den API-Key angefordert und siehe da - eine perfekte auflistung.

    Danke!!
    Liebe Grüße,
    C.O.D.E

    Testautomatisierung (TA):

    5%
    Du findest meinen Beitrag Hilfreich? :thumbup: Dann drück auf Hilfreich!
    Jetzt kannste es dir noch einfacher machen, falls du die Antwort als JSON nimmst, indem du das benutzt, hier im Forum ist davon sicher einiges zu finden.
    github.com/JamesNK/Newtonsoft.Json


    Edit @C.O.D.E
    Hier noch ein kleines Helferlein, für JSON
    jsonutils.com/
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „NoIde“ ()

    Was mir gerade auffällt ist: Um Informationen von dem Account zu bekommen brauche ich die SteamID und die brauche ich nicht wenn ich über die Webseite gehe.

    Bsp: api.steampowered.com/ISteamUse…ayerSummaries/v0002/?key=XXXXXXXXXXXXXXXXXXXXXXX&steamids=STEAMID

    Es gibt seiten die können die SteamID herausfinden. Wie machen die das? Beispiel: steamid.io/

    lg

    Die Farbe „Rot“ ist der Moderation vorbehalten. Farbe geändert. ~Thunderbolt
    Liebe Grüße,
    C.O.D.E

    Testautomatisierung (TA):

    5%
    Du findest meinen Beitrag Hilfreich? :thumbup: Dann drück auf Hilfreich!

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

    ResolveVanityURL
    developer.valvesoftware.com/wi…Feedback#ResolveVanityURL

    Ist alles dokumentiert, lies dir das einfach alles durch.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

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

    Edit: Hat sich erledigt.

    Bsp:
    http://api.steampowered.com/ISteamUser/ResolveVanityURL/v0001/?key=APIKEY&vanityurl=userVanityUrlName


    Die Farbe „Rot“ ist der Moderation vorbehalten. Farbe geändert. ~Thunderbolt
    Liebe Grüße,
    C.O.D.E

    Testautomatisierung (TA):

    5%
    Du findest meinen Beitrag Hilfreich? :thumbup: Dann drück auf Hilfreich!

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Thunderbolt“ ()

    Ups, hab das aus den Suggestions kopiert, sorry. Hätte genauer lesen sollen. Um an die SteamId zu kommen reicht die eine Anfrage. Hab das um weitere verwirrung zu vermeiden, einfach aus dem Post entfernt.


    Edit @C.O.D.E
    Hier der Link zur Documentation der API. Hatte im Feedbackbereich nach ResolveVanityURL gesucht.
    steamcommunity.com/dev?l=german
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „NoIde“ ()

    NoIde schrieb:


    Hier der Link zur Documentation der API. Hatte im Feedbackbereich nach ResolveVanityURL gesucht.


    Danke schon mal für die raschen Antworten. Ich komme mit dem json Parser überhaupt nicht klar deswegen habe ich es mit mid probiert.

    Der json Code:

    Quellcode

    1. {"response":{"players":[{"steamid":"76561198350515199","communityvisibilitystate":3,"profilestate":1,"personaname":


    Mein Code:

    VB.NET-Quellcode

    1. Dim ParserPosStart, ParserPosEnd, ParserPosLengh, ParserPosWordLengh As Integer
    2. ParserPosStart = getSteamData.IndexOf("steamid"":""")
    3. ParserPosEnd = getSteamData.IndexOf(""",", ParserPosStart)
    4. ParserPosWordLengh = ParserPosStart.ToString.Length
    5. ParserPosLengh = ParserPosEnd - ParserPosStart
    6. Dim empty As String = MessageBox.Show(Mid(getSteamData, ParserPosStart + ParserPosWordLengh, ParserPosLengh))


    Die Startposition von dem gesuchten Wort hole ich mir mit: getSteamData.IndexOf("steamid"":""")
    Die Endposition hole ich mir mit: getSteamData.IndexOf(""",", ParserPosStart)

    Dann bei ParserPosLengh die Länge des gesuchten Wortes
    Und dann rechne ich bei ParserPosWordLengh Startposition + die Wortlänge (steamid"":"") damit ich auch nur die Steam ID habe


    Und trotzdem bekomme ich:
    teamid":"76561198350515199"

    Was mache ich falsch? Mir geht es hier jetzt ums prinzip und ich will wissen was hier schief läuft. Haha

    *Vollzitat entfernt* ~NoFear23m
    Liebe Grüße,
    C.O.D.E

    Testautomatisierung (TA):

    5%
    Du findest meinen Beitrag Hilfreich? :thumbup: Dann drück auf Hilfreich!

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

    So, am besten vergisst du MID gleich wieder, das ist eine VB-Classic Mumie. Lass die im Sarkophag. Nutze statt dessen die String-Functionen der String Klasse.

    VB.NET-Quellcode

    1. Dim strToFindForStart As String = "steamid"":"""
    2. Dim response As String = "{""response"":{""players"":[{""steamid"":""76561198350515199"",""communityvisibilitystate"":3,""profilestate"":1,""personaname"":"
    3. Dim startPos As Integer = response.IndexOf(strToFindForStart) + strToFindForStart.Length
    4. Dim result As String = response.Substring(startPos)
    5. 'result ist hier 76561198350515199","communityvisibilitystate":3,"profilestate":1,"personaname":
    6. Dim endPos As Integer = result.IndexOf("""") 'ein "
    7. result = result.Substring(0, endPos)


    Wenn hier jetzt auf der linken Seite, mal schaust im "TreeView", schau da noch Methoden von String. Da findest du alles was du brauchst.

    docs.microsoft.com/de-de/dotne…ing?view=netframework-4.8



    Edit @C.O.D.E
    Habe fertig editiert.


    @C.O.D.E
    Mein beispielcode kann u.U. deine Anwendung zum absturz bringen eine Idee warum?
    Bilder
    • Unbenannt.jpg

      83,36 kB, 883×344, 66 mal angesehen
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 9 mal editiert, zuletzt von „NoIde“ ()

    @C.O.D.E
    Aufgrund der vielen Moderationstätigkeit in diesem Thread lege ich dir ans Herz unbedingt mal die Forenregeln zu lesen.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##