kone
소미소프트

소미소프트

히토미 다운로더용 케모노 다운로드 스크립트

08/08/2025, 17:39:36
유틸
19461 views · 20 likes

얼마전 케모노 주소가 변경되면서 기존 히토미 다운로더 개발자의 케모노용 스크립트가 동작하지 않길래 간단하게 수정해봄

원 개발자가 바쁜지 히토미 다운로더 업데이트가 좀 늦는감이 있는데 어쩔수 있나 목마른놈이 우물 파야지



aHR0cHM6Ly9raW8uYWMvYy9ib2JNTmdFTExETnZiWVlSY19JUEdi



키오에 파일 두개 업로드 했는데, 두개는 같은거고 브라우저나 안티바이러스가 의심파일이라며 다운로드 거절하는 경우가 있어서 두개 올림


변경점은 hds용 시그니쳐 삭제, 케모노 cr 도메인 추가 끝


귀찮으면 아래 코드 복사해서 플러그인 추가 해도 됨




#coding: utf8
#title: Kemono.Party 추가
#title_en: Add Kemono.Party
#comment: https://kemono.party
#author: Kurt Bestor


import downloader
from utils import Downloader, Session, Soup, LazyUrl, urljoin, get_ext, clean_title, get_print, print_error
import clf2
from translator import tr_
from ratelimit import limits, sleep_and_retry



class Image:

    def __init__(self, url, referer, p):
        self._url = url
        self._p = p
        self.url = LazyUrl(referer, self.get, self)

    @sleep_and_retry
    @limits(1, 5)
    def get(self, _):
        ext = get_ext(self._url) or downloader.get_ext(self._url)
        self.filename = '{:04}{}'.format(self._p, ext)
        return self._url


