PHP 및 Regex가있는 Steam Community Market의 항목 가격을 받으십시오.
문제
나는 PHP를 사용하여 증기 커뮤니티 시장 가격을 얻으려고 노력하고 있습니다.나는 URL을 찍습니다 (예 : http://steamcommunity.com/market/listings/730/stattrak%e2%84%a2%20p250%200%7c%20steel%20discruption%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');
.
file_get_contents로 가질 수있는 것의 예는 다음과 같습니다.
<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>
.
그러나 아무 것도 반환하지 않습니다.
아무도 아이디어가 있습니까?
해결책
JSON을 반환하는 완벽하게 작동하는 통화가있을 때 HTML을 통해 어려운 방법과 regex를 통해이 작업을 수행하려는 이유를 전적으로 확신하지 못합니다. 원래의 답변이 정확하고 op 질문에 직접 응답하지만, 이는 항목의 시장 가치를 훨씬 쉽고 효율적으로 제공합니다.
가져 오기 :
JSON 응답 :
{
"success": true,
"lowest_price": "1,43€ ",
"volume": "562",
"median_price": "1,60€ "
}
.
응답 정의 :
success
: 부울 값, 통화가 성공했거나 뭔가 잘못되었을 경우 또는 스팀 시장 에서이 항목에 대한 목록이 없습니다. .
lowest_price
: 통화 기호가있는 문자열 값 [Pre- / AP]가 지정된 쿼리 매개 변수에 따라 밝혀졌습니다. 일부 추가 매개 변수는 아래를 참조하십시오.
volume
: 문자열 (?)으로 반환 된 정수 값 (?) - 판매 / 구입 한이 특정 항목의 총 수입니다.
median_price
: 통화 기호가있는 문자열 값 [Pre- / AP] 첨가. 항목이 판매 된 평균 가격. 스팀 마켓 플레이스를 참조하십시오 중앙값이 어떻게 계산되는지 더 잘 이해할 수있는 항목 그래프.
쿼리 매개 변수 :
appid
: 게임 / 앱의 고유 한 (정적으로 정의 된) 스팀 응용 프로그램 ID, 카운터 스트라이크에 대한 우리의 경우 730 : 전역 공격. 다른 AppID의 목록을 보려면 밸브의 개발 Wiki를 참조하십시오.이 목록은 새로운 앱이 자주 플랫폼에 추가되므로 항상 최신 상태가 될 것입니다.
market_hash_name
: 외부 포함으로 쿼리되는 항목의 이름은 사용자 인벤토리에 대해 쿼리 할 때이 이름을 검색 할 수 있지만 다른 API 호출입니다.
currency
: 정수 값; 통화 값 및 형식으로 시장 값을 반환합니다. 여기에 너무 많은 세부 사항을 제공 할 수 없으므로이 숫자로 조정하고 놀아야합니다. 일반적으로 나는 USD를 글로벌 가격으로 사용하고 내 자신의 통화 API를 사용하여 다른 통화로 번역 할 수 있도록합니다.
다른 팁
이 작업에 대해 regex를 사용하지 마십시오 ( regex 참조)XHTML 자체 포함 태그를 제외한 열린 태그와 일치 그러나 어딘가에 더 설명 링크가 있습니다.
XPath를 사용하여 미세한 기준에 따라 요소를 선택하려고합니다. php.net 당신이 원하는 노드를 얻을 수 있어야합니다./ P>
$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
태그를 선택합니다.
CS : Go Market의 NPM을 통해 Node.js 모듈을 만들었습니다. https://www.npmjs.com/package/csgo-market 단 하나만 가져옵니다가격은 현재 추가 할 추가 기능이 있는지 알려주십시오.