diff --git a/fanficfare/adapters/__init__.py b/fanficfare/adapters/__init__.py index d6ff27a2..301cd9c1 100644 --- a/fanficfare/adapters/__init__.py +++ b/fanficfare/adapters/__init__.py @@ -136,6 +136,7 @@ import adapter_devianthearts import adapter_tgstorytimecom import adapter_itcouldhappennet import adapter_forumsspacebattlescom +import adapter_forumssufficientvelocitycom ## This bit of complexity allows adapters to be added by just adding ## importing. It eliminates the long if/else clauses we used to need diff --git a/fanficfare/adapters/adapter_forumsspacebattlescom.py b/fanficfare/adapters/adapter_forumsspacebattlescom.py index b735f5a3..2e5e5bf7 100644 --- a/fanficfare/adapters/adapter_forumsspacebattlescom.py +++ b/fanficfare/adapters/adapter_forumsspacebattlescom.py @@ -53,7 +53,7 @@ class ForumsSpacebattlesComAdapter(BaseSiteAdapter): self.story.setMetadata('storyId',m.group('id')) # normalized story URL. - self._setURL('https://' + self.getSiteDomain() + '/threads/'+self.story.getMetadata('storyId')+'/') + self._setURL(self.getURLPrefix() + '/threads/'+self.story.getMetadata('storyId')+'/') else: raise exceptions.InvalidStoryURL(url, self.getSiteDomain(), @@ -71,13 +71,16 @@ class ForumsSpacebattlesComAdapter(BaseSiteAdapter): # The site domain. Does have www here, if it uses it. return 'forums.spacebattles.com' + @classmethod + def getURLPrefix(cls): + # The site domain. Does have www here, if it uses it. + return 'https://' + cls.getSiteDomain() + @classmethod def getSiteExampleURLs(cls): - return "https://"+cls.getSiteDomain()+"/threads/some-story-name.123456/" + return cls.getURLPrefix()+"/threads/some-story-name.123456/" def getSiteURLPattern(self): - # http://archiveofourown.org/collections/Smallville_Slash_Archive/works/159770 - # Discard leading zeros from story ID numbers--AO3 doesn't use them in it's own chapter URLs. return r"https?://"+re.escape(self.getSiteDomain())+r"/threads/(.+\.)?(?P\d+)/" def use_pagecache(self): @@ -106,7 +109,7 @@ class ForumsSpacebattlesComAdapter(BaseSiteAdapter): a = soup.find('h3',{'class':'userText'}).find('a') self.story.addToList('authorId',a['href'].split('/')[1]) - self.story.addToList('authorUrl','https://'+self.getSiteDomain()+'/'+a['href']) + self.story.addToList('authorUrl',self.getURLPrefix()+'/'+a['href']) self.story.addToList('author',a.text) self.story.addToList('genre','ForumFic') @@ -120,11 +123,11 @@ class ForumsSpacebattlesComAdapter(BaseSiteAdapter): # try threadmarks first, require at least 2. threadmarksa = soup.find('a',{'class':'threadmarksTrigger'}) if threadmarksa: - soupmarks = self.make_soup(self._fetchUrl('https://'+self.getSiteDomain()+'/'+threadmarksa['href'])) + soupmarks = self.make_soup(self._fetchUrl(self.getURLPrefix()+'/'+threadmarksa['href'])) markas = soupmarks.find('ol',{'class':'overlayScroll'}).find_all('a') if len(markas) > 1: for (url,name) in [ (x['href'],stripHTML(x)) for x in markas ]: - self.chapterUrls.append((name,'https://'+self.getSiteDomain()+'/'+url)) + self.chapterUrls.append((name,self.getURLPrefix()+'/'+url)) # otherwise, use first post links--include first post since that's if not self.chapterUrls: @@ -132,9 +135,11 @@ class ForumsSpacebattlesComAdapter(BaseSiteAdapter): self.chapterUrls.append(("First Post",self.url)) for (url,name) in [ (x['href'],stripHTML(x)) for x in firstpost.find_all('a') ]: if not url.startswith('http'): - url = 'https://'+self.getSiteDomain()+'/'+url + url = self.getURLPrefix()+'/'+url - if (url.startswith('https://'+self.getSiteDomain()) or url.startswith('http://'+self.getSiteDomain())) and ('/posts/' in url or '/threads/' in url): + if (url.startswith(self.getURLPrefix()) or url.startswith('http://'+self.getSiteDomain())) and ('/posts/' in url or '/threads/' in url): + # brute force way to deal with SB's http->https change when hardcoded http urls. + url.replace('http://'+self.getSiteDomain(),self.getURLPrefix()) self.chapterUrls.append((name,url)) self.story.setMetadata('numChapters',len(self.chapterUrls)) diff --git a/fanficfare/adapters/adapter_forumssufficientvelocitycom.py b/fanficfare/adapters/adapter_forumssufficientvelocitycom.py new file mode 100644 index 00000000..f16785ee --- /dev/null +++ b/fanficfare/adapters/adapter_forumssufficientvelocitycom.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- + +# Copyright 2015 FanFicFare team +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +from adapter_forumsspacebattlescom import ForumsSpacebattlesComAdapter + +def getClass(): + return ForumsSufficientVelocityComAdapter + +class ForumsSufficientVelocityComAdapter(ForumsSpacebattlesComAdapter): + + def __init__(self, config, url): + ForumsSpacebattlesComAdapter.__init__(self, config, url) + + # Each adapter needs to have a unique site abbreviation. + self.story.setMetadata('siteabbrev','fsv') + + @staticmethod # must be @staticmethod, don't remove it. + def getSiteDomain(): + # The site domain. Does have www here, if it uses it. + return 'forums.sufficientvelocity.com' + + @classmethod + def getURLPrefix(cls): + # The site domain. Does have www here, if it uses it. + return 'http://' + cls.getSiteDomain()