Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Imagus (Часть 2)

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166

Открыть новую тему     Написать ответ в эту тему

Maz



Дед Мазай
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Предыдущие темы: Часть 1

Автор - Deathamns [snmahtaeD] | Сообщество на Reddit
СКАЧАТЬ IMAGUS | СТРАНИЦА НА РУССКОМ Rodny (первый автор данной темы)


Всего записей: 39672 | Зарегистр. 26-02-2002 | Отправлено: 23:06 05-12-2021 | Исправлено: kenko2, 14:22 15-10-2025
kenko2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZverX

Цитата:
Может быть в п.19 ЧаВо, добавить пояснение о том - как удалить строчку в "Разрешения", если было случайное нажатие?

Да можно наверное, всех нюансов все равно не учтешь. Но вообще ЧаВо и существует для того чтобы его сначала читать, а потом что-то ставить и делать.

Всего записей: 4700 | Зарегистр. 10-11-2005 | Отправлено: 16:27 17-05-2025 | Исправлено: kenko2, 16:32 17-05-2025
FiLinX



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
попался тут некий ресурс, где можно и сгенерировать самому, и уже доступны  -  созданные нейронками имаджы
https://lovescape.com/
ну и вот допустим прям на главной там сразу галерея многих доступна, и имаджусом с них достаёт только превью картинку, но под ней есть и анимированный видео образ - хотелось бы чтоб и иго имаджусом тоже выдавало..
анимированное доступно если пройти на выбранную страницу, например  -  https://lovescape.com/character/StarryIsabel
превью картинка с неё  -  https://cdn.lovescape.com/cdn/avatars/c/e/d/ced404f4c8c0e5afff4c7fac25ab7952
анимация  -  https://public-video.lovescape.com/public/953809/df989a25edc549cf5f5844b702daee63/original/intro.mp4
 
я не логинился там, и возможно при логине там больше имаджей доступно..

Всего записей: 3215 | Зарегистр. 05-05-2010 | Отправлено: 16:17 23-05-2025
Shionsan

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Какой-то из фильтров работает буквально на любую ссылку и похоже выдает первую картинку со страницы по ссылке. Как его можно найти?

Всего записей: 4 | Зарегистр. 01-06-2011 | Отправлено: 19:22 31-05-2025
hababr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shionsan
Сделайте бэкап фильтров, а потом удаляйте фильтры частями и проверяйте.

Всего записей: 161 | Зарегистр. 21-07-2014 | Отправлено: 19:34 31-05-2025 | Исправлено: hababr, 19:34 31-05-2025
kenko2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shionsan

Цитата:
Какой-то из фильтров работает буквально на любую ссылку

А где конкретно, на каком сайте? Посмотрите, не включен ли у вас фильтр [MediaGrabber] (находится в самом конце списка фильтров, по дефолту выключен), обычно он срабатывает на многих ссылках.
 
Если вас раздражает слишком частое срабатывание Имагус, то есть средства его ограничить - например, можно настроить активацию расширения только по горячей клавише, или, если у вас Imagus Mod, отключать его когда это нужно кликом по значку на панели. Ну и черный и белый списки тоже в настройках можно сделать.
 

Цитата:
выдает первую картинку со страницы по ссылке

Не понятно о чем речь. Желательно приводить конкретные примеры.
 
hababr

Цитата:
Сделайте бэкап фильтров, а потом удаляйте фильтры частями и проверяйте.

Удалять это слишком радикально, проще отключать.
 
 
 

Всего записей: 4700 | Зарегистр. 10-11-2005 | Отправлено: 20:32 31-05-2025
Shionsan

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kenko2, hababr
После установки Imagus Mod эта проблема пропала, но появилась другая: ссылки в Steam и в Discord, которые раньше увеличивали превью теперь тупо выдают желтый или красный круг.
 
[LinkedMedia], [Local_Files], [MediaGrabber], [_dereferers_], [data:image], [HLS_Player], [Audio Formats], [Extension] - отключены.
 
У Imagus Mod нет какого-нибудь debug режима, чтобы можно было увидеть какой sieve срабатывает, чтобы его исправить или удалить к чертям? Их слишком много, и они явно реагируют не на то, что надо. А метод с "выцепляй нужный удаляя\выключая пачками" мягко-говоря садистский, учитывая их количество.
 
UPD: С Discord проблема в том, что у ссылок вида

