QQ 達人介面已啟用防盜鏈,需偽造 Referer: https://city.qq.com。本範例示範以 stream_context_create 發送帶自訂 Header 的請求,解析回傳 JSONP 格式資料。
<?php
$refer = "https://city.qq.com";
$opt = array('http' => array('header' => "Referer: $refer"));
$context = stream_context_create($opt);
$jsonUrl = "https://city.qq.com/json.php?mod=search&act=page&callback=showSrchResult&jsontype=str&perpage=10&cd=610900&nl=3&xb=0&type=city&pg=1";
$jsonStr = getJson($jsonUrl, $refer, $context);
echo $jsonStr;
function getJson($url, $referer, $context) {
$opt = array('http' => array('header' => "Referer: $referer"));
$context = stream_context_create($opt);
$getJsonStr = file_get_contents($url, false, $context);
// 移除 JSONP 包裝:前綴 "showSrchResult(" 與尾部 ");"
$getJsonStr = substr($getJsonStr, 15, -2);
return $getJsonStr;
}
?>
cd=610900:城市代碼(例:西安),可擴展抓取千萬級用戶。perpage=10&pg=1:分頁參數。callback=showSrchResult:JSONP 回呼函式名,解析時需去除。