diff --git a/adapter.py b/adapter.py index ff1cb8ef..bf37a017 100644 --- a/adapter.py +++ b/adapter.py @@ -1,3 +1,10 @@ +class LoginRequiredException(Exception): + def __init__(self, url): + self.url = url + + def __str__(self): + return repr(self.url + ' requires user to be logged in') + class FanfictionSiteAdapter: login = '' password = '' diff --git a/downaloder.py b/downaloder.py index e119f810..dee7a30d 100644 --- a/downaloder.py +++ b/downaloder.py @@ -12,13 +12,17 @@ import urlparse as up import BeautifulSoup as bs import htmlentitydefs as hdefs + import ffa import ffnet import ficwad import output +import adapter import fictionalley import hpfiction +import time + class FanficLoader: '''A controller class which handles the interaction between various specific downloaders and writers''' booksDirectory = "books" @@ -30,7 +34,10 @@ class FanficLoader: self.inmemory = inmemory self.compress = compress self.badLogin = False - + + def getAdapter(): + return self.adapter + def download(self): logging.debug("Trying to download the story") if self.adapter.requiresLogin(): @@ -38,7 +45,7 @@ class FanficLoader: if not self.adapter.performLogin(): logging.debug("Login/password problem") self.badLogin = True - return None + raise adapter.LoginRequiredException(self.adapter.url) urls = self.adapter.extractIndividualUrls() self.writer = self.writerClass(self.booksDirectory, self.adapter.getStoryName(), self.adapter.getAuthorName(), inmemory=self.inmemory, compress=self.compress) @@ -50,7 +57,7 @@ class FanficLoader: i = i+1 text = self.adapter.getText(u) self.writer.writeChapter(n, text) - + self.writer.finalise() if self.inmemory: diff --git a/ffa.py b/ffa.py index b8c307ec..ca81c6d5 100644 --- a/ffa.py +++ b/ffa.py @@ -39,13 +39,21 @@ class FFA(FanfictionSiteAdapter): def _getLoginScript(self): return self.path - def requiresLogin(self, url = None): - resp = self.opener.open(self.url) - data = resp.read() - if data.find('') != -1: + def reqLoginData(self, data): + if data.find('') != -1 or data.find('