From 17c6dddfacb255e93382a9f8b201b7dd4029a302 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Fri, 11 Oct 2013 18:14:35 -0500 Subject: [PATCH] Add user/pass support for 18+ rated stories on fictionpad.com --- defaults.ini | 7 +++ .../adapters/adapter_fictionpadcom.py | 45 ++++++++++++++++++- plugin-defaults.ini | 7 +++ 3 files changed, 57 insertions(+), 2 deletions(-) diff --git a/defaults.ini b/defaults.ini index 87cbceb..2570034 100644 --- a/defaults.ini +++ b/defaults.ini @@ -769,6 +769,13 @@ extraships:Harry Potter/Hermione Granger #password:yourpassword [fictionpad.com] +## Some sites require login (or login for some rated stories) The +## program can prompt you, or you can save it in config. In +## commandline version, this should go in your personal.ini, not +## defaults.ini. +#username:YourName +#password:yourpassword + extra_valid_entries:followers,comments,views,likes,dislikes #extra_titlepage_entries:followers,comments,views,likes,dislikes diff --git a/fanficdownloader/adapters/adapter_fictionpadcom.py b/fanficdownloader/adapters/adapter_fictionpadcom.py index 6b5175c..1debc03 100644 --- a/fanficdownloader/adapters/adapter_fictionpadcom.py +++ b/fanficdownloader/adapters/adapter_fictionpadcom.py @@ -64,7 +64,45 @@ class FictionPadSiteAdapter(BaseSiteAdapter): # http://fictionpad.com/author/Serdd/stories/4275 return r"http(s)?://(www\.)?fictionpad\.com/author/(?P[^/]+)/stories/(?P\d+)" +#
+# +# +# or with FictionPad +# +# +# +# +# +#

+# Forgot your password? +#

+#
+ def performLogin(self): + params = {} + if self.password: + params['login'] = self.username + params['password'] = self.password + else: + params['login'] = self.getConfig("username") + params['password'] = self.getConfig("password") + params['remember'] = '1' + + loginUrl = 'http://' + self.getSiteDomain() + '/signin' + logger.debug("Will now login to URL (%s) as (%s)" % (loginUrl, + params['login'])) + + ## need to pull empty login page first to get authenticity_token + soup = bs.BeautifulSoup(self._fetchUrl(loginUrl)) + params['authenticity_token']=soup.find('input', {'name':'authenticity_token'})['value'] + + data = self._postUrl(loginUrl, params) + + if "Invalid email/pseudonym and password combination." in data: + logger.info("Failed to login to URL %s as %s" % (loginUrl, + params['login'])) + raise exceptions.FailedToLogin(loginUrl,params['login']) + def extractChapterUrlsAndMetadata(self): # fetch the chapter. From that we will get almost all the @@ -75,13 +113,16 @@ class FictionPadSiteAdapter(BaseSiteAdapter): try: data = self._fetchUrl(url) + if "This is a mature story. Please sign in to read it." in data: + self.performLogin() + data = self._fetchUrl(url) + find = "wordyarn.config.page = " data = data[data.index(find)+len(find):] data = data[:data.index("")] data = data[:data.rindex(";")] data = data.replace('tables:','"tables":') tables = json.loads(data)['tables'] - #print("data:\n%s"%data) except urllib2.HTTPError, e: if e.code == 404: raise exceptions.StoryDoesNotExist(url) @@ -99,7 +140,7 @@ class FictionPadSiteAdapter(BaseSiteAdapter): self.story.setMetadata('title',story_ver['title']) self.setDescription(url,story_ver['description']) - print("story_ver['profile_image_url@2x']:%s"%story_ver['profile_image_url@2x']) + if not ('assets/story_versions/covers' in story_ver['profile_image_url@2x']): self.setCoverImage(url,story_ver['profile_image_url@2x']) diff --git a/plugin-defaults.ini b/plugin-defaults.ini index df1f99e..86fec8d 100644 --- a/plugin-defaults.ini +++ b/plugin-defaults.ini @@ -754,6 +754,13 @@ extraships:Harry Potter/Hermione Granger #password:yourpassword [fictionpad.com] +## Some sites require login (or login for some rated stories) The +## program can prompt you, or you can save it in config. In +## commandline version, this should go in your personal.ini, not +## defaults.ini. +#username:YourName +#password:yourpassword + extra_valid_entries:followers,comments,views,likes,dislikes #extra_titlepage_entries:followers,comments,views,likes,dislikes