FanFicFare/downaloder.py
2009-12-17 12:38:34 +00:00

80 lines
No EOL
2 KiB
Python

import os
import re
import sys
import shutil
import os.path
import getpass
import urllib as u
import pprint as pp
import urllib2 as u2
import urlparse as up
import BeautifulSoup as bs
import htmlentitydefs as hdefs
import ffa
import ffnet
import ficwad
import output
import fictionalley
class FanficLoader:
'''A controller class which handles the interaction between various specific downloaders and writers'''
booksDirectory = "books"
def __init__(self, adapter, writerClass):
self.adapter = adapter
self.writerClass = writerClass
def download(self):
urls = self.adapter.extractIndividualUrls()
self.writer = self.writerClass(self.booksDirectory, self.adapter.getStoryName(), self.adapter.getAuthorName())
i = 0
for u,n in urls:
print('Downloading chapter %d/%d' % (i, len(urls)))
i = i+1
text = self.adapter.getText(u)
self.writer.writeChapter(n, text)
self.writer.finalise()
if __name__ == '__main__':
(url, format) = sys.argv[1:]
if type(url) is unicode:
print('URL is unicode')
url = url.encode('latin1')
adapter = None
writerClass = None
if url.find('fanficauthors') != -1:
adapter = ffa.FFA(url)
elif url.find('fictionalley') != -1:
adapter = fictionalley.FictionAlley(url)
elif url.find('ficwad') != -1:
adapter = ficwad.FicWad(url)
elif url.find('fanfiction.net') != -1:
adapter = ffnet.FFNet(url)
else:
print >> sys.stderr, "Oi! I can haz not appropriate adapter for URL %s!" % url
sys.exit(1)
if format == 'epub':
writerClass = output.EPubFanficWriter
if adapter.requiresLogin(url):
print("Meow, URL %s requires you to haz been logged in! Please can I haz this datas?" % url)
sys.stdout.write("Can I haz ur login? ")
login = sys.stdin.readline().strip()
password = getpass.getpass(prompt='Can I haz ur password? ')
print("Login: `%s`, Password: `%s`" % (login, password))
adapter.setLogin(login)
adapter.setPassword(password)
loader = FanficLoader(adapter, writerClass)
loader.download()