@Downloader.register
class Downloader_kemonoparty(Downloader):
    type = 'kemono.party'
    URLS = ['kemono.party', 'kemono.su', 'kemono.cr']
    icon = 'base64:iVBORw0KGgoAAAANSUhEUgAAACAAAAAfCAYAAACGVs+MAAAH+0lEQVRIx72XaWxcVxXHf/ctM/Nm8YyX2mPHdrzGSYjrpNlJ2zRLgSSloi2bRCtQ+VChVCKRqEIFH6gECEpoUUJLS1JamqJAiwCBWoUKke5KuuA2zVbHbhLHdsbLjD3zPDNv3nb5YDtK1RQ7EnCk++Hp3nfO/5z7P//zHsD3gfWA4P9jmoAdwNNAEGB7Iqj2xYPqt4GyT3qrZUGMlgWxmUcBtAJhIAQ0zTEBoyqs7eqsNnK6Ku4PaVOvNN/QED31vXW1bkdl6C/AdZ/kLBzRIkJQC2jAk8CtwE3AM9PZxKcBXckqkhF9zw9urCvdu6J6ElgvBKjAhISOe5Zfs2ZbW3xh3vG39Odsx/HlKcAGaJgfJZe1kTDf9+ReYERXxPKAqqxVBY26KtpdnyPAT4GzwODlpQLmt5UH9963Nvn1WzsS2u9PZD7oHS89BORVVQgmSp7XEA/csaIuoi9NRuJN8eDmCzlncabo9oBI+W5A2I5NNK5nnZK3psLQ7osG1Pi1NcbqeEhbUhHSdNdnoxBUOL7cCxQBAqrAkyy9Lhnet2td7ZaOypAYzrscOJ5+YdzyDgKocgphRhVs3thUVv/GwCTNiaD6+QWJRXnH/1x/1rYLpdIpwC5ZnpSQWl4b/kZntdG6vrFMW1pjBDRFJFrLQ/W9mdL+RVWhQ6m8C4AnuXlTU2zfdz9du2LAdIiHVPrGS/LZk+N7DU3pdnyJCrBmXsQ6MWbVrqmPbryxMcb+7jEmbZ97ll+TSEb1zX0Tpc5sybsI1JcF1a8urQmv3LG6JrQsGaazxmB5bQQB9GQsoydT0lxfZnRF3PLFReW/3Lk62XKoL4sEtrbG+cPJzOg7Fws/cXw5AlMcYNB0sFyZrzS027e1JcJLqsP87nia1/rz3NlZqfmShUcH818A7owF1ZvuWFQRWlkbodzQUBVBWFdorwixqTlWv6AytEVXlNs3NpfdfndXVdX+7lFG8i7fWVvLpO3zm3fH3hownUcA5xKAaRt3fbn2hsZoR0siSFdNmMfeGeWF3iy3LSyn6PpGf9YOTdo+r/abdKcKRAMq9bEAAU1BAvGQSmdNWNnUHItf3xALPt49xtPH0uxYVcOKujD/uljgwPvpg9va4odOjllcDkADEhnLUxZXGdu6asJiJO/yzPEMy5Jhvrmsiq1tcaIBldNjFqbtcz5r8+KHOU6nLSoNlbqojqYoeFKiKQJdFWiK4JV+k1hAZXNznL+dmbBe6M3u7smUzvjT5JsBEAEe9iXNuqI0fKalzBgwbYZMhwfW11EV1ghqCqvrIixLRhgwbQZNG9uT9GQsXvwwx/msQzKqUx3R0YTAl5CM6kR0hdNpi4Sh8dypTP/ZCft1X7INeA+wxYwcAhsrDe2p9opg9Y821FMb1ck7Hg1lAWbQAqhCMFpweOLdMZ56L8245V7aq4nobG2LU25oDJo2qUmH4bzDYM7BR1J0/IwvmQB+DTwISAFsBb4V0kQ6oqsrv7K4fPHdS6uoLwsgAXlZ8EviIsCX8Eq/yYNvpOhOFeagwgCUgKNC8LiUVAFHVWAIcGIB9cvrm2KfWj0vSldNGFX5z9IugPbyEK3lQQ71ZbFcecVz7RUhbm4u45b2BMmIrs2LBZITlruh6Mo88E8NWAU0qULki44vm+IBEZpm9Wzm+pLOaoNlyTCHz5kf229JBHl0SyNLrjFQhODo4CS7j6QCRUe+CvwKGFKATmCppgjd8/FM259rOZFAJKByc3P8Y9MrqAq2r6jm2uowEvClRALz40FZHdE2APuAXQqwB9iZLrrHPSlFT8Zi0HQu3fWsIKTkxsYoreVBdEVcArK1LcFtCxP4UqIIMG2PkbzDqbGiO5CznwS+BOxWgSjwQ1WIzkzR7TZtv1EIdNeXBDWFiK7MWoV4SGNdQ5RNzWXc0BhjVV2Eu66tpCaiowjBkOlwcrTIb4+lnZztj4xb3mJPkgFeFUyJUCNTA2nHgsrQTrPkjW1rTzSPFVz/xxvmqWVBdVZOKEIww9uZkgsgNelw+JzJwRMZK6AK8dqFyfuB94Ek8CcV8IFxoFLCvWMFd7cnSV0wnaZ3U4WD82KBrq5kWJ0NwFTQqTXTup6E3UeGnb/3ZcWZTOnpCzmn1/PlMuAXwJuAc/kscIGXBRy2fbk5V/J6PMkDowV35aq6aEtVWJtTZ8yYKgRvDeXZ8+bIsx9krKGSJ/tcX+5i6lvhHFCAjw4jd7oSACPAy5oiUkOTTkpXxS3rGqKGMhdWMqURRU+y563hi69fmNwOvD0d8J3p8l9SLvUTfIwA2WkJ7h80ndqOytDqtorQFZXxY9krgpfO53j07dHHCo7/DHAeOH5F7swhITc16ew58H765FjBmbU1BZC1XJ47Od4zWnD3MUWPmXX1ABRFYUF5sPelc+bDfz49Yc96Xgj+cTYnD583n7hrScWZWas12wEpJWnLw5OcGc67Xctrwx01kcAV0xECRvIuPz8y3P1B2rr/2EjRnM3/XK6AtpiKqgjzxGjxZweOpUct17/ij4MAnu+dcF4fmHxkXkwfmovvWSsAkLHlDPkGBk2norU8eP3CKgMhBKoQ0yIkODth89DR4Zcu5OwHTNu3/msALr+RguP35ErehkVVRvJMxuLIYJ6etIXrw197xvN/PDW+K6Ir7zn+1ajGVVhVWMPQla81lAUKYV2RAqQikJWGJisM7VnA+N9E/qhFgef5aIvlgM9eraN/A7XCX1o55MN7AAAAAElFTkSuQmCC'
    display_name = 'Kemono.Party'
    MAX_CORE = 4

    def read(self):
        self.session = Session()

        info = read_info(self.url, self.session, self.cw)

        type_ = info['type']
        if type_ == 'post':
            for img in info['imgs']:
                self.urls.append(img.url)
            self.title = info['title']
        else:
            raise NotImplementedError(type_)


