Совместное использование SimplePie и Simple HTML DOM

Я пытаюсь использовать SimplePie, чтобы получить список ссылок через RSS-каналы, а затем очистить эти каналы, используя Simple HTML DOM для получения изображений. Я могу заставить SimplePie работать, чтобы тянуть ссылки и сохранять их в массиве. Я также могу использовать анализатор Simple HTML DOM, чтобы получить ссылку на изображение, которое я ищу. Проблема в том, что когда я пытаюсь использовать SimplePie и Simple HTML DOM одновременно, я получаю ошибку 500. Вот код:

set_time_limit(0);
error_reporting(0);

$rss = new SimplePie();
$rss->set_feed_url('http://contently.com/strategist/feed/');
$rss->init();

foreach($rss->get_items() as $item)
$urls[] = $item->get_permalink();
unset($rss);

/*
$urls = array(
'https://contently.com/strategist/2016/01/22/whats-in-a-spotify-name-and-5-other-stories-you-should-read/',
'https://contently.com/strategist/2016/01/22/how-to-make-content-marketing-work-inside-a-financial-services-company/',
'https://contently.com/strategist/2016/01/22/glenn-greenwald-talks-buzzfeed-freelancing-the-future-journalism/',
...
'https://contently.com/strategist/2016/01/19/update-a-simpler-unified-workflow/');
*/

foreach($urls as $url) {
$html = new simple_html_dom();
$html->load_file($url);
$images = $html->find('img[class=wp-post-image]',0);
echo $images;
$html->clear();
unset($html);
}

Я закомментировал массив urls, но он идентичен массиву, созданному циклом SimplePie (я создал его вручную из результатов). Он не выполняется по команде поиска в первый раз в цикле. Если я закомментирую строку $ rss-> init () и использую статический массив url, весь код выполняется без ошибок, но не дает желаемого результата — конечно. Любая помощь очень ценится!

0

Решение

Там странная несовместимость между simple_html_dom а также SimplePie, Загрузка HTML, simple_html_dom->root не загружен, вызывая ошибку для любой другой операции.

Любопытно, что переходя в режим функций вместо объектного режима, для меня это работает нормально:

$html = file_get_html( $url );

вместо:

$html = new simple_html_dom();
$html->load_file($url);

Тем не мение, simple_html_dom Известно, что вызывает проблемы, прежде всего об использовании памяти.

Отредактировано:

ОК, я нашел ошибку.
Он проживает на simple_html_dom->load_file(), который вызывает стандартную функцию file_get_contents() а затем проверьте результат через error_get_last() и — если обнаружена ошибка — сбросить эти собственные данные. Но если ошибка произошла раньше (в моем тесте SimplePie вывести предупреждение ./cache is not writeable) эта ранее ошибка интерпретируется simple_html_dom как file_get_contents() потерпеть поражение.

Если у вас установлен PHP 7, вы можете позвонить error_clear_last() после unset($rss)и твой код должен работать. В противном случае вы можете использовать мой код выше или предварительно загрузить HTML-данные в переменную, а затем вызвать simple_html_dom->load() вместо simple_html_dom->load_file()

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]