Получить цену товара на рынке сообщества Steam с помощью PHP и Regex

Я пытаюсь использовать PHP, чтобы получить рыночную цену Steam для элемента. Я беру URL-адрес (например: http://steamcommunity.com/market/listings/730/StatTrak%E2%84%A2%20P250%20%7C%20Steel%20Disruption%20%28Factory%20New%29 ), а затем Я загружаю контент с помощью file_get_contents() . Я попытался использовать это:

 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'); 

Примером того, что я могу иметь с файловым_компонентом, является следующее:

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

Но он ничего не возвращает.

У кого-нибудь есть идея?

Не совсем уверен, почему вы хотите сделать это сложным способом и регулярным выражением через HTML, когда есть отличный рабочий вызов, который возвращает JSON. Хотя исходный ответ верен и отвечает на вопрос OP напрямую, это обеспечивает гораздо более простой и эффективный способ получения рыночной стоимости товара.

ПОЛУЧИТЬ :

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 :

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

Определения ответов :

success : boolean value, true, если вызов был успешным или ложным, если что-то пошло не так или нет листинга для этого элемента на рынке Steam .

lowest_price : строковое значение с символом валюты [pre- / ap], зависящим от указанных параметров запроса. См. Ниже дополнительный параметр.

volume : целочисленное значение, возвращаемое как строка (?) – общее количество этого конкретного предмета, который был продан / куплен.

median_price : строковое значение с символом валюты [pre- / ap] pended. Средняя цена, по которой товар был продан. См. Диаграмму позиций на торговой площадке Steam, чтобы лучше понять, как рассчитывается медиана.

Параметры запроса :

appid : уникальный (статически определенный) идентификатор Steam-приложения игры / приложения, в нашем случае 730 для Counter-Strike: Global Offensive. См. Раздел разработки Valve Wiki для списка других приложений, хотя этот список, скорее всего, всегда будет устаревшим, так как новые приложения часто добавляются на их платформу.

market_hash_name : имя запрашиваемого элемента с включенным внешним элементом, извлечение этих имен можно найти при запросе на инвентарь пользователей, но это целый другой вызов API.

currency : целочисленное значение; значение и формат валюты для возврата рыночных значений. Вам нужно будет настроить и поиграть с этими цифрами, поскольку я не могу предоставить здесь слишком много подробностей. Как правило, я придерживаюсь использования доллара США в качестве глобальной цены и использую свой собственный API валюты для перевода в другие валюты.

Не используйте регулярное выражение для этой задачи (см. Теги OpenEx Open, за исключением тегов XHTML , но есть более пояснительная ссылка где-то на SO)

Вы хотите использовать XPath для выбора ваших элементов на основе тонких критериев. С PHP.net это должно получить нужные вам узлы:

 $doc = new DOMDocument(); $doc->loadHTMLFile($file); $xpath = new DOMXpath($doc); $elements = $xpath->query('//span[@class="market_listing_price market_listing_price_with_fee"]'); 

XPath //span[@class="..."] означает выбор всех тегов span внутри документа, имеющих ожидаемый атрибут класса.

Я создал модуль node.js через npm для рынка cs: go. https://www.npmjs.com/package/csgo-market В настоящее время он получает только разовые цены, но дайте мне знать, есть ли дополнительная функциональность, которую вы хотите добавить.