У меня есть локальный интранет-сайт, который я разрабатываю, на котором я хочу отображать RSS-каналы с других сайтов. В настоящее время он построен на Concrete5 CMS, и я использую плагин для отображения RSS для отображения каналов. Плагин использует SimplePie для разбора канала. По умолчанию плагин отображает весь контент RSS. Я настроил плагин (SimplePie) для отображения только заголовка со ссылкой, датой и первым изображением в каждом посте / записи.
Я нашел эту функцию, которую я передаю $item->get_content()
, чтобы получить источник первого изображения:
function getFirstImage($text) {
$text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
$pattern = "/<img[^>]+\>/i";
preg_match($pattern, $text, $matches);
$text = $matches[0];
return $text;
}
function scrapeImage($text) {
$pattern = '/src=[\'"]?([^\'" >]+)[\'" >]/';
preg_match($pattern, $text, $link);
$link = $link[1];
$link = urldecode($link);
return $link;
}
Работает нормально, проблема в том, что в некоторых фидах есть реклама, которая иногда размещается перед фактическим содержанием публикации, поэтому эта функция возвращает URL объявления. Очевидно, что эти объявления RSS предназначены для людей, которые используют rss-ридеры, но их показ на сайте очень раздражает.
Если я попытаюсь нацелиться на точные теги, кроме <img>
в пределах preg_match()
, я чувствую, что это будет работать только для определенного фида, с которого я взял тег. (Например, если я пытаюсь использовать preg_match()
, чтобы найти только изображения внутри тегов <p>
)
Как я могу получить первое изображение из самого сообщения, которое не является рекламой, без необходимости изменять код для каждого канала, который я хочу отображать?