Esempio n. 1
0
    def run(self, runInput=True, runOutput=True):
        self.loadModules()
        self.setupModules()
        if runInput:
            for key, modules in self.modules['input'].iteritems():
                for module in modules:
                    module.input(self)
        if runOutput:
            if self.getConfig('kindleOutput') or self.getConfig('epubOutput'):
                epubSections = []

                for section in self.modules['output']:
                    epubSection = {'title': section['section-title'],
                                   'chapters': []}
                    for module in section['modules']:
                        #todo: don't make it append as a side effect, make it return the chapters
                        module.outputEpubDoc(self, epubSection['chapters'])
                    if len(epubSection['chapters']) > 0:
                        epubSections.append(epubSection)

            if self.getConfig('kindleOutput') or self.getConfig('epubOutput'):
                today = datetime.date.today().strftime("%Y-%m-%d")
                epubFilename = "/tmp/steward-%s.epub" % (today, )
                mobiFilename = "/tmp/steward-%s.mobi" % (today, )
                eb = EpubBuilder(epubFilename, "Steward for %s" % (datetime.date.today().strftime("%B %d, %Y")), "Information Steward", epubSections, True)
                eb.writeBookFile()
                if self.getConfig('kindleOutput'):
                    call(["/home/phuff/bin/kindlegen", epubFilename])

                    message = MIMEMultipart()
                    message["Subject"] = ""
                    message['To']  = self.getConfig('kindleEmailAddress')
                    message['From'] = self.getConfig('senderEmailAddress')
                    fp = open(mobiFilename)
                    attachment = MIMEBase("application", "x-mobipocket-ebook")
                    attachment.set_payload(fp.read())
                    attachment.add_header('Content-Disposition', 'attachment', filename=os.path.basename(mobiFilename))
                    fp.close()
                    encoders.encode_base64(attachment)
                    message.attach(attachment)
                    server = smtplib.SMTP(self.getConfig('senderSMTPHost'))
                    server.ehlo()
                    server.starttls()
                    server.login(self.getConfig('senderEmailAddress'), self.getConfig('senderEmailPassword'))
                    server.sendmail(self.getConfig('senderEmailAddress'), self.getConfig('kindleEmailAddress'), message.as_string())
                    server.quit()
Esempio n. 2
0
def main():
    args = parse_args(sys.argv[1:]) or exit()

    if args.verbose:
        root_logger = getLogger()
        root_logger.setLevel(logging.DEBUG)

    if args.quiet:
        root_logger = getLogger()
        root_logger.setLevel(logging.CRITICAL)

    grabber_manager = GrabberManager()
    grabber_manager.load_from_dir(config['grabbers_dir'])
    if args.grabbers:
        for grabber in grabber_manager.all_grabbers():
            logging.info("%s '%s'", grabber.name, grabber.info)
        exit()

    if args.grabber:
        grabber = grabber_manager.get(args.grabber)
        if grabber is None:
            fatal("Grabber '%s' does not exists", args.grabber)
        logging.debug("Grab by '%s' grabber", grabber.name)
    else:
        grabber = None

    title = args.title
    epub_name = None
    logging.debug('Getting pages...')
    if len(args.sources) == 1:
        url = args.sources[0]
        grabber = grabber or grabber_manager.get_suitable(url)
        info, stream, images = grabber.grab(url)
        title = title or info['title'] or args.out
        if not title:
            url = url.rstrip('/')
            title = os.path.split(url)[1]

        if args.out:
            try:
                epub_name = args.out.format(**info)
            except KeyError as exc:
                fatal("Error in output format key: %s", exc)
        else:
            fmt = '{date} {title}'.format(**info)
            if fmt.strip():
                epub_name = fmt
        lang = args.lang or info.get('lang')
        builder = EpubBuilder(title, lang=lang,
            creator=info.get('creator'), date=info.get('create_date'))
        add2builder(builder, 'ch1.html', stream, info, images)
    else:
        # TODO pass arg 'lang' to EpubBuilder(..., lang=language)
        builder = EpubBuilder(title)
        for i, url in enumerate(args.sources, 1):
            grabber = grabber or grabber_manager.get_suitable(url)
            info, stream, images = grabber.grab(url)
            add2builder(builder, 'ch{}.html'.format(i), stream, info, images)

    dest = epub_name or title[:config['autoname_len']]
    if os.path.splitext(dest)[1] != '.epub':
        dest = '{}.epub'.format(dest)
    if args.no_spaces:
        dest = dest.replace(' ', '_')

    logging.debug('Building book...')
    builder.build(dest=dest)
    logging.info('Complete. Saved to "%s"', dest)