Код:
https://cdn.discordapp.com/attachments/1376274676933988545/1378736213791477840/image.png?ex=683dafa9&is=683c5e29&hm=4998f18144ce5b4af04ce7161df41f285f0d4e476a075c08b1cf301a61e4853b&

Imagus зачем-то отрезает все что после "?".

Всего записей: 4 | Зарегистр. 01-06-2011 | Отправлено: 18:11 01-06-2025
kenko2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shionsan

Цитата:
ссылки в Steam и в Discord, которые раньше увеличивали превью теперь тупо выдают желтый или красный круг.

Все вопросы по работе расширения на конкретных сайтах должны сопровождаться ссылками на конкретные примеры.
 

Цитата:
[LinkedMedia], [Local_Files], [MediaGrabber], [_dereferers_], [data:image], [HLS_Player], [Audio Formats], [Extension] - отключены.

Это все обратно вам включить надо, кроме разве что [MediaGrabber]. Иначе многие фильтры у вас перестанут работать вообще. Проще всего это сделать удалив все фильтры и сделав обновление кнопкой "Обновить фильтры" на вкладке "Фильтры". После этого нужно нажать большую кнопку "Сохранить". Сегодня как раз было обновление фильтров и правил для SMH (оно раз в две недели, первого и 15 числа каждого месяца), так что обновлять фильтры вам все равно надо.
 
Вообще, если вы недавно пользуетесь расширением, то рекомендуется зайти в ЧаВо и выполнить настройку Имагус Мод так, как это рекомендовано в п.1. Там же и поясняющие скриншоты и GIF есть.

Всего записей: 4700 | Зарегистр. 10-11-2005 | Отправлено: 18:34 01-06-2025 | Исправлено: kenko2, 19:26 01-06-2025
Shionsan

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В итоге я накатил Imagus 0.9.9.1 обратно и большинство проблем как-то сами собой исчезли.

Всего записей: 4 | Зарегистр. 01-06-2011 | Отправлено: 18:13 02-06-2025
RedRocket

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, я сделал сито для offerup.com (сайт типа craigslist). Я не умею делать сита. Он сделан искусственным интеллектом и вроде как работает. Надеюсь, кто-то сможет его улучшить, если это будет необходимо.
 
