diff --git a/defaults.ini b/defaults.ini index f3b1793..2a86b71 100644 --- a/defaults.ini +++ b/defaults.ini @@ -1182,6 +1182,13 @@ extra_valid_entries:reviews,favs,follows ## to be romantic pairings. ships_label:Pairings +## Date formats used by FFDL. Published and Update don't have time. +## See http://docs.python.org/library/datetime.html#strftime-strptime-behavior +## Note that ini format requires % to be escaped as %%. +#dateCreated_format:%%Y-%%m-%%d %%H:%%M:%%S +datePublished_format:%%Y-%%m-%%d %%H:%%M:%%S +dateUpdated_format:%%Y-%%m-%%d %%H:%%M:%%S + [www.fanfiktion.de] ## Some sites require login (or login for some rated stories) The ## program can prompt you, or you can save it in config. In diff --git a/fanficdownloader/adapters/adapter_fanfictionnet.py b/fanficdownloader/adapters/adapter_fanfictionnet.py index eece87b..5d3aa97 100644 --- a/fanficdownloader/adapters/adapter_fanfictionnet.py +++ b/fanficdownloader/adapters/adapter_fanfictionnet.py @@ -16,6 +16,7 @@ # import time +from datetime import datetime import logging logger = logging.getLogger(__name__) import re @@ -205,6 +206,14 @@ class FanFictionNetSiteAdapter(BaseSiteAdapter): self.story.extendList('genre',genrelist) metalist=metalist[1:] + # Updated: 5/8 - Published: 7/12/2010 + # Published: 8m ago + dates = soup.findAll('span',{'data-xutime':re.compile(r'^\d+$')}) + if len(dates) > 1 : + # updated get set to the same as published upstream if not found. + self.story.setMetadata('dateUpdated',datetime.fromtimestamp(float(dates[0]['data-xutime']))) + self.story.setMetadata('datePublished',datetime.fromtimestamp(float(dates[-1]['data-xutime']))) + donechars = False while len(metalist) > 0: if metalist[0].startswith('Chapters') or metalist[0].startswith('Status') or metalist[0].startswith('id:'): @@ -215,18 +224,6 @@ class FanFictionNetSiteAdapter(BaseSiteAdapter): self.story.setMetadata('favs',metalist[0].split(':')[1].strip()) elif metalist[0].startswith('Follows:'): self.story.setMetadata('follows',metalist[0].split(':')[1].strip()) - elif metalist[0].startswith('Updated'): - datefield = metalist[0].split(':')[1].strip() - format = '%m/%d/%Y' - if datefield.count('/') == 1: - format = '%m/%d' - self.story.setMetadata('dateUpdated',makeDate(datefield, format)) - elif metalist[0].startswith('Published'): - datefield = metalist[0].split(':')[1].strip() - format = '%m/%d/%Y' - if datefield.count('/') == 1: - format = '%m/%d' - self.story.setMetadata('datePublished',makeDate(datefield, format)) elif metalist[0].startswith('Words'): self.story.setMetadata('numWords',metalist[0].split(':')[1].strip()) elif not donechars: diff --git a/plugin-defaults.ini b/plugin-defaults.ini index 1eff81d..69898d6 100644 --- a/plugin-defaults.ini +++ b/plugin-defaults.ini @@ -1167,6 +1167,13 @@ extra_valid_entries:reviews,favs,follows ## to be romantic pairings. ships_label:Pairings +## Date formats used by FFDL. Published and Update don't have time. +## See http://docs.python.org/library/datetime.html#strftime-strptime-behavior +## Note that ini format requires % to be escaped as %%. +#dateCreated_format:%%Y-%%m-%%d %%H:%%M:%%S +datePublished_format:%%Y-%%m-%%d %%H:%%M:%%S +dateUpdated_format:%%Y-%%m-%%d %%H:%%M:%%S + [www.fanfiktion.de] ## Some sites require login (or login for some rated stories) The ## program can prompt you, or you can save it in config. In