kone
소미소프트

소미소프트

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

08/08/2025, 17:39:36
유틸
19605 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: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'
    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에서는 안되네요 ㅠㅠ 어떻게 한번 해보려고 이래저래 수정해서 읽기까지는 되는데 결국 이미지 파일 못찾고 끝나네요 ㅠㅠ
솜서운 이야기) 코네는 오픈한지 1주년이 지났다
일반
1uF
05/21 1871 1
충간) 출처불명 MMD 2개
영상
nokchabap
05/21 16418 40
동음 분류 완벽하게 끝났음
일반
blendersine
05/21 1838 1
[노모패치] 갓 딴 임신시키기 좋은 날
유틸
나나바
05/21 9869 39
형님들 세븐데이즈 관련 질문하나만요 제발
질문
solarium
05/21 4449 -2
신케나 신작게임은 사실 ...
일반
lovesccubus
05/21 2318 0
코네 글 쓸 때 댓글 막는 기능이 있음?
질문
wfwgsvsb
05/21 2002 0
의술사 리코
질문
bmhaz
05/21 2619 0
혹시 비월선행록 조이플 실행안됨?
질문
ghgdtl
05/21 5426 0
의술사 특기 기도 이거 어디서 얻음??
질문
Noel
05/21 2284 0
던브) 경비대장이나 다른 여인숙의 손님이랑은 떡 못 침?
질문
nagisa8262
05/21 5105 0
바레트 & 티파 (파판)
영상
브레머튼
05/21 17574 81
세븐데이즈 원래 초반에 저장 안됨??
질문
solarium
05/21 2500 0
질베르타 (엔드필드)
영상
브레머튼
05/21 14856 85
로산나 (니케)
영상
브레머튼
05/21 17392 98
소붕이들 순애좋아해?
일반
아이기스맘
05/21 3384 -5
언홀메 모드 기대했는데 첫인상이 안좋아
일반
ntr-masterpeace
05/21 2666 4
[복구요청] RJ01104619 이상의 아빠
요청
124515dd
05/21 4337 0
쯔꾸르 적 hp바 추가 할 수 있는 능력자 있습니까??
질문
i1li1l11li1li
05/21 3225 2
잭오나 질문 좀 해도 됨?
질문
8번손님
05/21 2620 0
[5YK+5LiW6YGK5bq1] 진 만큼 몸으로 갚을게요♡~여사장 AV 데뷔 전편자막
영상
pomihi
05/21 27604 88
카린형무소 일기
정보
sorbe123
05/21 3627 8
척영 근황에 대해 또 알아보자
정보
zerocoke00
05/21 10830 27
직번) [choukutetsushitsugan] 魔마마 사냥 -전직 마법소녀 엄마의 타락 배란 교미-
동인
qlalfsla
05/21 35711 236
[5/16] 스파키 (스타레일)
영상
브레머튼
05/21 17137 89
비월선행록 지뢰녀
세이브
subbb
05/21 9306 9
[복구요청] [구매보급][NTR] Pigtarotaro 최신작까지 모음(Patreon 노모버전)
요청
갱생
05/21 2963 5
ai, 명조) 방순이에게 청혼하고 잔뜩 아기 만들기 섹스했다
야짤
kjh9304
05/21 10600 105
[구매보급]【한국어 자막판】 【4시간 × 더블 여검사 × 더블 하렘】 ~오네쇼타 길드~ 신참 모험가인 나와 엄청 야한 폭유 여검사 누님×2 와 아이 만들기 임신 젖가슴 퀘스트♪(RJ01457321)
소리
Mecklen
05/21 17247 338
ai) 사이좋은 부녀
야짤
메르헨소행성
05/21 11008 27