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