newz20

<<< Назад

Получение данных со стороннего сайта (аналог веб-переменным)

Научим систему таскать целые куски сайтов

Из-за возникшей недавно необходимости получить БОЛЬШОЙ кусок данных с сайта, начал ковырять веб-переменные, но получить большой кусок данных оказалось не так просто. Все регулярные выражения на тестах выдавали нужные данные, но в модуле этот код не работал. Разобраться в причинах такого поведения мне не удалось. Может это ограничение в системе или БД. Мне удалось взять маленький кусок с сайта, но получив эти данные они смотряться ужастно. Полученный кусок данных небольшого размера имел побочный код, но его оказалось можно просто вычистить.
Благодаря поискам, решение было найдено и большой кусок кода был получен. При помощи Егора и Skysilver мне удалось привести это решение к нужному виду.

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

// Первоисточник кода http://blogo-daru.ru/2016/11/27/dobavit-kontent-s-drugogo-sajta-k-sebe-na-sajt/   
// с кодировкой возможны проблемы, поэтому если вдруг появятся каркозябры, попробуйте добавить следующую строчку кода 
        header('Content-Type: text/html; charset=windows-1251');

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

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

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

    // находим конец необходимого фрагмента кода (начало ненужного уже кода)
    $pos = strpos($content, '<div id="social">');

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

    //если в нужном контенте встречается не нужный кусок текста, то его вырезаем (Точнее тут происходит замена на "ничего") этот  кусок кода можно повторять несколько раз, для удаления всего лишнего.
    $content = str_replace('текст, который нужно вырезать','', $content); 

    // выводим необходимый контент.
    //debmes($content);

// очищаем полученный код от лишних тэгов, перечисляем только те которые удалять не надо. https://php.ru/manual/function.strip-tags.html
     $content = strip_tags($content, '<H2><p><a>');
// Заменяем куски кода на нужное нам (здесь после очистки из-за особенностей кода пришлось перед каждой большой точкой вначале строки вставить перенос строки ) https://php.ru/manual/function.str-ireplace.html
//На самом деле это можно делать и в коде выше, там где мы удаляем лишнее, но здесь мне показалось это удобнее и логичнее для формирования конечного вида плюс внесена регистро-независимость. Код так же можно дублировать по несколько раз.
     $content = str_ireplace("&bull;", "<br> &bull;", $content);
//записываем в свойство
 sg('out_ip.value_old',$content);

Вывод этого свойства на страницу делаю через html.

Не забываем нажимать палец вверх, это стимулирует авторов к написанию других статей.

Обсуждение (1) (6)

Смотрите так же:
26.09.2018 Светильник на ws2812 + светильник с аккумулятором (часть прошивка)
24.09.2018 Светильник на ws2812 + светильник с аккумулятором (часть сборка)
17.09.2018 Немного про правильную перезагрузку.
14.09.2018 Светильник на ws2812 + светильник с аккумулятором

Краснодар, Россия

На форуме: newz20