Добавить динамический контент с другого сайта к себе на сайт с помощью 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