special

Добавить динамический контент с другого сайта к себе на сайт с помощью PHP

Получить Дконтент с другого сайта

Вам понравилась динамическая информация на другом сайте - вот Вам простой способ как добавить к себе на сайт динамические данные с другого источника (погода, курсы биткоина, валют, виджеты и т.д.).

Вам не потребуются глубокие знания программирования php для быстрой настройки - достаточно подставить свои данные и на вашем сайте появится новый контент с стороннего сайта.

Функция PHP file_get_contents (PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8) "Получить содержимое файла в виде одной строки" используется предпочтительно в случае необходимости вернуть содержимое файла (запроса) в строке ответа.

Я лично думал, что для этой цели потребуется глубокое знание php, однако мой знакомый программист Zanner подсказал отличный способ, состоящий из нескольких строк кода, кроме этого, я нашел на одном ресурсе похожую информацию и код.

Чтобы заставить все работать, выполняем следующие рекомендации.

Вариант 1

Создаем файл с произвольным названием и расширением php, например, file.php и добавляем в него следующий php-код:

    <?
        $context = stream_context_create(
        ['http' => ['method' => 'GET', 'protocol_version' => '1.1', 'header' => ['User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0', 'Connection: close',]]]
        );

        //тут сторонняя страница сайта, с которой будем брать контент
        $stream = @fopen('http://site.ru/page', 'r', false, $context) or die ('Error connecting to weather!');

        //тут получаем страницу
        $webpage_data = @stream_get_contents($stream);

        //тут получаем информацию, в том числе заголовки ответа
        $data = @stream_get_meta_data($stream);

        if ($webpage_data)
        {
            // Определяем начало и конец необходимого фрагмента кода из которого мы возьмем весь контент (!не забываем про экранирование двойных кавычек)
            preg_match("/<div class=\"widget hidden\">.*?<\/div>/si", $webpage_data, $matches);

            // Если в нужном контенте встречается не нужный кусок текста (!пример в регулярном выражении), то его вырезаем
            $matches = preg_replace('/<i>.*?<\/i> <p><p>/', '<p>', $matches);

            // Вывод полученной и обработанной информации на экран
            // echo iconv('UTF-8','Windows-1251',$matches[0]); в случае если нужна перекодировка UTF-8 -> Windows-1251
            echo $matches[0];
        }
        else {echo "ИЗВИНИТЕ, ИНФОРМАЦИЯ НЕ ДОСТУПНА, ПОПРОБУЙТЕ ПОЗЖЕ...";} // обработчик ошибок

    ?>
    

Если нужно записать данные в файл file_print.php (установите права на запись!), код следующий:

    <?
        ob_start();

        // определяем файл для записи (установите права на запись!)
        $file_out = '/path-to-file/file_print.php';

        $context = stream_context_create(
        ['http' => ['method' => 'GET', 'protocol_version' => '1.1', 'header' => ['User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0', 'Connection: close',]]]
        );

        //тут сторонняя страница сайта, с которой будем брать контент
        $stream = @fopen('http://site.ru/page', 'r', false, $context) or die ('Error connecting to weather!');

        //тут получаем страницу
        $webpage_data = @stream_get_contents($stream);

        //тут получаем информацию, в том числе заголовки ответа
        $data = @stream_get_meta_data($stream);

        if ($webpage_data)
        {
            // Определяем начало и конец необходимого фрагмента кода из которого мы возьмем весь контент (!не забываем про экранирование двойных кавычек)
            preg_match("/<div class=\"widget hidden\">.*?<\/div>/si", $webpage_data, $matches);

            // Если в нужном контенте встречается не нужный кусок текста (!пример в регулярном выражении), то его вырезаем
            $matches = preg_replace('/<i>.*?<\/i> <p><p>/', '<p>', $matches);

            // Вывод полученной и обработанной информации на экран
            // echo iconv('UTF-8','Windows-1251',$matches[0]); в случае если нужна перекодировка UTF-8 -> Windows-1251
            echo $matches[0];
        }
        else {echo "ИЗВИНИТЕ, ИНФОРМАЦИЯ НЕ ДОСТУПНА, ПОПРОБУЙТЕ ПОЗЖЕ...";} // обработчик ошибок

        // записываем данные в файл
        $output = ob_get_contents();
        ob_end_clean();
        file_put_contents($file_out, $output);
    ?>
    

В адресной строке браузера запускаем данный файл (http://my-site.ru/file.php), на странице будет выведен контент со стороннего сайта.

Если вы открываете URI со специальными символами, такими как пробелы, вам необходимо закодировать URI с помощью urlencode ().

Вариант 2

Создаем в корне сайта файл с произвольным названием, например, file.php и добавляем в него следующий php-код:

    <?php
        // с кодировкой возможны проблемы, поэтому если вдруг появятся каркозябры, попробуйте добавить следующую строчку кода
        header('Content-Type: text/html; charset=windows-1251');

        // сторонняя страница сайта, с которой будем брать контент.
        $content = file_get_contents('http://site.ru/page');

        // определяем начало необходимого фрагмента кода, до которого мы удалим весь контент
        $pos = strpos($content, '<div class="start"><span class="needed-text">');

        // удаляем все до нужного фрагмента
        $content = substr($content, $pos);

        // находим конец необходимого фрагмента кода
        $pos = strpos($content, '</span></div>');

        // отрезаем нужное количество символов от конца фрагмента
        $content = substr($content, 0, $pos);

        //если в нужном контенте встречается не нужный кусок текста, то его вырезаем
        $content = str_replace('текст, который нужно вырезать','', $content);

        // выводим необходимый контент
        echo $content;
    ?>
    

Вместо:

http://site.ru/page — страница сайта, откуда нужно взять контент

<div class="start"><span class="needed-text"> — заменить на фрагмент кода, откуда начинается необходимый контент

</span></div> — заменить на фрагмент кода, где заканчивается нужный контент

Например, если нужный контент лежит в конструкции <div class="start"><span class="needed-text">, а заканчивается фрагмент конструкцией </span></div>, то вставляем в наш php-код эти значения, соответственно.




Для того, чтобы добавить этот контент на внутреннюю страницу нашего сайта, то добавляем в нее (внутреннюю страницу) следующий код:

    <?
        $content = file_get_contents('http://my-site.ru/file.php');
        echo $content;
    ?>
    

В адресной строке браузера запускаем данный файл (http://my-site.ru/file.php) и если все сделано правильно, на странице будет выведен контент со стороннего сайта.

Я не имею квалификацию в php но подобным кодом пользуюсь на этом сайте - у вас все получится :)

Via blogo-daru.ru & php.su & wiki


Created/Updated: 02.02.2022