it-swarm.com.de

Erhalten Sie den Preis eines Artikels auf dem Steam Community Market PHP und Regex

Ich versuche mit PHP den Steam Community Market-Preis eines Artikels zu ermitteln. Ich nehme eine URL (zum Beispiel: http://steamcommunity.com/market/listings/730/StatTrak%E2%84%A2%20P250%20%7C%20Steel%20Disruption%20%28Factory%20New%29 ) und dann lade ich den Inhalt mit file_get_contents() herunter. Ich habe versucht, dies zu verwenden:

function getInnerHTML($string, $tagname, $closetagname) {
    $pattern = "/<$tagname ?.*>(.*)<\/$closetagname>/";
    preg_match($pattern, $string, $matches);
    return $matches[1];
}

Verwenden 

getInnerHTML($str, 'span class="market_listing_price market_listing_price_with_fee"', 'span');

Ein Beispiel für das, was ich mit file_get_contents haben kann, ist folgendes:

<span class="market_table_value">
    <span class="market_listing_price market_listing_price_with_fee">
        $1.92               </span>
    <span class="market_listing_price market_listing_price_without_fee">
        $1.68               </span>
    <br/>
</span>

Aber es gibt nichts zurück. 

Hat jemand eine Idee?

11
Thomas Kowalski

Sie sind sich nicht ganz sicher, warum Sie dies auf die harte Tour tun und eine reguläre Expression durch HTML machen möchten, wenn es einen perfekt funktionierenden Aufruf gibt, der JSON zurückgibt. Obwohl die ursprüngliche Antwort richtig ist und die OP-Frage direkt beantwortet, bietet dies eine wesentlich einfachere und effizientere Möglichkeit, den Marktwert eines Artikels zu ermitteln.

ERHALTEN:

http://steamcommunity.com/market/priceoverview/?currency=3&appid=730&market_hash_name=StatTrak%E2%84%A2%20P250%20%7C%20Steel%20Disruption%20%28Factory%20New%29

JSON-Antwort:

{
  "success": true,
  "lowest_price": "1,43&#8364; ",
  "volume": "562",
  "median_price": "1,60&#8364; "
}

Antwortdefinitionen:

success: boolescher Wert, true, wenn der Aufruf erfolgreich war, oder false, wenn ein Fehler aufgetreten ist oder es gibt keine Einträge für diesen Artikel auf dem Steam-Markt.

lowest_price: Zeichenfolge mit Währungssymbol [pre-/ap] abhängig von den angegebenen Abfrageparametern. Nachfolgend finden Sie einige zusätzliche Parameter.

volume: Ganzzahliger Wert, der als Zeichenfolge (?) zurückgegeben wird - die Gesamtnummer dieses bestimmten Artikels, der verkauft/gekauft wurde.

median_price: Zeichenfolgewert mit Währungssymbol [pre-/ap] pend. Der durchschnittliche Preis, zu dem der Artikel verkauft wurde. Im Steam marketplace -Elementgraph finden Sie ein besseres Verständnis für die Berechnung des Medians.

Abfrageparameter:

appid: Die eindeutige (statisch definierte) Steam-Anwendungs-ID des Spiels/der App, in unserem Fall 730 für Counter-Strike: Global Offensive. Eine Liste weiterer Anwendungs-IDs finden Sie im Entwicklungs-Wiki von Valve. Diese Liste ist höchstwahrscheinlich immer veraltet, da ihrer Plattform häufig neue Apps hinzugefügt werden.

market_hash_name: Der Name des Gegenstands, für den mit dem Exterieur abgefragt wird. Der Abruf dieser Namen kann bei der Abfrage des Inventars eines Benutzers gefunden werden. Dies ist jedoch ein ganz anderer API-Aufruf.

currency: Ein ganzzahliger Wert. den Währungswert und das Format, um die Marktwerte zurückzugeben. Sie müssen mit diesen Zahlen herumstimmen, da ich hier nicht zu viele Details angeben kann. Im Allgemeinen bleibe ich bei der Verwendung von USD als globalem Preis und verwende meine eigene Währungs-API, um sie in andere Währungen umzurechnen.

35
Stephen Lake

Verwenden Sie für diese Aufgabe keine regulären Ausdrücke (siehe RegEx stimmen mit offenen Tags mit Ausnahme von XHTML-unabhängigen Tags überein , aber es gibt einen erklärenden Link irgendwo in SO)

Sie möchten XPath verwenden, um Ihre Elemente anhand von Feinkriterien auszuwählen. Von PHP.net Dies sollte Ihnen die gewünschten Knoten geben:

$doc = new DOMDocument();
$doc->loadHTMLFile($file);
$xpath = new DOMXpath($doc);

$elements = $xpath->query('//span[@class="market_listing_price market_listing_price_with_fee"]');

der XPath //span[@class="..."] bedeutet, dass alle span-Tags innerhalb des Dokuments ausgewählt werden, die das erwartete Klassenattribut haben.

4
Robin

Ich habe über npm ein node.js-Modul für den cs: go-Markt erstellt. https://www.npmjs.com/package/csgo-market Momentan werden nur Einzelpreise angeboten, aber lassen Sie mich wissen, ob es zusätzliche Funktionen gibt, die Sie hinzufügen möchten.

0
httpNick