kone
소미소프트

소미소프트

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

08/08/2025, 17:39:36
유틸
19453 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에서는 안되네요 ㅠㅠ 어떻게 한번 해보려고 이래저래 수정해서 읽기까지는 되는데 결국 이미지 파일 못찾고 끝나네요 ㅠㅠ
서브,게시글 차단, UI추가 유저스크립트
유틸
cloud67p
10/05/25 2666 11
카린즈 프리즌 cc모드 기계번역해옴
유틸
고추보집물
10/03/25 8945 39
무기력 천사 추가 렉 개선 패치 (a.k.a 쯔꾸르는 최적화 쓰레기가 분명하다)
유틸
erukajihx
10/02/25 6681 65
번역 플러긴용 일본 이름 정리
유틸
kumarin
10/02/25 2246 10
Aideal Helper plugin v1.0.2.0
유틸
kumarin
09/30/25 2274 10
3시간 만에 만든 방주 중복 정리기
유틸
asdf1243
09/30/25 3262 8
팔성제(八星帝) ssg 파일
유틸
hdddie
09/28/25 2960 7
다키스트던전 Deovolente 에디션
유틸
doyoulikekim
09/27/25 9840 29
[v10] 자동 소미 Auto Somi 개조판
유틸
마나난
09/26/25 14471 22
좀더! 불꽃의 시리즈 붉은화면 수정패치
유틸
adsv42
09/23/25 3802 15
도나도나 미검열 CG 오류들 수정
유틸
riel64
09/23/25 17314 77
SW_Decensor v0.7.4.1
유틸
kumarin
09/21/25 9506 38
base64 자동 디코딩 크롬 확장 프로그램 입니다.
유틸
qqwe1234
09/18/25 10030 80
내가 dl 검색할 때 귀찮아서 만든 프로그램
유틸
boya058
09/17/25 3045 10
코네 서브/게시글/댓글/유저 필터, 차단 스크립트 v1.3
유틸
공승아
09/14/25 4549 8
XUnity.AutoTranslator 5.6.1_kr 번역 플러그인 한국형 비공식 버전
유틸
kumarin
09/13/25 10970 41
게시글 제목 필터 스크립트
유틸
cloud67p
09/13/25 1996 5
후타)무표정한 후타나리는 착정 생물과의 교미에 절대 매료되지 않는다 노모패치 + 이전 작품 노모패치 복구
유틸
레가토
09/12/25 10655 26
다키스트 던전 NSFW 완전판 [Npc 리텍 / 영웅 리텍 / 이쁜이쁜 영웅 모드 / 몬스터 리텍]
유틸
삐뉴
09/10/25 17722 95
[복구] +@ 시니시스타 2 모드 모음 (1.10)
유틸
sims9876
09/10/25 13362 26
야겜아님,미번) RJ01432103 MACHINE CHILD (머신 차일드) 일본어판
유틸
AND
09/09/25 7506 25
둘만의 생활 세이브 에디터
유틸
அறியப்பட்ட🔧
09/07/25 15497 14
코네 이미지 뷰어 개선 스크립트
유틸
Ghost
09/06/25 4461 10
[버그수정용] 검은정복왕 우클릭 팅김 버그수정
유틸
Ghost
09/06/25 5862 24
히토미 시리즈를 통합시키는 프로그램을 만들어 보았습니다.
유틸
ariantganada
09/06/25 5360 11
스텔라블레이드 릴리 누드모드 복구+추가함
유틸
konekat
09/03/25 9876 19
.RPGMVP .PNG_ 파일 썸네일 제공 DLL 보안 업데이트
유틸
moomin
09/02/25 4961 22
카린즈 프리즌 Karryn's Prison 치트 모드
유틸
qpspql
09/01/25 15492 21
webp.zip 파일 자동으로 jpg 로 변환 후 재 압축 프로그램 만듬 (2025.12.10 업데이트)
유틸
noname
08/31/25 2369 12
유니티 신버전 자동번역기
유틸
김머시기
08/31/25 8614 31