def read_info(url, session, cw):
    print_ = get_print(cw)
    info = {}
    if '/post/' in url:
        type_ = 'post'
    else:
        raise NotImplementedError('Not a post')
    info['type'] = type_
    res = clf2.solve(url, session=session, cw=cw)

    soup = Soup(res['html'])
    info_ = read_post(url, soup, cw)

    info['imgs'] = info_['imgs']
    tail = ' (kemono.party_{}_{})'.format(type_, info_['id'])
    info['title'] = '{}{}'.format(clean_title(info_['title'], allow_dot=True, n=-len(tail)), tail)
    return info


def read_post(url, soup, cw):
    print_ = get_print(cw)
    info = {}
    info['title'] = soup.find('h1').text
    info['id'] = soup.find('meta', {'name': 'id'})['content']
    
    imgs = []

    # Downloads
    for item in soup.findAll('li', class_='post__attachment'):
        href = urljoin(url, item.find('a')['href'])
        img = Image(href, url, len(imgs))
        imgs.append(img)

    # Files
    files = soup.find('div', class_='post__files')
    if files:
        for item in files.findChildren(recursive=False):
            if 'href' in item.attrs:
                a = item
            else:
                a = item.find('a')
            href = urljoin(url, a['href'])

            # Imgur
            if 'imgur.com/' in href:
                print_('Imgur: {}'.format(href))
                try:
                    from extractor import imgur_downloader
                    for img in imgur_downloader.get_imgs(href):
                        img = Image(img, href, len(imgs))
                        imgs.append(img)
                except Exception as e:
                    print_(print_error(e))
                continue

            img = Image(href, url, len(imgs))
            imgs.append(img)

    # Content
    content = soup.find('div', class_='post__content')
    if content:
        for img in content.findAll('img'):
            src = urljoin(url, img['src'])
            img = Image(src, url, len(imgs))
            imgs.append(img)

    info['imgs'] = imgs
    return info


