[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как вытащить json с другого сайта?
ilya1234567
как можно вытащить этот json?
https://yobit.net/api/3/ticker/ltc_btc-nmc_btc

file_get_contents()
выдает
Warning: file_get_contents(https://yobit.net/api/3/ticker/ltc_btc-nmc_btc): failed to open stream: HTTP request failed! HTTP/1.1 503 Service Temporarily Unavailable in

cURL вытаскивает только разметку страницы без Json


пример на Python https://bablofil.ru/yobit-api-python/
AllesKlar
Цитата (ilya1234567 @ 5.02.2018 - 20:31)
cURL вытаскивает только разметку страницы без Json

Браузер отправляет три запроса.
Первый ставит куку, второй проверяет куку, третий выдает JSON
Вот это поведение и нужно повторить
user posted image


user posted image

_____________
[продано копирайтерам]
ilya1991

$url = 'https://yobit.net/api/3/ticker/ltc_btc-nmc_btc';

$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_USERAGENT => '',
CURLOPT_COOKIEJAR => ''
]);
$html = curl_exec($ch);


if (strstr($html, "DDoS protection by CloudFlare")) {
curl_setopt_array($ch, [
CURLOPT_URL => get_jschl($html, $url),
CURLOPT_REFERER => $url
]);
$html = curl_exec($ch);
}

echo $html;



function get_jschl($html, $url)
{
// get var name
// var s,t,o,p,b,r,e,a,k,i,n,g,f, ZKlZkGE={"TRNDyY":+((!+[]+!![]+!![]+[])+(!+[]+!![]+!![]))};
preg_match('~var \S+\s+(\w+)=\{"(\w+)":([^}]+)\}~', $html, $match);

$answer = calc($match[3]);

$pattern = sprintf('~%s\.%s([-+*])=([^;]+)~', $match[1], $match[2]);

preg_match_all($pattern, $html, $matches, PREG_SET_ORDER);

foreach ($matches as $m) {
switch ($m[1]) {
case '-' : $answer -= calc($m[2]); break;
case '+' : $answer += calc($m[2]); break;
case '*' : $answer *= calc($m[2]); break;
}
}

$m = parse_url($url);

preg_match_all('~<input type="hidden" name="([^"]+)" value="([^"]+)~', $html, $matches);

$data = array_combine($matches[1], $matches[2]);
$data['jschl_answer'] = $answer + strlen($m['host']);

sleep(4);

return sprintf('%s://%s/cdn-cgi/l/chk_jschl?%s', $m['scheme'], $m['host'], http_build_query($data));
}


function calc($expr)
{
$result = '';

preg_match_all('~\([^()]+\)~', "
($expr)", $matches);

foreach ($matches[0] as $v) {
$result .= substr_count($v, '!+') + substr_count($v, '!![]');
}

return $result;
}


Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.