{
  "OfferUp": {
    "link": "^offerup\\.com/item/detail/([a-f0-9-]+)",
    "res": ":\n// Extract unique high-resolution images from OfferUp item pages\nconst doc = new DOMParser().parseFromString($._, \"text/html\");\nconst images = [];\nconst seenFileHashes = new Set(); // Track unique images by their file hash\n\n// Extract all image URLs from the page source using regex\nconst imageRegex = /https:\\/\\/images\\.offerup\\.com\\/([^\"'\\s\\/]+)=\\/(\\d+x\\d+)\\/([a-f0-9]{4})\\/([a-f0-9]{32})\\.(jpg|jpeg|png|webp)/g;\nconst matches = [...$._.matchAll(imageRegex)];\n\n// Group images by their file hash (last part of URL) to identify unique images\nconst imageGroups = new Map();\n\nfor (const match of matches) {\n  const [fullUrl, hash, dimensions, folder, filename, ext] = match;\n  \n  // Skip very small images (likely profile pics or icons)\n  if (dimensions === '100x100' || dimensions === '50x50' || dimensions === '64x64') continue;\n  \n  // Use filename as unique identifier for the image\n  const imageId = filename;\n  \n  if (!imageGroups.has(imageId)) {\n    imageGroups.set(imageId, []);\n  }\n  \n  imageGroups.get(imageId).push({\n    url: fullUrl,\n    hash: hash,\n    dimensions: dimensions,\n    folder: folder,\n    filename: filename,\n    ext: ext,\n    width: parseInt(dimensions.split('x')[0]),\n    height: parseInt(dimensions.split('x')[1])\n  });\n}\n\n// For each unique image, pick the best quality version\nfor (const [imageId, variants] of imageGroups) {\n  // Sort by total pixels (width * height) to get highest quality\n  variants.sort((a, b) => (b.width * b.height) - (a.width * a.height));\n  \n  // Take the highest quality version that's not square-cropped\n  let bestImage = variants[0];\n  \n  // Prefer non-square images if available (they're usually not cropped)\n  for (const variant of variants) {\n    if (variant.width !== variant.height && (variant.width * variant.height) >= 400000) {\n      bestImage = variant;\n      break;\n    }\n  }\n  \n  // If we only have square images, pick the largest one\n  if (!bestImage || bestImage.width === bestImage.height) {\n    // Look for the largest available version, but try common high-res dimensions first\n    const preferredDimensions = ['750x1000', '1000x750', '1440x1920', '1512x2016', '2016x1512'];\n    \n    for (const prefDim of preferredDimensions) {\n      const found = variants.find(v => v.dimensions === prefDim);\n      if (found) {\n        bestImage = found;\n        break;\n      }\n    }\n  }\n  \n  if (bestImage) {\n    images.push([bestImage.url, '']);\n  }\n}\n\n// If we didn't get any images, try DOM parsing as fallback\nif (images.length === 0) {\n  const imgElements = doc.querySelectorAll('img[src*=\"images.offerup.com\"]');\n  \n  for (const img of imgElements) {\n    let src = img.src;\n    \n    // Skip small images\n    if (src.includes('/100x100/') || src.includes('/50x50/') || src.includes('/64x64/')) continue;\n    \n    // Extract filename to check for duplicates\n    const filenameMatch = src.match(/\\/([a-f0-9]{32})\\./); \n    if (filenameMatch && !seenFileHashes.has(filenameMatch[1])) {\n      seenFileHashes.add(filenameMatch[1]);\n      images.push([src, img.alt || '']);\n    }\n  }\n}\n\nreturn images.length > 0 ? images : null;",
    "img": "^(images\\.offerup\\.com/[^/]+=/)(\\d+x\\d+)/(.+)",
    "to": ":\n// Convert OfferUp image thumbnails to high resolution\nconst dimensions = $[2];\nlet newDimensions;\n\n// Map thumbnail sizes to high-res equivalents\nswitch (dimensions) {\n  case '250x250':\n  case '300x400':\n    newDimensions = '1440x1920';\n    break;\n  case '250x333':\n    newDimensions = '1512x2016';\n    break;\n  default:\n    // If already high-res or unknown, keep as is\n    return 'https://' + $[1] + dimensions + '/' + $[3];\n}\n\nreturn 'https://' + $[1] + newDimensions + '/' + $[3];",
    "note": "OfferUp image enlarger - works on item detail pages and converts thumbnails to high resolution.\n\nSupported pages:\n- https://offerup.com/item/detail/[item-id]\n- Search results linking to item pages\n\nImage URL patterns:\n- Thumbnail: https://images.offerup.com/HASH=/250x250/path\n- High-res: https://images.offerup.com/HASH=/1440x1920/path\n\nThe sieve will:\n1. Extract all images from item detail pages\n2. Convert thumbnail URLs to high-resolution versions\n3. Return a gallery of all available images for the item"
  }
}

Всего записей: 9 | Зарегистр. 28-09-2024 | Отправлено: 14:33 06-06-2025
kenko2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RedRocket

Цитата:
Здравствуйте, я сделал сито для offerup.com (сайт типа craigslist). Я не умею делать сита. Он сделан искусственным интеллектом и вроде как работает.

Этот код не в формате фильтра Имагус. Либо содержит ошибки (как минимум форматирование как я понимаю). Ваш код не импортируется. Если он у вас работает, значит у вас есть готовый фильтр? Экспортируйте его из своего Имагус и выложите здесь.

Всего записей: 4700 | Зарегистр. 10-11-2005 | Отправлено: 15:00 06-06-2025
hababr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kenko2
Да вроде импортируется. И даже работает.

Всего записей: 161 | Зарегистр. 21-07-2014 | Отправлено: 16:34 06-06-2025 | Исправлено: hababr, 16:51 06-06-2025
kenko2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hababr

Цитата:
Да вроде импортируется. И даже работает.

Есть просто скопировать код со страницы у меня выдает ошибку. Можешь свой фильтр выложить?

Всего записей: 4700 | Зарегистр. 10-11-2005 | Отправлено: 16:56 06-06-2025
hababr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kenko2

