hababr
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору kenko2 У меня работает, фильтры последние поставил. UPD: В другом браузере проверил - не работает. Сейчас посмотрю в чем разница. Добавлено: Разобрался, Озон почему-то рандомно меняет домен в адресе картинки после обновления страницы. Обновленное правило: Код: {"OZON.ru":{"link":"^(ozon\\.ru/(?:product/[\\w-]+|context/detail/id/\\d+))/.*?(?:\\?|$)","res":":\nconst r = []\ntry {\n if (!$[0].includes('/reviews')) {\n const doc = new DOMParser().parseFromString($._, \"text/html\");\n const title = doc.querySelector('title').textContent;\n\n // product images\n let data = JSON.parse(doc.querySelector('div[id^=\"state-webGallery-\"]').dataset.state);\n data.images?.forEach(i => r.push([i.src, i.alt || title]));\n data.videos?.forEach(v => r.push([v.url, v.name || title]));\n }\n\n // reviews images\n const rUrl = $[0].match(/^(.+?\\/product\\/[\\w-]+)(\\/|$)/)?.[1] + '/reviews/?sort=usefullness_desc';\n const x = new XMLHttpRequest;\n x.open('GET', rUrl, false);\n x.send();\n const data = JSON.parse(x.responseText?.match(/<div id=\"state-webListReviews.+?data-state='(.+?)'/i)[1]);\n\n data.reviews.forEach(f => {\n const c = f.content;\n [...c.photos||[], ...c.videos||[]].forEach(p => {\n const text = ['⭐' + c.score];\n if (c.comment) text.push(c.comment);\n if (c.positive) text.push('👍🏻 ' + c.positive);\n if (c.negative) text.push('👎🏻 ' + c.negative);\n if (f.createdAt) text.push(new Date(f.createdAt*1000).toISOString().substring(0,10))\n r.push([p.url, text.join(' | ')]);\n });\n });\n} catch (e) {\n console.error(e);\n}\n\nlet hasVideo = false;\nr.forEach(item => {\n if (item[0].endsWith('.m3u8')) {\n hasVideo = true;\n item[1] = `<imagus-extension type=\"videojs\" url=\"${item[0]}\"></imagus-extension>${item[1]}`;\n item[0] = '';\n }\n});\nif (hasVideo) {\n this.TRG.IMGS_ext_data = r;\n return { loop: 'imagus://extension' };\n}\n\nreturn r;","img":"((?:ir(?:-\\d)?|cdn\\d)\\.ozone\\.ru/s3/(rp-photo-\\d+|multimedia-\\w+|video[-\\d]*)/)(?:wc\\d+/)?(.+\\.jpe?g)","loop":2,"to":":\nif ($[2]?.startsWith('video')) {\n if (!$[2].includes('-')) $[2] += '-7';\n let id = /[0-9A-Z]{20,}/.exec($[0])[0];\n return `https://v.ozone.ru/vod/${$[2]}/${id}/master.m3u8`;\n} else {\n return $[1] + $[3];\n}","note":"hababr\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=2238&limit=1&m=1#1\nOLD\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=2080#7\nhttp://forum.ru-board.com/topic.cgi?forum=5&topic=50874&start=1880#15\n\n\n!!!\nВ поисковой выдаче подгружает не только фото товара, но и фото сделанные покупателями + отзывы.\n+\nКурсор рекомендуется наводить на описание товара.\n\n\nПРИМЕРЫ\nhttps://www.ozon.ru/category/noutbuki-15692/\nhttps://www.ozon.ru/search/?deny_category_prediction=true&from_global=true&text=Сетка+антимоскитная+на+дверь&product_id=263132888\nhttps://www.ozon.ru/category/stiralnyy-poroshok-14585/"}} | Добавлено: Еще обновление для Reddit. Там выкатили новый дизайн, может еще не у всех применился, у меня он по умолчанию, доступен по адресу sh.reddit.com. Предыдущий дизайн остался по адресу new.reddit.com, пользуюсь им, чтобы видео там открывалось надо обновить правило REDDIT_media: Код: {"REDDIT_media":{"link":"^(?:[a-z]{2,5}(?:-[a-z]{2})?\\.)?reddit\\.com/(?:r|user)/[^/]+/comments/([\\da-z]+)/[^/]+/(?:\\?utm_content=(?:title|thumbnail).*)?$","loop":1,"img":"^(g\\.redditmedia\\.com/[\\w-]+\\.gif\\?(?:[^&]+&)*?fm=mp4[^#]*)(.*)","to":":\nif($[2]!==0)return $[2]=='#mp4'?$[0]:$[1]+'#mp4'\nvar u,p,c,n=window.location.hostname.slice(-10)=='reddit.com'&&this.node\nif(!n)return''\nif(n.matches('div.link a.thumbnail,div.link a.thumbnail>img, div.link a.title, div.link a.thumbnail.image')) {\n p=n;while((p=p.parentElement)&&!p.matches('div.link'));\n u=p.dataset, u=u.url||u.hrefUrl\n if(u&&/(v\\.redd\\.it|\\.reddit\\.com\\/gallery)\\//.test(u))return u\n c=p&&p.querySelector('div.expando[data-cachedhtml]')\n c=c&&c.getAttribute('data-cachedhtml')\n u=c&&c.match(/(?:<a href|(?:class=\"preview\"|<source) src)=\"([^\"]+)/g)\n if(u) {\n u=u.map(function(i){\n var u=i.slice(i.lastIndexOf('\"')+1).replace(/&/g,'&');\n return u+(i[1]=='s'?'#mp4':'')\n });\n u=c.indexOf('<source')!=-1?u.reverse():u\n return u.length?u.join('\\n'):''\n }\n u=p.dataset, u=u.url||u.hrefUrl\n}else if(n.matches('a.Post__titleLink')) {\n u = n.closest('.Post__top').querySelector('a.PostThumbnail').href\n}else if(n.matches('a[data-click-id=body]>div>h3,.Post div>div[role=img]')){\n p=n.closest('div[id^=t3_]');\n if(p&&p.querySelector('p,i.icon-text'))return ''\n p=p.querySelector('a>.icon-outboundLink')\n p=p ? p.parentElement : {href: '//www.reddit.com/by_id/t3_'+$[1]+'.json'}\n p=this.find({href: p.href, IMGS_TRG: n})\n n.title = n.getAttribute('aria-label') || n.title\n return (Array.isArray(p) ? p.join('\\n') : (p === null ? 'null' : p)) || ''\n}\nreturn u&&/^(https?:)?\\/\\/i\\.redd\\.?it/.test(u)?u:''"}} |
| Всего записей: 108 | Зарегистр. 21-07-2014 | Отправлено: 12:59 28-12-2023 | Исправлено: hababr, 14:17 28-12-2023 |
|