Показать div с другой страницы, используя PHP cURL - PullRequest
0 голосов
/ 04 июля 2018

Итак, я пытаюсь отобразить div с другой страницы (например, Kinguin), как указано в заголовке PHP cURL. Теперь я нашел способ сделать это с изображением (простое учебное пособие по YT) с изображением, но я не смог сделать это с помощью div, к которому привязан класс. Некоторая страница поддержки, кажется, направляет меня в правильном направлении, но через некоторое время, кажется, становится все сложнее.

Это способ, которым я направляюсь в правильном направлении, или я должен использовать AJAX, например.

<?php
        $curl = curl_init();

        $search_string = "gta5";
        $url = "https://www.kinguin.net/catalogsearch/result/index/?q=$search_string";

        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_COOKIE,true);  //Verify cookies


        $result = curl_exec($curl);



        preg_match_all("!https://cdns.kinguin.net/media/catalog/category/cache/1/image/173x118/9df78eab33525d08d6e5fb8d27136e95/gta5_12.jpg!", $result,$matches);


        $images = array_values(array_unique($matches[0]));

        for ($i = 0; $i < count ($images); $i++){
            echo "<div style='float: left; margin: 10 0 0 0; '> ";
            echo "<img src='$images[$i]'><br />";
            echo "</div>";
        }

        curl_close($curl);


        ?>

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Решение здесь действительно зависит от того, какой контент вы хотите развернуть. preg_match_all - это функция сопоставления строк, которая использует регулярные выражения. Вы можете найти документацию для этого здесь , и вы можете протестировать регулярные выражения в браузерных приложениях, таких как RegExr Ваш скорректированный вызов preg_match_all может выглядеть примерно так:

preg_match_all('@<div class="some-class">[^<]+</div>@', $result, $matches);

Однако, поскольку вы опускаете тег <div> и, по-видимому, весь его контент, вы можете захотеть взглянуть на html-библиотеки разбора, такие как DOMDocument :

$dom = new DOMDocument(); $dom->loadHTML($result); 
foreach ($dom->getElementsByTagName('div') as $div) {
    $class =  $item->getAttribute("class");
    if (strpos($class, 'some-class') !== false) {
        echo "<div>";
        echo $div->nodeValue;
        echo "</div>";
    } 
}

Если вы не хотите использовать DOMDocument (понятно, учитывая, что он больше предназначен для XML), попробуйте поискать библиотеки для композиторов. https://packagist.org/?query=html%20parser

0 голосов
/ 04 июля 2018

Для анализа элементов div вы можете использовать парсер. Есть много библиотек там. Одним из них является SimpleHtml Dom . Который имеет функции селектора, такие как следующие:

// Find all images 
foreach($html->find('img') as $element)  echo $element->src . '<br>';

// Find all links 
foreach($html->find('a') as $element) echo $element->href . '<br>';

Также доступны некоторые php html парсеры в стиле селектора JQuery. Один (но я еще не использовал его) в: https://github.com/tburry/pquery

Вы также можете пойти по AJAX-пути на фронтальном сайте, но в этом случае вам придется использовать jsonp, поскольку домен другой. Вы можете получить html через jsonp, поместить его в скрытый контейнер на странице для временного хранения и проанализировать данные из этого контейнера.

Я бы предпочел выполнить задачу на сервере. Причины:

a) It will not put pressure on the client computer/device. 
   As the browser page will have to pull data from another domain.
b) You can cache the data in server.
c) Parsing is costly. In some device the browser may go irresponsive.
d) In serverside you will be able handle the exceptions(if any occurs, like page unavailable, html structure of that page got changed etc) better than in a client's browser.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...