Код:
{"OfferUp":{"link":"^offerup\\.com/item/detail/([a-f0-9-]+)","res":":\n// Extract unique high-resolution images from OfferUp item pages\nconst doc = new DOMParser().parseFromString($._, \"text/html\");\nconst images = [];\nconst seenFileHashes = new Set(); // Track unique images by their file hash\n\n// Extract all image URLs from the page source using regex\nconst imageRegex = /https:\\/\\/images\\.offerup\\.com\\/([^\"'\\s\\/]+)=\\/(\\d+x\\d+)\\/([a-f0-9]{4})\\/([a-f0-9]{32})\\.(jpg|jpeg|png|webp)/g;\nconst matches = [...$._.matchAll(imageRegex)];\n\n// Group images by their file hash (last part of URL) to identify unique images\nconst imageGroups = new Map();\n\nfor (const match of matches) {\n  const [fullUrl, hash, dimensions, folder, filename, ext] = match;\n  \n  // Skip very small images (likely profile pics or icons)\n  if (dimensions === '100x100' || dimensions === '50x50' || dimensions === '64x64') continue;\n  \n  // Use filename as unique identifier for the image\n  const imageId = filename;\n  \n  if (!imageGroups.has(imageId)) {\n    imageGroups.set(imageId, []);\n  }\n  \n  imageGroups.get(imageId).push({\n    url: fullUrl,\n    hash: hash,\n    dimensions: dimensions,\n    folder: folder,\n    filename: filename,\n    ext: ext,\n    width: parseInt(dimensions.split('x')[0]),\n    height: parseInt(dimensions.split('x')[1])\n  });\n}\n\n// For each unique image, pick the best quality version\nfor (const [imageId, variants] of imageGroups) {\n  // Sort by total pixels (width * height) to get highest quality\n  variants.sort((a, b) => (b.width * b.height) - (a.width * a.height));\n  \n  // Take the highest quality version that's not square-cropped\n  let bestImage = variants[0];\n  \n  // Prefer non-square images if available (they're usually not cropped)\n  for (const variant of variants) {\n    if (variant.width !== variant.height && (variant.width * variant.height) >= 400000) {\n      bestImage = variant;\n      break;\n    }\n  }\n  \n  // If we only have square images, pick the largest one\n  if (!bestImage || bestImage.width === bestImage.height) {\n    // Look for the largest available version, but try common high-res dimensions first\n    const preferredDimensions = ['750x1000', '1000x750', '1440x1920', '1512x2016', '2016x1512'];\n    \n    for (const prefDim of preferredDimensions) {\n      const found = variants.find(v => v.dimensions === prefDim);\n      if (found) {\n        bestImage = found;\n        break;\n      }\n    }\n  }\n  \n  if (bestImage) {\n    images.push([bestImage.url, '']);\n  }\n}\n\n// If we didn't get any images, try DOM parsing as fallback\nif (images.length === 0) {\n  const imgElements = doc.querySelectorAll('img[src*=\"images.offerup.com\"]');\n  \n  for (const img of imgElements) {\n    let src = img.src;\n    \n    // Skip small images\n    if (src.includes('/100x100/') || src.includes('/50x50/') || src.includes('/64x64/')) continue;\n    \n    // Extract filename to check for duplicates\n    const filenameMatch = src.match(/\\/([a-f0-9]{32})\\./); \n    if (filenameMatch && !seenFileHashes.has(filenameMatch[1])) {\n      seenFileHashes.add(filenameMatch[1]);\n      images.push([src, img.alt || '']);\n    }\n  }\n}\n\nreturn images.length > 0 ? images : null;","img":"^(images\\.offerup\\.com/[^/]+=/)(\\d+x\\d+)/(.+)","to":":\n// Convert OfferUp image thumbnails to high resolution\nconst dimensions = $[2];\nlet newDimensions;\n\n// Map thumbnail sizes to high-res equivalents\nswitch (dimensions) {\n  case '250x250':\n  case '300x400':\n    newDimensions = '1440x1920';\n    break;\n  case '250x333':\n    newDimensions = '1512x2016';\n    break;\n  default:\n    // If already high-res or unknown, keep as is\n    return 'https://' + $[1] + dimensions + '/' + $[3];\n}\n\nreturn 'https://' + $[1] + newDimensions + '/' + $[3];","note":"OfferUp image enlarger - works on item detail pages and converts thumbnails to high resolution.\n\nSupported pages:\n- https://offerup.com/item/detail/[item-id]\n- Search results linking to item pages\n\nImage URL patterns:\n- Thumbnail: https://images.offerup.com/HASH=/250x250/path\n- High-res: https://images.offerup.com/HASH=/1440x1920/path\n\nThe sieve will:\n1. Extract all images from item detail pages\n2. Convert thumbnail URLs to high-resolution versions\n3. Return a gallery of all available images for the item"}}

