# -*- coding: utf-8 -*- # 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 http://imgchili.net/""" from .common import Extractor, Message from .. import text class ImgchiliExtractor(Extractor): """Base class for imgchili extractors""" category = "imgchili" directory_fmt = ["{category}"] url_base = "http://imgchili.net/" def __init__(self, match): Extractor.__init__(self) self.url = match.group(0) self.match = match self.session.headers["Referer"] = self.url_base def items(self): page = self.request(self.url).text data = self.get_job_metadata(page) yield Message.Version, 1 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": self.category, "subcategory": self.subcategory, "title": text.unescape(title), "key": self.match.group(1), } def get_images(self, page): pos = 0 num = 0 while True: num += 1 url , pos = text.extract(page, '