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