Всего записей: 161 | Зарегистр. 21-07-2014 | Отправлено: 17:05 06-06-2025
kenko2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hababr
Спасибо.
 
RedRocket
Спасибо, данный фильтр действительно работает, но только частично. Он не показывает все фото товара, только первое. Я не знаю способен ли ИИ (или индусы которые его имитируют ) сделать галерею товара в фильтре.

Всего записей: 4700 | Зарегистр. 10-11-2005 | Отправлено: 17:23 06-06-2025
RedRocket

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кенко, ты уверен, что это не работает? Я вижу несколько изображений продукта и прокручиваю колесо мыши, чтобы успешно увидеть следующие. Единственная проблема в том, что первое изображение повторяется в позиции 2, насколько я могу судить. Затем вы должны увидеть другие изображения после 2-го. Может быть, я не то сито вставил. Вот опять. Это сделал Клод LOL
 

Код:
 
{"date":"","OfferUp":{"link":"^offerup\\.com/item/detail/([a-f0-9-]+)","res":":\n// Extract unique high-resolution images from OfferUp item pages\nconst doc = new DOMParser().parseFromString($._, \"text/html\");\nconst images = [];\nconst seenFileHashes = new Set(); // Track unique images by their file hash\n\n// Extract all image URLs from the page source using regex\nconst imageRegex = /https:\\/\\/images\\.offerup\\.com\\/([^\"'\\s\\/]+)=\\/(\\d+x\\d+)\\/([a-f0-9]{4})\\/([a-f0-9]{32})\\.(jpg|jpeg|png|webp)/g;\nconst matches = [...$._.matchAll(imageRegex)];\n\n// Group images by their file hash (last part of URL) to identify unique images\nconst imageGroups = new Map();\n\nfor (const match of matches) {\n  const [fullUrl, hash, dimensions, folder, filename, ext] = match;\n  \n  // Skip very small images (likely profile pics or icons)\n  if (dimensions === '100x100' || dimensions === '50x50' || dimensions === '64x64') continue;\n  \n  // Use filename as unique identifier for the image\n  const imageId = filename;\n  \n  if (!imageGroups.has(imageId)) {\n    imageGroups.set(imageId, []);\n  }\n  \n  imageGroups.get(imageId).push({\n    url: fullUrl,\n    hash: hash,\n    dimensions: dimensions,\n    folder: folder,\n    filename: filename,\n    ext: ext,\n    width: parseInt(dimensions.split('x')[0]),\n    height: parseInt(dimensions.split('x')[1])\n  });\n}\n\n// For each unique image, pick the best quality version\nfor (const [imageId, variants] of imageGroups) {\n  // Sort by total pixels (width * height) to get highest quality\n  variants.sort((a, b) => (b.width * b.height) - (a.width * a.height));\n  \n  // Take the highest quality version that's not square-cropped\n  let bestImage = variants[0];\n  \n  // Prefer non-square images if available (they're usually not cropped)\n  for (const variant of variants) {\n    if (variant.width !== variant.height && (variant.width * variant.height) >= 400000) {\n      bestImage = variant;\n      break;\n    }\n  }\n  \n  // If we only have square images, pick the largest one\n  if (!bestImage || bestImage.width === bestImage.height) {\n    // Look for the largest available version, but try common high-res dimensions first\n    const preferredDimensions = ['750x1000', '1000x750', '1440x1920', '1512x2016', '2016x1512'];\n    \n    for (const prefDim of preferredDimensions) {\n      const found = variants.find(v => v.dimensions === prefDim);\n      if (found) {\n        bestImage = found;\n        break;\n      }\n    }\n  }\n  \n  if (bestImage) {\n    images.push([bestImage.url, '']);\n  }\n}\n\n// If we didn't get any images, try DOM parsing as fallback\nif (images.length === 0) {\n  const imgElements = doc.querySelectorAll('img[src*=\"images.offerup.com\"]');\n  \n  for (const img of imgElements) {\n    let src = img.src;\n    \n    // Skip small images\n    if (src.includes('/100x100/') || src.includes('/50x50/') || src.includes('/64x64/')) continue;\n    \n    // Extract filename to check for duplicates\n    const filenameMatch = src.match(/\\/([a-f0-9]{32})\\./); \n    if (filenameMatch && !seenFileHashes.has(filenameMatch[1])) {\n      seenFileHashes.add(filenameMatch[1]);\n      images.push([src, img.alt || '']);\n    }\n  }\n}\n\nreturn images.length > 0 ? images : null;","img":"^(images\\.offerup\\.com/[^/]+=/)(\\d+x\\d+)/(.+)","to":":\n// Convert OfferUp image thumbnails to high resolution\nconst dimensions = $[2];\nlet newDimensions;\n\n// Map thumbnail sizes to high-res equivalents\nswitch (dimensions) {\n  case '250x250':\n  case '300x400':\n    newDimensions = '1440x1920';\n    break;\n  case '250x333':\n    newDimensions = '1512x2016';\n    break;\n  default:\n    // If already high-res or unknown, keep as is\n    return 'https://' + $[1] + dimensions + '/' + $[3];\n}\n\nreturn 'https://' + $[1] + newDimensions + '/' + $[3];","note":"OfferUp image enlarger - works on item detail pages and converts thumbnails to high resolution.\n\nSupported pages:\n- https://offerup.com/item/detail/[item-id]\n- Search results linking to item pages\n\nImage URL patterns:\n- Thumbnail: https://images.offerup.com/HASH=/250x250/path\n- High-res: https://images.offerup.com/HASH=/1440x1920/path\n\nThe sieve will:\n1. Extract all images from item detail pages\n2. Convert thumbnail URLs to high-resolution versions\n3. Return a gallery of all available images for the item"}}
 

