Ошибка при попытке получить HTML код страницы встраивания в Instagram - PullRequest
0 голосов
/ 16 июня 2019

Я пытаюсь получить HTML-код страниц встраивания Instagram для моего API, но он возвращает мне странную ошибку, и я не знаю, что делать сейчас, потому что я новичок в PHP. Код работает на других сайтах.

Я уже пробовал это на других сайтах, таких как apple.com, и странно то, что когда я вызываю эту функцию на «обычной» странице публикации, она работает, ошибка появляется только тогда, когда я вызываю ее по URL «/ embed» .

Это мой код PHP:

<?php
    if (isset($_GET['url'])) {
        $filename = $_GET['url'];
        $file = file_get_contents($filename);
        $dom = new DOMDocument;
        libxml_use_internal_errors(true);
        $dom->loadHTML($file);
        libxml_use_internal_errors(false);
        $bodies = $dom->getElementsByTagName('body');
        assert($bodies->length === 1);
        $body = $bodies->item(0);
        for ($i = 0; $i < $body->children->length; $i++) {
            $body->remove($body->children->item($i));
        }
        $stringbody = $dom->saveHTML($body);
        echo $stringbody;
    }
?>

Я называю API следующим образом:

https://api.com/get-website-body.php?url=http://instagr.am/p/BoLVWplBVFb/embed

Моя цель - получить содержание сайта, как, например, когда я называю этот код на URL https://apple.com, например.

1 Ответ

0 голосов
/ 16 июня 2019

Вы можете использовать прямой URL для удаления данных, если вы используете CURL и он быстрее, чем file_get_content. Вот код скручивания для разных URL, и он будет отбирать только данные тела.

if (isset($_GET['url'])) {
    // $website_url = 'https://www.instagram.com/instagram/?__a=1';
    // $website_url = 'https://apple.com';
    // $website_url = $_GET['url'];
    $website_url = 'http://instagr.am/p/BoLVWplBVFb/embed';
    $curl = curl_init();
    //curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_URL, $website_url);
    curl_setopt($curl, CURLOPT_REFERER, $website_url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0(Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/66.0');
    $str = curl_exec($curl);
    curl_close($curl);

        $json = json_decode($str, true);
        print_r($str); // Just taking tha page as it is

        // Taking body part alone and play as your wish
        $dom = new DOMDocument;
        libxml_use_internal_errors(true);
        $dom->loadHTML($str);
        libxml_use_internal_errors(false);
        $bodies = $dom->getElementsByTagName('body');
        foreach ($bodies as $key => $value) {
            print_r($value);// You will all content of body here
    }
}

ПРИМЕЧАНИЕ: здесь вы не хотите использовать https://api.com/get-website-body.php?url=....

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