From d00a0e85514bb31cae1291290c65840e899e6726 Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Sun, 15 Jun 2025 00:49:30 +0200 Subject: [PATCH 01/18] Update hstream.yml * Improved URL construction via sceneByFragment * Standardized output titles * Removed capture of tags related to resolution * added group construction in the sceneScraper * Added groupScraper support from URL * changed the search URL (with covers) to remove the post process change * Restored image "preview" for scenes --- scrapers/hstream.yml | 194 +++++++++++++++++++++++++++++++------------ 1 file changed, 139 insertions(+), 55 deletions(-) diff --git a/scrapers/hstream.yml b/scrapers/hstream.yml index f290cd934..a85f0ce5d 100644 --- a/scrapers/hstream.yml +++ b/scrapers/hstream.yml @@ -1,80 +1,164 @@ -name: hstream -sceneByName: - action: scrapeXPath - queryURL: https://hstream.moe/search?search={} - scraper: sceneSearch -sceneByQueryFragment: - action: scrapeXPath - queryURL: "{url}" - scraper: sceneScraper +name: "hstream" sceneByFragment: action: scrapeXPath queryURL: https://hstream.moe/hentai/{filename} queryURLReplace: filename: - # Strip out everything after the first [ - - regex: ([^[]+)\s.* - with: $1 - # Remove non-word characters - - regex: \W+ - with: "-" - # Remove leading zeroes - - regex: 0+(\d) - with: $1 + # [HSUB] Anime_02_Title - sub eng - E05v2 Uncensored (HD) www.example.com [3bb935c6].mp4 + # 1. Removes tags inside square brackets [xxx] + - regex: '\[[^\]]*\]' + with: "" + + # 2. Removes tags inside parentheses (xxx) + - regex: '\([^)]*\)' + with: "" + + # 3. Removes file extensions (.mp4, .avi, .mkv...) + - regex: '\.\w{2,4}$' + with: "" + + # 4. Removes known tags: sub eng, engsub, uncensored, www + - regex: '(?i)(sub[\s\-_]?eng|engsub|uncensored|censored|www\.[^\s]+)' + with: "" + + # 5. Standardizes separators into hyphens + - regex: '[\s\._+]+' + with: '-' + + # 6. Removes extended prefixes for episodes and seasons (but keeps the number) + - regex: '(?i)(^|[\-])(?:ep|episode|episodio|act|vol|season|stagione)([\-]?\d{1,2})' + with: '$1$2' + + # 7. Converts short prefixes for seasons and episodes into numbers (e.g., S02E05 → 02-05) + - regex: '(?i)\b(e|s)(\d{1,2})((e|s)(\d{1,2}))?\b' + with: '$2-$5' + + # 8. Removes version suffixes from numbers (v2, vFinal, vRev3) + - regex: '(?i)(\d{1,2})(?:-)?v(?:\d+|final|finale|rev\d*)\b' + with: '$1' + + # 9. Converts any short number (max 2 digits) with a leading zero into - + - regex: '(^|[^0-9])0?(\d{1,2})([^0-9]|$)' + with: '$1$2$3' + + # 10. Replaces invalid URL characters (but keeps hyphens) + - regex: '[^a-zA-Z0-9\-]+' + with: '-' + + # 11. Inserts a hyphen between letters and numbers (e.g., "abc2" → "abc-2") + - regex: '([a-zA-Z])(\d)' + with: '$1-$2' + + # 12. Removes everything after the last short number + - regex: '^(.*-\d{1,2})(?:-\d{1,2})*(?:-.*)?$' + with: '$1' + + # 13. Multiple hyphens → only one + - regex: '-+' + with: '-' + + # 14. Removes leading/trailing hyphens (with #12, trailing ones are already removed) + - regex: '^-+|-+$' + with: "" scraper: sceneScraper + sceneByURL: - action: scrapeXPath url: - hstream.moe/hentai/ scraper: sceneScraper + +sceneByName: + action: scrapeXPath + queryURL: https://hstream.moe/search?search={}&view=poster + scraper: sceneSearch + +sceneByQueryFragment: + action: scrapeXPath + queryURL: "{url}" + scraper: sceneScraper + +movieByURL: + - action: scrapeXPath + url: + - hstream.moe/hentai/ + scraper: groupScraper + xPathScrapers: - sceneSearch: - scene: - URL: //div[contains(@class,'relative')]/a/@href - Title: - selector: //div[contains(@class,'relative')]/a/img/@alt - Image: - selector: //div[contains(@class,'relative')]/a/img/@src - postProcess: - - replace: - # 1) make relative paths absolute - - regex: '^/' - with: https://hstream.moe/ - # 2) turn “…/gallery‑…” into “…/cover‑…” - - regex: '/gallery-' - with: '/cover-' - # 3) drop the “‑thumbnail” tag - - regex: '-thumbnail' - with: - # 4) remove the extra frame index after the episode number - - regex: '(-ep-\d+)-\d+\.webp$' - with: $1.webp sceneScraper: scene: - Title: //h1 - Date: + Title: + selector: //h1 + postProcess: + - replace: + - regex: ' (\d{1})$' + with: ' 0$1' + Date: &date selector: //i[contains(@class, "fa-calendar")]/following-sibling::text() postProcess: - replace: - - regex: \s*(\d{4}-\d{2}-\d{2}).* - with: $1 + - regex: '\s*(\d{4}-\d{2}-\d{2}).*' + with: '$1' - parseDate: 2006-01-02 - Details: //p[contains(text(), "Description")]/following-sibling::p + Details: &details (//p[contains(text(), "Description")]/following-sibling::p)[1] Tags: - Name: //li[@class="inline-block p-1"]/a/text() + Name: + selector: //li[@class="inline-block p-1"]/a/text() + postProcess: + - map: + "48Fps": "" + "4K": "" + "4K 48Fps": "" + "Lq": "" Studio: Name: (//a[contains(@href, "studios")])[1] - Image: - selector: //meta[@property="og:image"]/@content + Image: &image //meta[@property="og:image"]/@content + URL: //meta[@property="og:url"]/@content + Movies: + Name: //h1/a/text() + Aliases: //h2/text() + Date: *date + Synopsis: *details + URL: //h1/a/@href + FrontImage: &cover + selector: *image + postProcess: + - replace: + # 1) img gallery ➜ 1° cover + - regex: '/gallery-(ep-)\d+-\d+(\.[a-zA-Z0-9]+)$' + with: '/cover-${1}1${2}' + + sceneSearch: + scene: + Title: //div[contains(@class, "relative")]/a/img/@alt + URL: //div[contains(@class, "relative")]/a/@href + Image: + selector: //div[contains(@class, "relative")]/a/img/@src postProcess: - replace: - # 1) gallery ➜ cover - - regex: gallery - with: cover - # 2) trim the trailing “-0” (or “-1”, etc.) - - regex: (-ep-\d+)-\d+\.webp$ - with: $1.webp + # 1) make relative paths absolute + - regex: '^/' + with: https://hstream.moe/ - URL: //meta[@property="og:url"]/@content -# Last Updated May 29, 2025 \ No newline at end of file + groupScraper: + movie: + Name: + selector: //h1/text() + postProcess: + - replace: + - regex: '\s*\([^)]*\)' + with: "" + Aliases: + selector: //h1/text() + postProcess: + - replace: + - regex: '.*\(([^)]*)\)' + with: '$1' + Date: *date + Studio: + Name: //a[contains(@href, "studios")]/text() + Synopsis: *details + FrontImage: *cover + +# Last Updated June 15, 2025 From 23baf2a5046d7346ce0e1744031fd9683c735bb4 Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Sun, 15 Jun 2025 00:51:53 +0200 Subject: [PATCH 02/18] Update hanime.yml * Improved URL construction via sceneByFragment * Standardized output titles * Removed capture of tags related to resolution * Added group construction in the sceneScraper * Added scene URL construction from the cover URL --- scrapers/hanime.yml | 134 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 117 insertions(+), 17 deletions(-) diff --git a/scrapers/hanime.yml b/scrapers/hanime.yml index c9b89ea0f..d1302080c 100644 --- a/scrapers/hanime.yml +++ b/scrapers/hanime.yml @@ -1,30 +1,98 @@ -name: hanime +name: "hanime" + sceneByFragment: action: scrapeXPath queryURL: https://hanime.tv/videos/hentai/{filename} queryURLReplace: filename: - - regex: ^([a-z\-0-9]+?)(\-[0-9]{3,4}p)?\..+$ - with: $1 + # [HSUB] Anime_02_Title - sub eng - E05v2 Uncensored (HD) www.example.com [3bb935c6].mp4 + # 1. Removes tags inside square brackets [xxx] + - regex: '\[[^\]]*\]' + with: "" + + # 2. Removes tags inside parentheses (xxx) + - regex: '\([^)]*\)' + with: "" + + # 3. Removes file extensions (.mp4, .avi, .mkv...) + - regex: '\.\w{2,4}$' + with: "" + + # 4. Removes known tags: sub eng, engsub, uncensored, www + - regex: '(?i)(sub[\s\-_]?eng|engsub|uncensored|censored|www\.[^\s]+)' + with: "" + + # 5. Standardizes separators into hyphens + - regex: '[\s\._+]+' + with: '-' + + # 6. Removes extended prefixes for episodes and seasons (but keeps the number) + - regex: '(?i)(^|[\-])(?:ep|episode|episodio|act|vol|season|stagione)([\-]?\d{1,2})' + with: '$1$2' + + # 7. Converts short prefixes for seasons and episodes into numbers (e.g., S02E05 → 02-05) + - regex: '(?i)\b(e|s)(\d{1,2})((e|s)(\d{1,2}))?\b' + with: '$2-$5' + + # 8. Removes version suffixes from numbers (v2, vFinal, vRev3) + - regex: '(?i)(\d{1,2})(?:-)?v(?:\d+|final|finale|rev\d*)\b' + with: '$1' + + # 9. Converts any short number (max 2 digits) with a leading zero into - + - regex: '(^|[^0-9])0?(\d{1,2})([^0-9]|$)' + with: '$1$2$3' + + # 10. Replaces invalid URL characters (but keeps hyphens) + - regex: '[^a-zA-Z0-9\-]+' + with: '-' + + # 11. Inserts a hyphen between letters and numbers (e.g., "abc2" → "abc-2") + - regex: '([a-zA-Z])(\d)' + with: '$1-$2' + + # 12. Removes everything after the last short number + - regex: '^(.*-\d{1,2})(?:-\d{1,2})*(?:-.*)?$' + with: '$1' + + # 13. Multiple hyphens → only one + - regex: '-+' + with: '-' + + # 14. Removes leading/trailing hyphens (with #12, trailing ones are already removed) + - regex: '^-+|-+$' + with: "" scraper: sceneScraper + sceneByURL: - action: scrapeXPath url: - hanime.tv/ scraper: sceneScraper + xPathScrapers: sceneScraper: scene: - Title: //h1[@class="tv-title"]/text() - Date: + Title: + selector: //h1[@class="tv-title"]/text() + postProcess: + - replace: + - regex: '(\d+)$' + with: '- $1' + - regex: ' (\d{1})$' + with: ' 0$1' + Date: &date selector: //div[@class="hvpimbc-item"]/div[contains(.,"Release Date")]/../div[@class="hvpimbc-text grey--text"]/text() postProcess: - parseDate: January 2, 2006 - Details: + Details: &details selector: //div[@class="mt-3 mb-0 hvpist-description"]//text() concat: "\n\n" Tags: - Name: //div[@class="hvpis-text grey--text text--lighten-1"]/a/div + Name: + selector: //div[@class="hvpis-text grey--text text--lighten-1"]/a/div + postProcess: + - map: + "hd": "" Studio: Name: selector: //div[@class="hvpimbc-item full"]/a[@class="hvpimbc-text"]/text() @@ -32,14 +100,46 @@ xPathScrapers: selector: //script[contains(., "poster_url")] postProcess: - replace: - - regex: (.+?poster_url":")(.+?)(","cover_url".+) - with: $2 - - regex: "u002F" + - regex: '(.+?poster_url":")(.+?)(","cover_url".+)' + with: '$2' + - regex: 'u002F' with: "" - - regex: \\ - with: / - - regex: "static-assets.highwinds-cdn.com" - with: "static-assets.droidbuzz.top" - - regex: "https://" - with: "https://i1.wp.com/" -# Last Updated August 4, 2024 + - regex: '\\' + with: '/' + - regex: 'static-assets.highwinds-cdn.com' + with: 'static-assets.droidbuzz.top' + - regex: 'https://' + with: 'https://i1.wp.com/' + # build the url from the cover: + URL: + selector: //img[@class="hvpi-cover"]/@src + postProcess: + - replace: + - regex: '^.*/([^/]+)\.[a-zA-Z0-9]+$' + with: '$1' + - regex: '(.+-\d+)(?:-[^-]+)?$' + with: 'https://hanime.tv/videos/hentai/$1' + Movies: + Name: + selector: //h1[@class="tv-title"]/text() + postProcess: + - replace: + - regex: ' (\d+)$' + with: "" + Aliases: //h2/span[@class="mr-3 grey--text"]/text() + Date: *date + Synopsis: *details + FrontImage: + selector: //script[contains(., "cover_url")] + postProcess: + - replace: + - regex: '(.+?cover_url":")(.+?)(",".+)' + with: '$2' + - regex: 'u002F' + with: "" + - regex: '\\' + with: '/' + - regex: '(.+-)(\d+)(-?[^-]+)$' + with: '${1}1${3}' + +# Last Updated June 15, 2025 From d0dfac8e60b25a5e2e26e5bcd4b690452a6cdc0c Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Sun, 15 Jun 2025 00:52:39 +0200 Subject: [PATCH 03/18] Create Oppai.yml --- scrapers/Oppai.yml | 135 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 scrapers/Oppai.yml diff --git a/scrapers/Oppai.yml b/scrapers/Oppai.yml new file mode 100644 index 000000000..165ef7283 --- /dev/null +++ b/scrapers/Oppai.yml @@ -0,0 +1,135 @@ +name: "Oppai" + +sceneByFragment: + action: scrapeXPath + queryURL: https://oppai.stream/watch?e={filename} + queryURLReplace: + filename: + # Oppai keeps symbols in the url, so you can't filter out the "wrong" ones from the name + # 1. Removes tags inside square brackets [xxx] + - regex: '\[[^\]]*\]' + with: "" + + # 2. Removes tags inside parentheses (xxx) + - regex: '\([^)]*\)' + with: "" + + # 3. Removes file extensions (.mp4, .avi, .mkv...) + - regex: '\.\w{2,4}$' + with: "" + + # 4. Removes known tags: sub eng, engsub, uncensored, www + - regex: '(?i)(sub[\s\-_]?eng|engsub|uncensored|censored|www\.[^\s]+)' + with: "" + + # 5. Replaces problematic URL characters (no problem with: !?:()♪♥★→←☆) + - regex: '\-' + with: '~' + - regex: '\+' + with: 'Ž' + - regex: '\&' + with: 'č' + + # 6. Standardizes separators into hyphens + - regex: '[\s\._+]+' + with: '-' + + # 7. Removes extended prefixes for episodes and seasons (but keeps the number) + - regex: '(?i)(^|[\-])(?:ep|episode|episodio|act|vol|season|stagione)([\-]?\d{1,2})' + with: '$1$2' + + # 8. Converts short prefixes for seasons and episodes into numbers (e.g., S02E05 → 02-05) + - regex: '(?i)\b(e|s)(\d{1,2})((e|s)(\d{1,2}))?\b' + with: '$2-$5' + + # 9. Removes version suffixes from numbers (v2, vFinal, vRev3) + - regex: '(?i)(\d{1,2})(?:-)?v(?:\d+|final|finale|rev\d*)\b' + with: '$1' + + # 10. Converts any short number (max 2 digits) with a leading zero into - + - regex: '(^|[^0-9])0?(\d{1,2})([^0-9]|$)' + with: '$1$2$3' + + # 11. Inserts a hyphen between letters and numbers (e.g., "abc2" → "abc-2") + - regex: '([a-zA-Z])(\d)' + with: '$1-$2' + + # 12. Removes everything after the last short number + - regex: '^(.*-\d{1,2})(?:-\d{1,2})*(?:-.*)?$' + with: '$1' + + # 13. Multiple hyphens → only one + - regex: '-+' + with: '-' + + # 14. Removes leading/trailing hyphens (with #12, trailing ones are already removed) + - regex: '^-+|-+$' + with: "" + scraper: sceneScraper + +sceneByURL: + - action: scrapeXPath + url: + - oppai.stream/watch?e= + scraper: sceneScraper + +xPathScrapers: + sceneScraper: + scene: + Title: + selector: //h1[contains(@class, "line")]/text() + postProcess: + - replace: + - regex: '(?i)\s+Ep\s+' + with: ' - ' + - regex: ' (\d{1})$' + with: ' 0$1' + Details: &details //div[@class="description"]/h5/text()[1] + Tags: + Name: + selector: //a[contains(@class, "tag")]/h5/text() + postProcess: + - map: + "4k": "" + "hd": "" + Studio: + Name: //h6/a[@class="red"]/text() + Image: + selector: //meta[@property="og:image"]/@content + postProcess: + - replace: + - regex: '\?v=\d+$' + with: "" + # build the url from the title: + URL: + selector: //h1[contains(@class, "line")]/text() + postProcess: + - replace: + - regex: '\-' + with: '~' + - regex: '\+' + with: 'Ž' + - regex: '\&' + with: 'č' + - regex: '(?i)\s+Ep\s+(\d+)$' + with: ' $1' + - regex: '\s+' + with: '-' + - regex: '(.+)' + with: 'https://oppai.stream/watch?e=$1' + Movies: + Name: + selector: //h1[contains(@class, "line")]/text() + postProcess: + - replace: + - regex: '(?i)\s+Ep\s+\d+$' + with: "" + Aliases: + selector: //div[@class="description"]/h5/text()[2] + postProcess: + - replace: + - regex: '[^(]*\(([^)]*)\)[^)]*' + with: '$1' + Synopsis: *details + +# Last Updated June 15, 2025 From a8243b1c8b3e719c3f99705f5f2a5a4f40aee082 Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Sun, 15 Jun 2025 00:56:39 +0200 Subject: [PATCH 04/18] Create HentaiSubIta.yml * Italian plots --- scrapers/HentaiSubIta.yml | 194 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 scrapers/HentaiSubIta.yml diff --git a/scrapers/HentaiSubIta.yml b/scrapers/HentaiSubIta.yml new file mode 100644 index 000000000..5983a94ed --- /dev/null +++ b/scrapers/HentaiSubIta.yml @@ -0,0 +1,194 @@ +name: "Hentai Sub Ita" + +sceneByFragment: + action: scrapeXPath + queryURL: https://www.hentaisubita.net/{filename}/ + queryURLReplace: + filename: + # [HSUB] Anime_02_Title - sub ita - E05v2 Uncensored (HD) www.example.com [3bb935c6].mp4 + # 1. Rimuove tag tra parentesi quadre [xxx] + - regex: '\[[^\]]*\]' + with: "" + + # 2. Rimuove tag tra parentesi tonde (xxx) + - regex: '\([^)]*\)' + with: "" + + # 3. Rimuove estensione file (.mp4, .avi, .mkv...) + - regex: '\.\w{2,4}$' + with: "" + + # 4. Rimuove tag noti: sub ita, itasub, uncensored, www + - regex: '(?i)(sub[\s\-_]?ita|itasub|uncensored|censored|www\.[^\s]+)' + with: "" + + # 5. Standardizza separatori in trattini + - regex: '[\s\._+]+' + with: '-' + + # 6. Rimuove prefissi estesi di episodi e stagioni (ma lascia il numero) + - regex: '(?i)(^|[\-])(?:ep|episode|episodio|act|vol|season|stagione)([\-]?\d{1,2})' + with: '$1$2' + + # 7. Converte prefissi brevi di stagione e episodio in numeri (es. S02E05 → 02-05) + - regex: '(?i)\b(e|s)(\d{1,2})((e|s)(\d{1,2}))?\b' + with: '$2-$5' + + # 8. Rimuove suffissi di versione dai numeri (v2, vFinal, vRev3) + - regex: '(?i)(\d{1,2})(?:-)?v(?:\d+|final|finale|rev\d*)\b' + with: '$1' + + # 9. Converte ogni numero breve (max 2 cifre) con zero iniziale in - + - regex: '(^|[^0-9])0?(\d{1,2})([^0-9]|$)' + with: '$1$2$3' + + # 10. Sostituisce caratteri non validi URL (ma lascia i trattini) + - regex: '[^a-zA-Z0-9\-]+' + with: '-' + + # 11. Inserisce trattino tra lettera e numero (es. "abc2" → "abc-2") + - regex: '([a-zA-Z])(\d)' + with: '$1-$2' + + # 12. Elimina tutto dopo l’ultimo numero breve + - regex: '^(.*-\d{1,2})(?:-\d{1,2})*(?:-.*)?$' + with: '$1' + + # 13. Trattini multipli → uno solo + - regex: '-+' + with: '-' + + # 14. Rimuove trattini iniziali/finali (con #12 i finali già non ci sono) + - regex: '^-+|-+$' + with: "" + + # 15. Aggiungi "episodio-" davanti all'ultimo numero + - regex: '(\d+)$' + with: 'episodio-$1' + + # 16. Se l'ultimo numero (episodio) è ad 1 cifra, aggiunge 0 davanti + - regex: '-(\d{1})$' + with: '-0$1' + scraper: sceneScraper + +sceneByURL: + - action: scrapeXPath + url: + - hentaisubita.net/ + scraper: sceneScraper + +# scrape some information for the scene through the series +sceneByName: + action: scrapeXPath + queryURL: https://www.hentaisubita.net/?s={} + scraper: sceneSearch + +sceneByQueryFragment: + action: scrapeXPath + queryURL: "{url}" + scraper: ScenefromSeriesScraper + +movieByURL: + - action: scrapeXPath + url: + - hentaisubita.net/anime/ + scraper: groupScraper + +xPathScrapers: + commonXPaths: + scene: + Title: &title //h1[@class="entry-title"]/text() + Details: &details + selector: //div[contains(@class, 'desc') and contains(@class, 'mindes')]//text() + concat: "\n\n" + URL: &url //meta[@property="og:url"]/@content + # Date is approximate having only the year + Date: &date + selector: //span[@class="split"][b[text()="Anno:"]]/text() + postProcess: + - replace: + - regex: '\s*(\d{4})' + with: '$1' + - parseDate: 2006 + # Site only have the covers (not thumbnails) + Image: &image //meta[@property="og:image"]/@content + Studio: &studio + Name: //div[@class="spe"]/span[b[text()="Studio:"]]/a/text() + Tags: &tags + Name: + selector: //div[@class="genxed"]/a[@rel="tag"]/text() + postProcess: + - map: + "Altro": "" + "Anime Bondage": "Bondage" + "HD": "" + Aliases: &aliases //span[@class="alter"]/text() + Synopsis: &synopsis + selector: //div[@class="entry-content"]/p//text() + concat: "\n\n" + + sceneScraper: + scene: + Title: + selector: *title + postProcess: + - replace: + - regex: '(?i)\s+episodio\s+' + with: ' - ' + Date: *date + Details: *details + Tags: *tags + Studio: *studio + Image: *image + URL: *url + Movies: + Name: //meta[@property="article:section"]/@content + Aliases: *aliases + Date: *date + Synopsis: *details + URL: (//li/a[@itemprop="item"])[2]/@href + FrontImage: *image + + sceneSearch: + scene: + Title: //article[@class="bs"]/div/a/div[@class="tt"]/text() + URL: //article[@class="bs"]/div/a[@class="tip"]/@href + Image: //article[@class="bs"]//img/@data-src + + ScenefromSeriesScraper: + scene: + Title: + selector: *title + postProcess: + - replace: + - regex: '$' + with: ' - 00' + Date: *date + Details: *synopsis + Tags: *tags + Studio: *studio + Image: *image + URL: + selector: *url + postProcess: + - replace: + - regex: '^(https://[^/]+)/anime/([^/]+)/' + with: '$1/$2-episodio-00/' + Movies: + Name: *title + Aliases: *aliases + Date: *date + Synopsis: *synopsis + URL: *url + FrontImage: *image + + groupScraper: + movie: + Name: *title + Aliases: *aliases + Date: *date + Studio: *studio + Synopsis: *synopsis + FrontImage: *image + +# Last Updated June 15, 2025 From 2bb849fd16b126e76c5039e153b9166797cca145 Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Sun, 15 Jun 2025 00:57:18 +0200 Subject: [PATCH 05/18] Create HentaiSaturn.yml * Italian plots --- scrapers/HentaiSaturn.yml | 232 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 scrapers/HentaiSaturn.yml diff --git a/scrapers/HentaiSaturn.yml b/scrapers/HentaiSaturn.yml new file mode 100644 index 000000000..58d1fcda2 --- /dev/null +++ b/scrapers/HentaiSaturn.yml @@ -0,0 +1,232 @@ +name: "HentaiSaturn" + +sceneByFragment: + action: scrapeXPath + queryURL: https://www.hentaisaturn.tv/episode/{filename} + queryURLReplace: + filename: + # [HSUB] Anime_02_Title - sub ita - E05v2 Uncensored (HD) www.example.com [3bb935c6].mp4 + # 1. Rimuove tag tra parentesi quadre [xxx] + - regex: '\[[^\]]*\]' + with: "" + + # 2. Rimuove tag tra parentesi tonde (xxx) + - regex: '\([^)]*\)' + with: "" + + # 3. Rimuove estensione file (.mp4, .avi, .mkv...) + - regex: '\.\w{2,4}$' + with: "" + + # 4. Rimuove tag noti: sub ita, itasub, uncensored, www + - regex: '(?i)(sub[\s\-_]?ita|itasub|uncensored|censored|www\.[^\s]+)' + with: "" + + # 5. Standardizza separatori in trattini + - regex: '[\s\._+]+' + with: '-' + + # 6. Rimuove prefissi estesi di episodi e stagioni (ma lascia il numero) + - regex: '(?i)(^|[\-])(?:ep|episode|episodio|act|vol|season|stagione)([\-]?\d{1,2})' + with: '$1$2' + + # 7. Converte prefissi brevi di stagione e episodio in numeri (es. S02E05 → 02-05) + - regex: '(?i)\b(e|s)(\d{1,2})((e|s)(\d{1,2}))?\b' + with: '$2-$5' + + # 8. Rimuove suffissi di versione dai numeri (v2, vFinal, vRev3) + - regex: '(?i)(\d{1,2})(?:-)?v(?:\d+|final|finale|rev\d*)\b' + with: '$1' + + # 9. Converte ogni numero breve (max 2 cifre) con zero iniziale in - + - regex: '(^|[^0-9])0?(\d{1,2})([^0-9]|$)' + with: '$1$2$3' + + # 10. Sostituisce caratteri non validi URL (ma lascia i trattini) + - regex: '[^a-zA-Z0-9\-]+' + with: '-' + + # 11. Inserisce trattino tra lettera e numero (es. "abc2" → "abc-2") + - regex: '([a-zA-Z])(\d)' + with: '$1-$2' + + # 12. Elimina tutto dopo l’ultimo numero breve + - regex: '^(.*-\d{1,2})(?:-\d{1,2})*(?:-.*)?$' + with: '$1' + + # 13. Trattini multipli → uno solo + - regex: '-+' + with: '-' + + # 14. Rimuove trattini iniziali/finali (con #12 i finali già non ci sono) + - regex: '^-+|-+$' + with: "" + + # 15. Aggiungi "ep-" davanti all'ultimo numero + - regex: '(\d+)$' + with: 'ep-$1' + scraper: sceneScraper + +sceneByURL: + - action: scrapeXPath + url: + - hentaisaturn.tv/episode/ + scraper: sceneScraper + +# scrape some information for the scene through the series +sceneByName: + action: scrapeXPath + queryURL: https://www.hentaisaturn.tv/hentailist?search={} + scraper: sceneSearch + +sceneByQueryFragment: + action: scrapeXPath + queryURL: "{url}" + scraper: ScenefromSeriesScraper + +movieByURL: + - action: scrapeXPath + url: + - hentaisaturn.tv/hentai/ + scraper: groupScraper + +xPathScrapers: + commonXPaths: + scene: + Title: &title (//title[contains(text(), "HentaiSaturn")])[1]/text() + Details: &details //div[@class="card-body"]/b[.="Trama:"]/following-sibling::text()[1] + # Site only have the covers (not thumbnails) + Image: &image //meta[@property="og:image"]/@content + Tags: &tags + Name: + selector: //div/a[@class="badge badge-light generi-as mb-1"]/text() + postProcess: + - map: + "HD": "" + # series url from scene page + URL: &urlSeries //div[@class="card-body"]/a[@class="btn btn-light w-100 mt-3 mb-3"]/@href + Date: &date + selector: //div/b[text()="Data di uscita:"]/following-sibling::text()[1] + postProcess: + - replace: + - regex: 'Gennaio' + with: 'January' + - regex: 'Febbraio' + with: 'February' + - regex: 'Marzo' + with: 'March' + - regex: 'Aprile' + with: 'April' + - regex: 'Maggio' + with: 'May' + - regex: 'Giugno' + with: 'June' + - regex: 'Luglio' + with: 'July' + - regex: 'Agosto' + with: 'August' + - regex: 'Settembre' + with: 'September' + - regex: 'Ottobre' + with: 'October' + - regex: 'Novembre' + with: 'November' + - regex: 'Dicembre' + with: 'December' + - parseDate: 2 January 2006 + Studio: &studio + Name: //div/b[text()="Studio:"]/following-sibling::text()[1] + Aliases: &aliases //div[@class="container hentai-title-as mb-3 w-100"]/div[@class="box-trasparente-alternativo rounded"]/text() + Synopsis: &synopsis + selector: //div[@id="full-trama"]//text() | //div[@id="shown-trama"]//text() + + sceneScraper: + scene: + Title: + selector: *title + postProcess: + - replace: + - regex: '(?i)^HentaiSaturn - | Streaming.*$' + with: "" + - regex: '(?i)\s+episodio\s+' + with: ' - ' + - regex: ' (\d{1})$' + with: ' 0$1' + Details: *details + Tags: *tags + Image: *image + URL: + selector: *title + postProcess: + - replace: + - regex: '(?i)^HentaiSaturn - | Streaming.*$' + with: "" + - regex: '(?i)\s+episodio\s+' + with: ' ep ' + - regex: '[\s\._+]+' + with: '-' + - regex: '^(.*)$' + with: 'https://www.hentaisaturn.tv/episode/$1' + Movies: + Name: //div/b[text()="Titolo:"]/following-sibling::text()[1] + Synopsis: *details + URL: *urlSeries + FrontImage: *image + + sceneSearch: + scene: + Title: //div[@class="info-archivio"]/h3/a/text() + URL: //div[@class="info-archivio"]/h3/a/@href + Image: //div[@class="item-archivio"]//img[contains(@class, "copertina-archivio")]/@src + Details: //div[@class="info-archivio"]/a[@class="thumb image-wrapper"]/p/text() + #Tags: + # Name: //div[@class="info-archivio"]/a[@class="badge badge-light generi-as mb-1"]/text() + + ScenefromSeriesScraper: + scene: + Title: + selector: *title + postProcess: + - replace: + - regex: '(?i)^HentaiSaturn - | Streaming.*$' + with: "" + - regex: '$' + with: ' - 00' + Date: *date + Details: *synopsis + Tags: *tags + Studio: *studio + Image: *image + URL: + selector: //div[contains(@class, 'episodes-button')]/a/@href + postProcess: + - replace: + - regex: '-(\d+)$' + with: '-0' + Movies: + Name: + selector: *title + postProcess: + - replace: + - regex: '(?i)^HentaiSaturn - | Streaming.*$' + with: "" + Aliases: *aliases + Date: *date + Synopsis: *synopsis + FrontImage: *image + + groupScraper: + movie: + Name: + selector: *title + postProcess: + - replace: + - regex: '(?i)^HentaiSaturn - | Streaming.*$' + with: "" + Aliases: *aliases + Date: *date + Studio: *studio + Synopsis: *synopsis + FrontImage: *image + +# Last Updated June 15, 2025 From 259dd29cf2476d872f6dfee200b723376b86c80b Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Sun, 15 Jun 2025 15:39:54 +0200 Subject: [PATCH 06/18] Update HentaiSaturn.yml fixed commonXPaths movies fields --- scrapers/HentaiSaturn.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scrapers/HentaiSaturn.yml b/scrapers/HentaiSaturn.yml index 58d1fcda2..f3ea26088 100644 --- a/scrapers/HentaiSaturn.yml +++ b/scrapers/HentaiSaturn.yml @@ -136,9 +136,10 @@ xPathScrapers: - parseDate: 2 January 2006 Studio: &studio Name: //div/b[text()="Studio:"]/following-sibling::text()[1] - Aliases: &aliases //div[@class="container hentai-title-as mb-3 w-100"]/div[@class="box-trasparente-alternativo rounded"]/text() - Synopsis: &synopsis - selector: //div[@id="full-trama"]//text() | //div[@id="shown-trama"]//text() + Movies: + Aliases: &aliases //div[@class="container hentai-title-as mb-3 w-100"]/div[@class="box-trasparente-alternativo rounded"]/text() + Synopsis: &synopsis + selector: //div[@id="full-trama"]//text() | //div[@id="shown-trama"]//text() sceneScraper: scene: From 747de503584e34dbbdbdf3664d056208cd4db41d Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Sun, 15 Jun 2025 15:41:33 +0200 Subject: [PATCH 07/18] Update HentaiSubIta.yml fixed commonXPaths movies fields --- scrapers/HentaiSubIta.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scrapers/HentaiSubIta.yml b/scrapers/HentaiSubIta.yml index 5983a94ed..fbbb90993 100644 --- a/scrapers/HentaiSubIta.yml +++ b/scrapers/HentaiSubIta.yml @@ -122,10 +122,11 @@ xPathScrapers: "Altro": "" "Anime Bondage": "Bondage" "HD": "" - Aliases: &aliases //span[@class="alter"]/text() - Synopsis: &synopsis - selector: //div[@class="entry-content"]/p//text() - concat: "\n\n" + Movies: + Aliases: &aliases //span[@class="alter"]/text() + Synopsis: &synopsis + selector: //div[@class="entry-content"]/p//text() + concat: "\n\n" sceneScraper: scene: From 349c80407bf153f4541d90808525b19a6e345968 Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Sun, 15 Jun 2025 17:14:51 +0200 Subject: [PATCH 08/18] Update HentaiSubIta.yml --- scrapers/HentaiSubIta.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scrapers/HentaiSubIta.yml b/scrapers/HentaiSubIta.yml index fbbb90993..4196b6962 100644 --- a/scrapers/HentaiSubIta.yml +++ b/scrapers/HentaiSubIta.yml @@ -123,6 +123,7 @@ xPathScrapers: "Anime Bondage": "Bondage" "HD": "" Movies: + Name: &name //meta[@property="article:section"]/@content Aliases: &aliases //span[@class="alter"]/text() Synopsis: &synopsis selector: //div[@class="entry-content"]/p//text() @@ -143,7 +144,7 @@ xPathScrapers: Image: *image URL: *url Movies: - Name: //meta[@property="article:section"]/@content + Name: *name Aliases: *aliases Date: *date Synopsis: *details From 956cb2ecac0c7f1dd5b621bb8a163323e6158292 Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Sun, 15 Jun 2025 17:15:42 +0200 Subject: [PATCH 09/18] Update HentaiSaturn.yml --- scrapers/HentaiSaturn.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scrapers/HentaiSaturn.yml b/scrapers/HentaiSaturn.yml index f3ea26088..be0b8c91a 100644 --- a/scrapers/HentaiSaturn.yml +++ b/scrapers/HentaiSaturn.yml @@ -137,6 +137,7 @@ xPathScrapers: Studio: &studio Name: //div/b[text()="Studio:"]/following-sibling::text()[1] Movies: + Name: &name //div/b[text()="Titolo:"]/following-sibling::text()[1] Aliases: &aliases //div[@class="container hentai-title-as mb-3 w-100"]/div[@class="box-trasparente-alternativo rounded"]/text() Synopsis: &synopsis selector: //div[@id="full-trama"]//text() | //div[@id="shown-trama"]//text() @@ -169,7 +170,7 @@ xPathScrapers: - regex: '^(.*)$' with: 'https://www.hentaisaturn.tv/episode/$1' Movies: - Name: //div/b[text()="Titolo:"]/following-sibling::text()[1] + Name: *name Synopsis: *details URL: *urlSeries FrontImage: *image From a73dd39cf8fc899aa38def8cfa427d647a42f318 Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Wed, 25 Jun 2025 03:30:58 +0200 Subject: [PATCH 10/18] Update hstream.yml * updated title template: Name ep02 --- scrapers/hstream.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scrapers/hstream.yml b/scrapers/hstream.yml index a85f0ce5d..642c67dc6 100644 --- a/scrapers/hstream.yml +++ b/scrapers/hstream.yml @@ -92,8 +92,10 @@ xPathScrapers: selector: //h1 postProcess: - replace: - - regex: ' (\d{1})$' - with: ' 0$1' + - regex: '\s+-\s+(\d+)$' + with: ' ep$1' + - regex: ' ep(\d{1})$' + with: ' ep0$1' Date: &date selector: //i[contains(@class, "fa-calendar")]/following-sibling::text() postProcess: @@ -161,4 +163,4 @@ xPathScrapers: Synopsis: *details FrontImage: *cover -# Last Updated June 15, 2025 +# Last Updated June 24, 2025 From ae7996c5dc703c5d061e9978ea86c38172b3b5bc Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Wed, 25 Jun 2025 03:31:43 +0200 Subject: [PATCH 11/18] Update Oppai.yml * updated title template: Name ep02 --- scrapers/Oppai.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scrapers/Oppai.yml b/scrapers/Oppai.yml index 165ef7283..680c70423 100644 --- a/scrapers/Oppai.yml +++ b/scrapers/Oppai.yml @@ -80,10 +80,10 @@ xPathScrapers: selector: //h1[contains(@class, "line")]/text() postProcess: - replace: - - regex: '(?i)\s+Ep\s+' - with: ' - ' - - regex: ' (\d{1})$' - with: ' 0$1' + - regex: '(?i)\s+Ep\s+(\d+)$' + with: ' ep$1' + - regex: ' ep(\d{1})$' + with: ' ep0$1' Details: &details //div[@class="description"]/h5/text()[1] Tags: Name: @@ -132,4 +132,4 @@ xPathScrapers: with: '$1' Synopsis: *details -# Last Updated June 15, 2025 +# Last Updated June 24, 2025 From 40dfeed4b8c76201520468ea24a1f4fa95ba8382 Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Wed, 25 Jun 2025 03:32:35 +0200 Subject: [PATCH 12/18] Update HentaiSubIta.yml * updated title template: Name ep02 --- scrapers/HentaiSubIta.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scrapers/HentaiSubIta.yml b/scrapers/HentaiSubIta.yml index 4196b6962..8806f4c8f 100644 --- a/scrapers/HentaiSubIta.yml +++ b/scrapers/HentaiSubIta.yml @@ -135,8 +135,8 @@ xPathScrapers: selector: *title postProcess: - replace: - - regex: '(?i)\s+episodio\s+' - with: ' - ' + - regex: '(?i)\s+episodio\s+(\d+)$' + with: ' ep$1' Date: *date Details: *details Tags: *tags @@ -164,7 +164,7 @@ xPathScrapers: postProcess: - replace: - regex: '$' - with: ' - 00' + with: ' ep00' Date: *date Details: *synopsis Tags: *tags @@ -193,4 +193,4 @@ xPathScrapers: Synopsis: *synopsis FrontImage: *image -# Last Updated June 15, 2025 +# Last Updated June 24, 2025 From 289dd72cdc97dd920045dc43f3622c84fbdd9b09 Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Wed, 25 Jun 2025 03:33:00 +0200 Subject: [PATCH 13/18] Update HentaiSaturn.yml * updated title template: Name ep02 --- scrapers/HentaiSaturn.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scrapers/HentaiSaturn.yml b/scrapers/HentaiSaturn.yml index be0b8c91a..85277e295 100644 --- a/scrapers/HentaiSaturn.yml +++ b/scrapers/HentaiSaturn.yml @@ -150,10 +150,10 @@ xPathScrapers: - replace: - regex: '(?i)^HentaiSaturn - | Streaming.*$' with: "" - - regex: '(?i)\s+episodio\s+' - with: ' - ' - - regex: ' (\d{1})$' - with: ' 0$1' + - regex: '(?i)\s+episodio\s+(\d+)$' + with: ' ep$1' + - regex: ' ep(\d{1})$' + with: ' ep0$1' Details: *details Tags: *tags Image: *image @@ -193,7 +193,7 @@ xPathScrapers: - regex: '(?i)^HentaiSaturn - | Streaming.*$' with: "" - regex: '$' - with: ' - 00' + with: ' ep00' Date: *date Details: *synopsis Tags: *tags @@ -231,4 +231,4 @@ xPathScrapers: Synopsis: *synopsis FrontImage: *image -# Last Updated June 15, 2025 +# Last Updated June 24, 2025 From 3700f6c2b8fab65d6d347daea5a3e569188211b6 Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Wed, 25 Jun 2025 03:37:59 +0200 Subject: [PATCH 14/18] Update hanime.yml * updated title template: Name ep02 * updated title with more cases * updated sceneByURL * added sceneByName/sceneByQueryFragment via python --- scrapers/hanime.yml | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/scrapers/hanime.yml b/scrapers/hanime.yml index d1302080c..6eba46450 100644 --- a/scrapers/hanime.yml +++ b/scrapers/hanime.yml @@ -66,9 +66,21 @@ sceneByFragment: sceneByURL: - action: scrapeXPath url: - - hanime.tv/ + - hanime.tv/videos/hentai/ scraper: sceneScraper +sceneByName: + action: script + script: + - python + - hanime.py + +sceneByQueryFragment: + action: script + script: + - python + - hanime.py + xPathScrapers: sceneScraper: scene: @@ -76,10 +88,10 @@ xPathScrapers: selector: //h1[@class="tv-title"]/text() postProcess: - replace: - - regex: '(\d+)$' - with: '- $1' - - regex: ' (\d{1})$' - with: ' 0$1' + - regex: '(?i)\s+(?:ep\.?|(?:- )?episode)?\s*(\d+)$' + with: ' ep$1' + - regex: ' ep(\d{1})$' + with: ' ep0$1' Date: &date selector: //div[@class="hvpimbc-item"]/div[contains(.,"Release Date")]/../div[@class="hvpimbc-text grey--text"]/text() postProcess: @@ -124,7 +136,7 @@ xPathScrapers: selector: //h1[@class="tv-title"]/text() postProcess: - replace: - - regex: ' (\d+)$' + - regex: '(?i)\s+(?:ep\.?|(?:- )?episode)?\s*(\d+)$' with: "" Aliases: //h2/span[@class="mr-3 grey--text"]/text() Date: *date @@ -142,4 +154,4 @@ xPathScrapers: - regex: '(.+-)(\d+)(-?[^-]+)$' with: '${1}1${3}' -# Last Updated June 15, 2025 +# Last Updated June 24, 2025 From 6e589371ba07f6be31f8981bbc7d9dcc971a97c2 Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Wed, 25 Jun 2025 03:42:59 +0200 Subject: [PATCH 15/18] Rename scrapers/hanime.yml to scrapers/hanime/hanime.yml --- scrapers/{ => hanime}/hanime.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scrapers/{ => hanime}/hanime.yml (100%) diff --git a/scrapers/hanime.yml b/scrapers/hanime/hanime.yml similarity index 100% rename from scrapers/hanime.yml rename to scrapers/hanime/hanime.yml From f71e6b6719cb9b51c38ff7e18ac2c5cc9d489564 Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Wed, 25 Jun 2025 03:43:52 +0200 Subject: [PATCH 16/18] add python --- scrapers/hanime/hanime.py | 70 ++++++++++++++++++++++++++++++++ scrapers/hanime/requirements.txt | 1 + 2 files changed, 71 insertions(+) create mode 100644 scrapers/hanime/hanime.py create mode 100644 scrapers/hanime/requirements.txt diff --git a/scrapers/hanime/hanime.py b/scrapers/hanime/hanime.py new file mode 100644 index 000000000..9b4a611cf --- /dev/null +++ b/scrapers/hanime/hanime.py @@ -0,0 +1,70 @@ +import sys +import json +import requests +import io +sys.stdin = io.TextIOWrapper(sys.stdin.buffer, encoding='utf-8') +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') + + +HANIME_SEARCH_URL = "https://search.htv-services.com/" + +def search_hanime(query): + params = { + "search_text": query, + "tags": [], + "tags_mode": "AND", + "brands": [], + "blacklist": [], + "order_by": "views", + "ordering": "desc", + "page": 0 + } + + try: + response = requests.post(HANIME_SEARCH_URL, json=params) + data = response.json() + hits = json.loads(data.get("hits", "[]")) + except Exception as e: + print("Failed to fetch or parse JSON response", e, file=sys.stderr) + return [] + + return [ + { + "Title": hit["name"], + "URL": f'https://hanime.tv/videos/hentai/{hit["slug"]}', + "Image": hit.get("cover_url", "") + } + for hit in hits + ] + +def main(): + try: + raw_input = sys.stdin.read() + if not raw_input.strip(): + print("No input from stdin", file=sys.stderr) + sys.exit(1) + + raw = json.loads(raw_input) + except Exception as e: + print("Invalid JSON input:", e, file=sys.stderr) + sys.exit(1) + + # CASE 1: Search mode (scene-by-name) + if "name" in raw: + results = search_hanime(raw["name"]) + print(json.dumps(results, ensure_ascii=False)) + return + # CASE 2: User selected a result – return URL and Title + else: + print(json.dumps({ + "URL": raw["url"], + "Title": raw.get("title", "") + }, ensure_ascii=False)) + return + + # DEFAULT: Invalid input + print("Missing 'name' or 'url' in input", file=sys.stderr) + sys.exit(1) + +if __name__ == "__main__": + main() diff --git a/scrapers/hanime/requirements.txt b/scrapers/hanime/requirements.txt new file mode 100644 index 000000000..663bd1f6a --- /dev/null +++ b/scrapers/hanime/requirements.txt @@ -0,0 +1 @@ +requests \ No newline at end of file From aa020082f1e37c0457966a508e3906fd320ac014 Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Wed, 25 Jun 2025 14:58:47 +0200 Subject: [PATCH 17/18] Update HentaiSubIta.yml * removed incorrect parseDate --- scrapers/HentaiSubIta.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scrapers/HentaiSubIta.yml b/scrapers/HentaiSubIta.yml index 8806f4c8f..61312b269 100644 --- a/scrapers/HentaiSubIta.yml +++ b/scrapers/HentaiSubIta.yml @@ -108,8 +108,7 @@ xPathScrapers: postProcess: - replace: - regex: '\s*(\d{4})' - with: '$1' - - parseDate: 2006 + with: '${1}-01-01' # Site only have the covers (not thumbnails) Image: &image //meta[@property="og:image"]/@content Studio: &studio @@ -193,4 +192,4 @@ xPathScrapers: Synopsis: *synopsis FrontImage: *image -# Last Updated June 24, 2025 +# Last Updated June 25, 2025 From 7ba6bcae09389dd1757dfc25d9bcc2470762fc1f Mon Sep 17 00:00:00 2001 From: Lc4B <149880036+Lc4B@users.noreply.github.com> Date: Wed, 25 Jun 2025 15:19:34 +0200 Subject: [PATCH 18/18] Update hanime.py * changed the search for ascending title --- scrapers/hanime/hanime.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scrapers/hanime/hanime.py b/scrapers/hanime/hanime.py index 9b4a611cf..eadaaf13a 100644 --- a/scrapers/hanime/hanime.py +++ b/scrapers/hanime/hanime.py @@ -15,8 +15,8 @@ def search_hanime(query): "tags_mode": "AND", "brands": [], "blacklist": [], - "order_by": "views", - "ordering": "desc", + "order_by": "title_sortable", + "ordering": "asc", "page": 0 }