Всего записей: 9 | Зарегистр. 28-09-2024 | Отправлено: 00:59 07-06-2025 | Исправлено: RedRocket, 04:58 07-06-2025
Sputnikk



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RedRocket
Цитата:
 сделан искусственным интеллектом
каким?

Всего записей: 8425 | Зарегистр. 17-10-2011 | Отправлено: 07:17 07-06-2025
kenko2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RedRocket

Цитата:
Кенко, ты уверен, что это не работает? Я вижу несколько изображений продукта и прокручиваю колесо мыши, чтобы успешно увидеть следующие.

Ваш код у меня не импортировался, а версия которую выложил выше hababr не показывает галерею товара. Эта версия нормально импортируется и работает. Спасибо за работающий фильтр, я включу его в нашу сборку.

Всего записей: 4700 | Зарегистр. 10-11-2005 | Отправлено: 10:38 07-06-2025
hababr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kenko2
Что странно, то что выложил я и последняя версия от RedRocket абсолютно идентичны. Разница только в том, что у меня отсутствует
Код:
"date":"",
Но это же не должно влиять.
 
Sputnikk
Цитата:
каким?
Claude

Всего записей: 161 | Зарегистр. 21-07-2014 | Отправлено: 11:26 07-06-2025 | Исправлено: hababr, 11:27 07-06-2025
kenko2



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hababr

Цитата:
Что странно, то что выложил я и последняя версия от RedRocket абсолютно идентичны. Разница только в том, что у меня отсутствует
Код:
"date":"",
Но это же не должно влиять.

Оно и не влияет, я это из кода фильтра всегда сразу удаляю перед импортом. Наверное все же какие-то различие есть.

Всего записей: 4700 | Зарегистр. 10-11-2005 | Отправлено: 11:54 07-06-2025
RedRocket

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я заметил, что по какой-то причине не могу импортировать тот, который опубликовал. Поэтому я вернулся, чтобы найти это снова
 

Код:
 
