Как RM VK Sender парсит картинки из тела статьи Joomla
Чтобы пост в ВК был красивым, нужна качественная картинка. Разбираем алгоритм: как компонент находит изображение в HTML статьи, проверяет формат, конвертирует WebP в JPEG и загружает в ВК. С кодом и объяснением приоритетов.
Алгоритм
6 шагов парсинга
1. Читает поле fulltext. Берёт HTML материала из #__content. Смотрит весь контент статьи — включая текст после разделителя «Читать далее».
2. Ищет img через DOMDocument. Не regex — DOMDocument надёжнее парсит HTML. Находит все <img>, берёт первый с валидным src.
3. Проверяет URL. Относительные пути (images/photo.jpg) превращает в абсолютные (https://site.ru/images/photo.jpg). Пропускает data-URI и SVG.
4. Скачивает файл. Через cURL с таймаутом 10 секунд. Сохраняет во временную папку /tmp. Проверяет размер — до 50 МБ.
5. Определяет формат. Через getimagesize() — WebP, PNG, GIF, BMP, JPEG. Конвертирует в JPEG с качеством 90 через GD.
6. Загружает в ВК. Через photos.getWallUploadServer + photos.saveWallPhoto. Получает ID фото и прикрепляет к посту.
Приоритеты
Какая картинка берётся первой
| Приоритет | Источник |
|---|---|
| 1 | Вводное изображение (thumbnail Joomla) — если задано в материале |
| 2 | Первая картинка в поле fulltext (тело статьи) |
| 3 | Первая картинка в поле introtext (вводный текст) |
| 4 | Если картинки нет — пост публикуется без изображения |
Код
Как выглядит поиск картинки
$dom = new DOMDocument();
@$dom->loadHTML('<meta charset="UTF-8">' . $fulltext);
$images = $dom->getElementsByTagName('img');
foreach ($images as $img) {
$src = $img->getAttribute('src');
if (empty($src) || strpos($src, 'data:') === 0) continue;
$url = $this->makeAbsolute($src);
if ($this->isValidImage($url)) return $url;
}
return null;Ключевое: meta charset="UTF-8" перед загрузкой HTML. Без него DOMDocument ломает кириллицу в атрибутах alt и title — картинка может не найтись.
Fallback
Что если картинки нет вообще
Компонент публикует текст без изображения. Лучше так, чем пропустить пост целиком. Плюс в настройках есть опция «Только с картинкой» — если включена, пост без изображения вообще не публикуется. Оба варианта рабочие, выбирайте по задаче редакции.
Кейс · Симметрия
Мебельная компания: 100 % картинок благодаря порядку парсинга
Задача: «Симметрия» — мебельная компания из Перми. Раньше при публикации в ВК картинка бралась из вводного изображения Joomla — но у многих материалов вводное не было задано, и посты уходили серым текстом.
Что сделали: настроили RM VK Sender с приоритетом «вводное → fulltext». Для материалов, где thumbnail не задан, компонент ищет первую картинку в теле. Плюс — оставили опцию «Только с картинкой» — если картинки совсем нет, пост не публикуется.
Результат: 100 % постов с картинками. Даже материалы без явного thumbnail уходят с фотографией из текста. Вовлечённость группы +38 % за 2 месяца. Редакция перестала проверять каждый пост вручную.
Вопросы и ответы
Частые вопросы
Что если в статье несколько картинок?
Берётся первая по порядку в HTML. Так пост выглядит единообразно. Хотите другую — поставьте вводное изображение в материале, оно приоритетнее.
Можно ли указать конкретную картинку?
Да. Задайте вводное изображение в материале Joomla — компонент возьмёт именно его, а не первое из тела.
Почему картинка не нашлась, хотя она есть?
Проверьте лог компонента. Частые причины: относительный URL, битый файл, таймаут скачивания (медленный сервер). В 90 % случаев — решается за минуту.
Что если статья — с видео вместо картинки?
Компонент берёт превью видео, если оно есть в HTML как img. Если только iframe — пост уйдёт без картинки. Решается вручную через вводное изображение.
Хотите, чтобы картинки всегда были в постах?
Установим RM VK Sender. Проверим на ваших статьях — с WebP, PNG, GIF. Настроим приоритет парсинга под редакцию.
Обсудить задачу →




Messenger Max