Шляхом Альбірео

НовиниЗаписиPHPRSS фільтри парсінгу

2022.07.21
Парсінг каналу новин, фільтрація і чистка сміття в текстовому файлі

NoteТестування окремих регулярних виразів для очищення і форматування RSS-каналів.

/* Приклади на ресурсі regex101.com */

[Txt]

Посилання. Пошук пробілів різного гатунку (дивитись на ресурсі з модифікатором ~ig). // Видалення прикладу з пошука пробілів дивись у тексті Посилання. Пошук порожніх парних тегів HTML, за виключенням окремих тегів canvas, script, iframe тощо. // Видалення прикладу з пошука порожніх парних тегів дивись у тексті

NoteRegex для видалення тегів HTML-XML, стилів, форм і пробілів скриптом РНР через масив.

/* Робочі приклади регулярних виразів */

[PHP]

$patterns = array(); $patterns[0] = '/<\/?(aside|blockquote|span|samp|em)[^>]*\>/i'; // Видаляємо парні теги, тексти лишаються $patterns[1] = '/(<style>).*?(<\/style>)/uis'; // Видаляємо загальні стилі $patterns[2] = '/(<script.*?[$>]).*?(<\/script>)/uis'; // Видаляємо скрипти $patterns[3] = '/(<!--).*?(-->)/uis'; // Видаляємо коментарі $patterns[4] = '/(<form.*?[$>]).*?(<\/form>)/uis'; // Видаляємо форми $patterns[5] = '/(<button.*?[$>]).*?(<\/button>)/uis'; // Видаляємо кнопки (парний тег форми) $patterns[6] = '/(<input.*?[$>])/uis'; // Видаляємо інпути (одинарний тег форми) $patterns[7] = '/\s?class=["][^"]*"\s?/iu'; // Видаляємо вбудовані класи $patterns[8] = '/\s?title=["][^"]*"\s?/iu'; // Видаляємо вбудовані тайтли $patterns[9] = '/\s?style=["][^"]*"\s?/iu'; // Видаляємо вбудовані стилі $patterns[10] = '/\s?id=["][^"]*"\s?/iu'; // Видаляємо вбудовані айді $patterns[11] = '/<hr\b[^>]*>/i'; // Видаляємо роздільні лінії $patterns[12] = '/<br\b[^>]*>/i'; // Видаляємо брейки // Видаляємо нерозривні пробіли в одному паттерні $patterns[13] = '~&(?:(?:nb|thin|zwnb|e[nm])sp|zwnj|#xfeff|#xa0|#160|#65279);~i'; // Видаляємо порожні теги крім canvas, script, iframe (але, запис: !iframe означатиме, що <iframe></iframe> буде видалений) $patterns[14] = '~<((?!(canvas|script|iframe))\w+)[^>]*>(?>[\p{Z}\p{C}]|(?R))*<\/\1>~i'; // Видаляємо зайві пробіли (бажано вжити останнім кроком) $patterns[15] = '/\s+/u'; $replacements = array(); $replacements[0] = ' '; $replacements[1] = ' '; $replacements[2] = ' '; $replacements[3] = ' '; $replacements[4] = ' '; $replacements[5] = ' '; $replacements[6] = ' '; $replacements[7] = ' '; $replacements[8] = ' '; $replacements[9] = ' '; $replacements[10] = ' '; $replacements[11] = ' '; $replacements[12] = ' '; $replacements[13] = ' '; $replacements[14] = ' '; $replacements[15] = ' '; $result = preg_replace($patterns, $replacements, $string); // Отримання результату

NoteДодатковий CSS для збільшення картинок при наведенні на неї мишкою.

/* Hover zoom class для цього прикладу*/

[CSS]

.zoom {transition: all 0.4s linear; margin: 0 auto;} .zoom:hover {transform: scale(1.8,1.8);}
Warning: file_get_contents(https://novynarnia.com/feed/): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in /volume1/web/albireo/albireo-data/pages/notabene/php/rss-text-analitic/rss-regex/info.php on line 100 Fatal error: Uncaught Exception: String could not be parsed as XML in /volume1/web/albireo/albireo-data/pages/notabene/php/rss-text-analitic/rss-regex/info.php:102 Stack trace: #0 /volume1/web/albireo/albireo-data/pages/notabene/php/rss-text-analitic/rss-regex/info.php(102): SimpleXMLElement->__construct('') #1 /volume1/web/albireo/albireo-data/pages/notabene/php/rss-text-analitic/rss-regex/index.php(33): include('/volume1/web/al...') #2 /volume1/web/albireo/albireo-data/layout/main.php(31): require('/volume1/web/al...') #3 /volume1/web/albireo/albireo/lib/functions.php(178): require('/volume1/web/al...') #4 /volume1/web/albireo/albireo/lib/functions.php(237): _getContentFile('/volume1/web/al...') #5 /volume1/web/albireo/albireo/albireo.php(12): pageOut() #6 /volume1/web/albireo/index.php(42): require('/volume1/web/al...') #7 {main} thrown in /volume1/web/albireo/albireo-data/pages/notabene/php/rss-text-analitic/rss-regex/info.php on line 102