{
  "OfferUp": {
    "link": "^offerup\\.com/item/detail/([a-f0-9-]+)",
    "res": ":\n// Extract unique high-resolution images from OfferUp item pages\nconst doc = new DOMParser().parseFromString($._, \"text/html\");\nconst images = [];\nconst seenFileHashes = new Set(); // Track unique images by their file hash\n\n// Extract all image URLs from the page source using regex\nconst imageRegex = /https:\\/\\/images\\.offerup\\.com\\/([^\"'\\s\\/]+)=\\/(\\d+x\\d+)\\/([a-f0-9]{4})\\/([a-f0-9]{32})\\.(jpg|jpeg|png|webp)/g;\nconst matches = [...$._.matchAll(imageRegex)];\n\n// Group images by their file hash (last part of URL) to identify unique images\nconst imageGroups = new Map();\n\nfor (const match of matches) {\n  const [fullUrl, hash, dimensions, folder, filename, ext] = match;\n  \n  // Skip very small images (likely profile pics or icons)\n  if (dimensions === '100x100' || dimensions === '50x50' || dimensions === '64x64') continue;\n  \n  // Use filename as unique identifier for the image\n  const imageId = filename;\n  \n  if (!imageGroups.has(imageId)) {\n    imageGroups.set(imageId, []);\n  }\n  \n  imageGroups.get(imageId).push({\n    url: fullUrl,\n    hash: hash,\n    dimensions: dimensions,\n    folder: folder,\n    filename: filename,\n    ext: ext,\n    width: parseInt(dimensions.split('x')[0]),\n    height: parseInt(dimensions.split('x')[1])\n  });\n}\n\n// For each unique image, pick the best quality version\nfor (const [imageId, variants] of imageGroups) {\n  // Sort by total pixels (width * height) to get highest quality\n  variants.sort((a, b) => (b.width * b.height) - (a.width * a.height));\n  \n  // Take the highest quality version that's not square-cropped\n  let bestImage = variants[0];\n  \n  // Prefer non-square images if available (they're usually not cropped)\n  for (const variant of variants) {\n    if (variant.width !== variant.height && (variant.width * variant.height) >= 400000) {\n      bestImage = variant;\n      break;\n    }\n  }\n  \n  // If we only have square images, pick the largest one\n  if (!bestImage || bestImage.width === bestImage.height) {\n    // Look for the largest available version, but try common high-res dimensions first\n    const preferredDimensions = ['750x1000', '1000x750', '1440x1920', '1512x2016', '2016x1512'];\n    \n    for (const prefDim of preferredDimensions) {\n      const found = variants.find(v => v.dimensions === prefDim);\n      if (found) {\n        bestImage = found;\n        break;\n      }\n    }\n  }\n  \n  if (bestImage) {\n    images.push([bestImage.url, '']);\n  }\n}\n\n// If we didn't get any images, try DOM parsing as fallback\nif (images.length === 0) {\n  const imgElements = doc.querySelectorAll('img[src*=\"images.offerup.com\"]');\n  \n  for (const img of imgElements) {\n    let src = img.src;\n    \n    // Skip small images\n    if (src.includes('/100x100/') || src.includes('/50x50/') || src.includes('/64x64/')) continue;\n    \n    // Extract filename to check for duplicates\n    const filenameMatch = src.match(/\\/([a-f0-9]{32})\\./); \n    if (filenameMatch && !seenFileHashes.has(filenameMatch[1])) {\n      seenFileHashes.add(filenameMatch[1]);\n      images.push([src, img.alt || '']);\n    }\n  }\n}\n\nreturn images.length > 0 ? images : null;",
    "img": "^(images\\.offerup\\.com/[^/]+=/)(\\d+x\\d+)/(.+)",
    "to": ":\n// Convert OfferUp image thumbnails to high resolution\nconst dimensions = $[2];\nlet newDimensions;\n\n// Map thumbnail sizes to high-res equivalents\nswitch (dimensions) {\n  case '250x250':\n  case '300x400':\n    newDimensions = '1440x1920';\n    break;\n  case '250x333':\n    newDimensions = '1512x2016';\n    break;\n  default:\n    // If already high-res or unknown, keep as is\n    return 'https://' + $[1] + dimensions + '/' + $[3];\n}\n\nreturn 'https://' + $[1] + newDimensions + '/' + $[3];",
    "note": "OfferUp image enlarger - works on item detail pages and converts thumbnails to high resolution.\n\nSupported pages:\n- https://offerup.com/item/detail/[item-id]\n- Search results linking to item pages\n\nImage URL patterns:\n- Thumbnail: https://images.offerup.com/HASH=/250x250/path\n- High-res: https://images.offerup.com/HASH=/1440x1920/path\n\nThe sieve will:\n1. Extract all images from item detail pages\n2. Convert thumbnail URLs to high-resolution versions\n3. Return a gallery of all available images for the item"
  }
}
 

Всего записей: 9 | Зарегистр. 28-09-2024 | Отправлено: 08:50 09-06-2025
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166

Компьютерный форум Ru.Board » Компьютеры » Программы » Imagus (Часть 2)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru