diff --git a/defaults.ini b/defaults.ini
index 2f55369..3dee642 100644
--- a/defaults.ini
+++ b/defaults.ini
@@ -817,12 +817,24 @@ dislikes_label:Dislikes
## Clear FanFiction from defaults, site is original fiction.
extratags:
-extra_valid_entries:size,universe,codes
-#extra_titlepage_entries:size,universe,codes
+extra_valid_entries:size,universe,universeUrl,universeHTML,codes,notice
+#extra_titlepage_entries:size,universeHTML,codes,notice
size_label:Size
universe_label:Universe
+universeUrl_label:Universe URL
+universeHTML_label:Universe
codes_label:Codes
+notice_label:Notice
+
+## Assume entryUrl, apply to "%s" to
+## make entryHTML.
+make_linkhtml_entries:universe
+
+## storiesonline.net stories can be in a series or a universe, but not
+## both. By default, universe will be populated in 'series' with
+## index=0
+universe_as_series: true
[grangerenchanted.com]
## Some sites require login (or login for some rated stories) The
diff --git a/fanficdownloader/adapters/adapter_storiesonlinenet.py b/fanficdownloader/adapters/adapter_storiesonlinenet.py
index 5f664ca..6a28a1f 100644
--- a/fanficdownloader/adapters/adapter_storiesonlinenet.py
+++ b/fanficdownloader/adapters/adapter_storiesonlinenet.py
@@ -37,11 +37,6 @@ class StoriesOnlineNetAdapter(BaseSiteAdapter):
def __init__(self, config, url):
BaseSiteAdapter.__init__(self, config, url)
- self.decode = ["Windows-1252",
- "utf8"] # 1252 is a superset of iso-8859-1.
- # Most sites that claim to be
- # iso-8859-1 (and some that claim to be
- # utf8) are really windows-1252.
self.username = "NoneGiven" # if left empty, site doesn't return any message at all.
self.password = ""
self.is_adult=False
@@ -147,6 +142,10 @@ class StoriesOnlineNetAdapter(BaseSiteAdapter):
a = soup.find('h1')
self.story.setMetadata('title',stripHTML(a))
+ notice = soup.find('div', {'class' : 'notice'})
+ if notice:
+ self.story.setMetadata('notice',unicode(notice))
+
# Find authorid and URL from... author url.
a = soup.find('a', href=re.compile(r"/a/\w+"))
self.story.setMetadata('authorId',a['href'].split('/')[2])
@@ -185,23 +184,35 @@ class StoriesOnlineNetAdapter(BaseSiteAdapter):
self.story.setMetadata('size', lc2.findNext('td', {'class' : 'num'}).text)
lc4 = lc2.findNext('td', {'class' : 'lc4'})
-
+ desc = lc4.contents[0]
+
try:
a = lc4.find('a', href=re.compile(r"/library/show_series.php\?id=\d+"))
- i = a.parent.text.split('(')[1].split(')')[0]
- self.setSeries(stripHTML(a), i)
- self.story.setMetadata('seriesUrl','http://'+self.host+a['href'])
+ if a:
+ # if there's a number after the series name, series_contents is a two element list:
+ # [Title, u' (2)']
+ series_contents = a.parent.contents
+ i = 0 if len(series_contents) == 1 else series_contents[1].strip(' ()')
+ self.setSeries(stripHTML(a), i)
+ self.story.setMetadata('seriesUrl','http://'+self.host+a['href'])
+ desc = lc4.contents[2]
except:
pass
try:
a = lc4.find('a', href=re.compile(r"/library/universe.php\?id=\d+"))
if a:
self.story.setMetadata("universe",stripHTML(a))
+ desc = lc4.contents[2]
+ # Assumed only one universe, but it does have a URL--use universeHTML
+ self.story.setMetadata('universe',stripHTML(a))
+ self.story.setMetadata('universeUrl','http://'+self.host+a['href'])
+ if self.getConfig("universe_as_series"):
+ self.setSeries(stripHTML(a), 0)
+ self.story.setMetadata('seriesUrl','http://'+self.host+a['href'])
except:
pass
- desc = lc4.contents[0]
self.setDescription('http://'+self.host+'/s/'+self.story.getMetadata('storyId'),desc)
for b in lc4.findAll('b'):
diff --git a/plugin-defaults.ini b/plugin-defaults.ini
index b5da284..bceece1 100644
--- a/plugin-defaults.ini
+++ b/plugin-defaults.ini
@@ -802,12 +802,24 @@ dislikes_label:Dislikes
## Clear FanFiction from defaults, site is original fiction.
extratags:
-extra_valid_entries:size,universe,codes
-#extra_titlepage_entries:size,universe,codes
+extra_valid_entries:size,universe,universeUrl,universeHTML,codes,notice
+#extra_titlepage_entries:size,universeHTML,codes,notice
size_label:Size
universe_label:Universe
+universeUrl_label:Universe URL
+universeHTML_label:Universe
codes_label:Codes
+notice_label:Notice
+
+## Assume entryUrl, apply to "%s" to
+## make entryHTML.
+make_linkhtml_entries:universe
+
+## storiesonline.net stories can be in a series or a universe, but not
+## both. By default, universe will be populated in 'series' with
+## index=0
+universe_as_series: true
[grangerenchanted.com]
## Some sites require login (or login for some rated stories) The