Get the price of an item on Steam Community Market with PHP and Regex

I'm trying to use PHP to get the Steam Community Market price of an item. I take a url (for example : and then I download the content with file_get_contents(). I tried to use this :

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


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

An example of what I can have with file_get_contents is this :

<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>

But it returns nothing.

Has anyone an idea ?


Not entirely sure why you'd want to do this the hard way and regex through HTML when there's a perfectly working call which returns JSON. Although the original answer is correct and answers the OP question directly, this provides a much easier and efficient way of getting the market value of an item.


JSON Response:

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

Response Definitions :

success: boolean value, true if the call was successful or false if something went wrong or there are no listing for this item on the Steam market.

lowest_price: string value with currency symbol [pre-/ap]pended depending on the query parameters specified. See below for some additional parameter.

volume: integer value returned as a string (?) - the total number of this specific item which has been sold/bought.

median_price: string value with currency symbol [pre-/ap]pended. The average price at which the item has been sold. See the Steam marketplace item graph for a better understanding on how the median is calculated.

Query Parameters:

appid: The unique (statically defined) Steam application ID of the game/app, in our case 730 for Counter-Strike: Global Offensive. See Valve's development Wiki for a list of other appid's, though this list will most probably always be out of date as new apps are added to their platform frequently.

market_hash_name: The name of the item being queried against with the exterior included, retrieving these names can be found when querying against a users inventory, but that's a whole other API call.

currency: An integer value; the currency value and format to return the market values. You'll need to tweak and play around with these numbers as I cannot provide too much detail here. Generally I stick to using USD as a global price and use my own currency API to translate into other currencies.

Don't use regex for this task (see RegEx match open tags except XHTML self-contained tags, but there's a more explanatory link somewhere on SO)

You want to use XPath to select your elements based on fine criteria. From this should get you the nodes you want:

$doc = new DOMDocument();
$xpath = new DOMXpath($doc);

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

the XPath //span[@class="..."] means select all span tags within the document the have the expected class attribute.

I created a node.js module via npm for the cs:go market. It only gets single prices at the moment, but let me know if there is additional functionality you'd like me to add.

Need Your Help

Build systems in Sublime Text

c++ python build sublimetext2

I'm just beginning to learn programming (on C++ and Python), and by beginning I mean total beginning ("hello world" beginning...). Not wanting to use multiple IDE's, I would like to be able to code...

Ant if else condition?


Is there an if/else condition that I can use for an Ant task?