Что не так с этим кодом с использованием curl и json? - PullRequest
0 голосов
/ 11 марта 2020

У меня есть этот код, и я хочу получить все данные о "элементах" в ответе на curl, когда я посещаю URL с помощью браузера, на котором отображаются все "элементы", но с этим кодом, ответ curl работает, но "items" является нулем, вот код:

$eop = 0;
$newest = 0;

while($eop == 0) {

    $url='https://shopee.ph/api/v2/search_items/?by=ctime&limit=30&match_id=49133756&newest=0&order=desc&page_type=shop&version=2';     

    $ch = curl_init($url);      
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);     
    $response = curl_exec($ch);     
    $http = curl_getinfo($ch, CURLINFO_HTTP_CODE);  

    print_r($response);

    curl_close($ch);

    if ($http == 200) { 

    $products = @json_decode($response, TRUE);          

        $items = $products['items'];

        if (count($items) > 1 ) {

           foreach ($items as $item) { 

            $id = $item['itemid'];          
            echo $id . '<br>';

        }

        } else {
            $eop=1;
        }


    }

    $newest = $newest + 30;
}

и вот ответ:

{"show_disclaimer":null,"query_rewrite":null,"adjust":null,"version":"b1c94828d525e526ff969f451cc3ac33","algorithm":null,"total_count":null,"error":null,"total_ads_count":null,"nomore":null,"price_adjust":null,"json_data":null,"suggestion_algorithm":null,"items":null,"reserved_keyword":null,"hint_keywords":null}

1 Ответ

0 голосов
/ 11 марта 2020

После случайной догадки я обнаружил, что указанный API не вернет никаких элементов, если вы не укажете заголовок User-Agent.

Вот моя версия:

<?php

$eop = 0;
$newest = 0;

while($eop == 0) {

    $url='https://shopee.ph/api/v2/search_items/?by=ctime&limit=30&match_id=49133756&newest=0&order=desc&page_type=shop&version=2';

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"));
    $response = curl_exec($ch);
    $http = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    print_r($response);

    curl_close($ch);

    if ($http == 200) {

    $products = json_decode($response, TRUE);

        $items = $products['items'];

        if (count($items) > 1 ) {

           foreach ($items as $item) {

            $id = $item['itemid'];
            echo $id . '<br>';

        }

        } else {
            $eop=1;
        }


    }

    $newest = $newest + 30;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...