From ede81a458eea0418380d82e8604e1d465a33c738 Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Thu, 8 Oct 2015 14:06:48 -0500 Subject: [PATCH] Accept individual post URLs (#post-) for base_xenforoforum adapters. --- fanficfare/adapters/__init__.py | 7 +++++-- .../adapters/base_xenforoforum_adapter.py | 17 +++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/fanficfare/adapters/__init__.py b/fanficfare/adapters/__init__.py index a183587..4ee6a44 100644 --- a/fanficfare/adapters/__init__.py +++ b/fanficfare/adapters/__init__.py @@ -238,8 +238,11 @@ def getClassFor(url): fixedurl = "http:%s"%url if not fixedurl.startswith("http"): fixedurl = "http://%s"%url - ## remove any trailing '#' locations. - fixedurl = re.sub(r"#.*$","",fixedurl) + + ## remove any trailing '#' locations, except for #post-12345 for + ## XenForo + if not "#post-" in fixedurl: + fixedurl = re.sub(r"#.*$","",fixedurl) parsedUrl = up.urlparse(fixedurl) domain = parsedUrl.netloc.lower() diff --git a/fanficfare/adapters/base_xenforoforum_adapter.py b/fanficfare/adapters/base_xenforoforum_adapter.py index b9bb571..e83d5f3 100644 --- a/fanficfare/adapters/base_xenforoforum_adapter.py +++ b/fanficfare/adapters/base_xenforoforum_adapter.py @@ -32,6 +32,7 @@ logger = logging.getLogger(__name__) class BaseXenForoForumAdapter(BaseSiteAdapter): def __init__(self, config, url): + logger.info("init url: "+url) BaseSiteAdapter.__init__(self, config, url) self.decode = ["utf8", @@ -47,10 +48,14 @@ class BaseXenForoForumAdapter(BaseSiteAdapter): # get storyId from url--url validation guarantees query correct m = re.match(self.getSiteURLPattern(),url) if m: - self.story.setMetadata('storyId',m.group('id')) - - # normalized story URL. - self._setURL(self.getURLPrefix() + '/'+m.group('tp')+'/'+self.story.getMetadata('storyId')+'/') + logger.debug("groupdict:%s"%m.groupdict()) + if m.group('post'): + self.story.setMetadata('storyId',m.group('post')) + self._setURL(self.getURLPrefix() + '/posts/'+m.group('post')+'/') + else: + self.story.setMetadata('storyId',m.group('id')) + # normalized story URL. + self._setURL(self.getURLPrefix() + '/'+m.group('tp')+'/'+self.story.getMetadata('storyId')+'/') else: raise exceptions.InvalidStoryURL(url, self.getSiteDomain(), @@ -75,10 +80,10 @@ class BaseXenForoForumAdapter(BaseSiteAdapter): @classmethod def getSiteExampleURLs(cls): - return cls.getURLPrefix()+"/threads/some-story-name.123456/" + return cls.getURLPrefix()+"/threads/some-story-name.123456/ "+cls.getURLPrefix()+"/posts/123456/" def getSiteURLPattern(self): - return r"https?://"+re.escape(self.getSiteDomain())+r"/(?Pthreads|posts)/(.+\.)?(?P\d+)/?" + return r"https?://"+re.escape(self.getSiteDomain())+r"/(?Pthreads|posts)/(.+\.)?(?P\d+)/?[^#]*?(#post-(?P\d+))?$" def use_pagecache(self): '''