messageBox(u'{}: Kemono.Party'.format(tr_(u'사이트를 추가했습니다')))
20
18 comments
08/08/25 Edited 08/08/25
와 감사합니다. 일일이 하나씩 받고있었는데
08/08/25
url 형식만 바뀐겨?
케모노꺼까지 와우
08/09/25
호옥쉬 coo로 시작하는 비슷한 사이트도 만들어줄수있어?
08/09/25
그쪽은 개발자 공식 스크립트는 없는거같은데 아래에 누가 올려준 스크립트쓰셈
08/10/25
이거 히토미 다운로더 이와라도 다운 가능했었던가?
08/29/25
ㅇㅇ 근데 쿠기 파일 같은거 수동으로 넣어주고 했었었음 로그인 안하면 제한걸려서 그랬던가
08/29/25
놓쳤는데 연장가능? ㅠ
08/30/25
위에 소스코드 복사해서 탐색기에서 빈 텍스트 파일 만들고 붙여넣기 한다음 저장 kemono.py 로 이름 바꾸기
09/09/25
복붙하고 py로 하고 적용했는데 invalid오류뜸.... dns우회해도 안되고...머가문제지
09/10/25
방금 다시 테스트해봄 잘됨 플러그인에 다른 기존 스크립트랑 충돌나는건지 확인해보고 스크립트 빼고 몇번 껏다 켯다해보고 다시 추가해보셈
09/16/25
원래 한 작가 전체작품도 다운가능하지 않았음? 하나씩은 다운되는데 전체는 invalid 뜨네 오류인가.....?
09/16/25
다운로더 원제작자가 아니라 다른사람꺼 쓰신듯 난 원제작자꺼 살짝 수정한거라 원래 기능엔 변함이없음
09/16/25
해결은 못했는데 비슷하게는 했습니당 감사합니다
09/17/25
어떻게 해결함?
09/17/25 Edited 09/17/25
09/20/25
감사감사 CR 도메인때문에 못하고있었는데 덕분에 해결함
12/05/25 Edited 12/05/25
혹시 discord에서 이미지 다운하는 스크립트도 제작 부탁드릴수있을까요 post에서는 정상 작동하는데 discord에서는 안되네요 ㅠㅠ 어떻게 한번 해보려고 이래저래 수정해서 읽기까지는 되는데 결국 이미지 파일 못찾고 끝나네요 ㅠㅠ
압축파일 썸네일 미리보기 프로그램
유틸
fc6974
12/01/25 11783 54
[노모이미지만] 조심의 마도구 ~강하게 아름다운 모험자의 최후~ ver.1.3.0
유틸
미스터장
11/30/25 9695 38
게시판 추천 수 필터링 스크립트
유틸
qqoro
11/28/25 2255 4
RJ01461468 히토즈마이스터!! 미니게임 간단화
유틸
순애아니면죽는사람
11/28/25 16690 7
몬파라 3.06 편의성 모드
유틸
아르
11/26/25 4061 12
저주받은 갑옷2 후원의상+서큐버스 dlc[2025.11.26 오전7시 수정]
유틸
liberty
11/25/25 8774 12
케모노,히토미,X,유튜브 등등 downloader gallery-dl, yt-dlp 활용
유틸
noname
11/25/25 9732 16
Starmaker Story 모드
유틸
0Plm0
11/25/25 5831 7
Romantic Escapades 한시 정답
유틸
생각하는고래
11/24/25 3670 4
줍줍한 유니티6 기계번역세트(기대하지 마십시오.)(재업)
유틸
와랄랄라라
11/24/25 14326 25
texture replacer v1.2.0.4
유틸
kumarin
11/23/25 10943 34
타락신관 첫상대 미표시 버그 패치
유틸
딸기라떼
11/23/25 13507 6
타락신관 조이플 이미지 오류 해결
유틸
yeppi
11/23/25 7836 21
이미지 누락 임시 처리) RJ239186 hazumi
유틸
ㅇㅇ
11/23/25 1851 0
개소리 제거) RJ289056 [KICHUREA] 빌 네메레트 Villnammellet 1.201 손번역 기준
유틸
ㅇㅇ
11/22/25 2503 7
타락신관: 여동생과 악마의 혈통 몰디브, 조이플 한국언어 파일
유틸
ssamjang
11/21/25 5906 9
후타)[복구]무표정한 후타나리는 착정 생물과의 교미에 절대 매료되지 않는다 노모패치+이전 작품 노모패치
유틸
레가토
11/21/25 4710 3
코네 링크 변환기
유틸
ㅇㅇ
11/19/25 10151 6
ai 클로드랑 만든 알만툴 검수 스크립트 mv용
유틸
루파조아
11/17/25 10324 6
RPG MV/MZ 실시간 번역기 - 1.3
유틸
mrpls
11/15/25 22820 116
[요청복구] 감옥용사 조이플 구동 패치
유틸
감비아
11/14/25 7624 7
[노모패치] 란스03
유틸
imakotou
11/14/25 12834 70
RPG MV/MZ 실시간 번역기 0.5 - 종말 얼터 에고이즘 패치
유틸
mrpls
11/11/25 8001 12
NTR 던전] 맵 수정으로 돈 치트.
유틸
전여친
11/11/25 3721 10
리코의 불가사의한 심부름 - 스위치를 더 투명하게
유틸
ㅇㅇ
11/10/25 3056 3
종말얼터 아쉬운부분 약간 수정함
유틸
yuri88
11/10/25 3259 6
포레스티아 낚시 파일 수정본
유틸
geekel
11/09/25 4927 21
Cursed Armor 2 회상방 열기 귀찮은 사람은 쓰는게 좋은 치트
유틸
roandoo
11/08/25 4624 2
demosaic colMask
유틸
kumarin
11/06/25 37451 57
후타)잠꾸러기 후타나리의 착정던전 구출기 노모패치
유틸
레가토
11/03/25 12681 18