diff --git a/gallery_dl/extractor/imgchili.py b/gallery_dl/extractor/imgchili.py index 8cd67e06..8b9dc017 100644 --- a/gallery_dl/extractor/imgchili.py +++ b/gallery_dl/extractor/imgchili.py @@ -1,59 +1,104 @@ # -*- coding: utf-8 -*- -# Copyright 2014, 2015 Mike Fährmann +# Copyright 2014-2016 Mike Fährmann # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. -"""Extract images from albums at http://imgchili.net/""" +"""Extract images from http://imgchili.net/""" from .common import Extractor, Message from .. import text -import re class ImgchiliExtractor(Extractor): - + """Base class for imgchili extractors""" category = "imgchili" - directory_fmt = ["{category}", "{title} - {key}"] - filename_fmt = "{num:>03}-{name}" - pattern = [r"(?:https?://)?(?:www\.)?imgchili\.net/album/([^/]+)"] + directory_fmt = ["{category}"] + url_base = "http://imgchili.net/" def __init__(self, match): Extractor.__init__(self) + self.url = match.group(0) self.match = match - self.num = 0 + self.session.headers["Referer"] = self.url_base def items(self): - page = self.request(self.match.string).text + page = self.request(self.url).text + data = self.get_job_metadata(page) yield Message.Version, 1 - yield Message.Headers, {"Referer": "http://imgchili.net/"} - yield Message.Directory, self.get_job_metadata(page) - - pattern = r' src="http://t(\d+\.imgchili\.net/(\d+)/(\d+)_([^/"]+))"' - for match in re.finditer(pattern, page): - yield Message.Url, self.get_file_url(match), self.get_file_metadata(match) + yield Message.Headers, self.session.headers + yield Message.Directory, data + for url, image in self.get_images(page): + data.update(image) + yield Message.Url, url, data def get_job_metadata(self, page): """Collect metadata for extractor-job""" + return {} + + def get_images(self, page): + """Collect image-urls and -metadata""" + return [] + + +class ImgchiliImageExtractor(ImgchiliExtractor): + """Extractor for single images from imgchili""" + subcategory = "image" + filename_fmt = "{filename}" + pattern = [r"(?:https?://)?(?:www\.)?imgchili\.net/show/\d+/(\d+)_[^/]+"] + test = [("http://imgchili.net/show/89427/89427136_test___quot;___gt;.png", { + "url": "b93d92a6b58eb30a7ff6f9729cb748d25fea0c86", + "keyword": "376c4584dfae7d7d2e88687d4ee9618bbfd0a35c", + "content": "0c8768055e4e20e7c7259608b67799171b691140", + })] + + def get_job_metadata(self, page): + name , pos = text.extract(page, 'An image called ', '" />\n') + _ , pos = text.extract(page, ' 1 else "" + }) + + def get_images(self, page): + return [(self.imgurl, {})] + + +class ImgchiliAlbumExtractor(ImgchiliExtractor): + """Extractor for image-albums from imgchili""" + subcategory = "album" + directory_fmt = ["{category}", "{title} - {key}"] + filename_fmt = "{num:>03} {filename}" + pattern = [r"(?:https?://)?(?:www\.)?imgchili\.net/album/([^/]+)"] + test = [("http://imgchili.net/album/7a3824c59f77c8d39b260f9168d4b49b", { + "url": "995e32b62c36d48b02ef4c7a7a19463924391e2a", + "keyword": "2d065bd7f822de4c0b7598679f2730e0082a617e", + "content": "6c596851567a68c2a68456b3abd959eae3d21c32", + })] + + def get_job_metadata(self, page): title = text.extract(page, "

", "

")[0] return { - "category": info["category"], - "title": title, + "category": self.category, + "subcategory": self.subcategory, + "title": text.unescape(title), "key": self.match.group(1), } - def get_file_metadata(self, match): - """Collect metadata for a downloadable file""" - self.num += 1 - return { - "album-id": match.group(2), - "image-id": match.group(3), - "name": match.group(4), - "num": self.num, - } - - @staticmethod - def get_file_url(match): - """Extract download-url from 'match'""" - return "http://i" + match.group(1) + def get_images(self, page): + pos = 0 + num = 0 + while True: + num += 1 + url , pos = text.extract(page, '