Add support for www.sunnydaleafterdark.com

This is an EFiction style site, focusing on Buffy the Vampire Slayer fics with the Buffy/Spike ship.

There are a few quirks about how the site shows the infobox metadata.
This commit is contained in:
Rose Davidson 2023-07-16 15:37:50 -04:00 committed by Jim Miller
parent 7f97decb8a
commit fe5605ea50
4 changed files with 121 additions and 0 deletions

View file

@ -3578,6 +3578,24 @@ extracategories:Lord of the Rings
website_encodings:Windows-1252,utf8
[www.sunnydaleafterdark.com]
## Site dedicated to these categories/characters/ships
## 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
## Some sites also require the user to confirm they are adult for
## adult content. In commandline version, this should go in your
## personal.ini, not defaults.ini.
#is_adult:true
extracategories:Buffy: The Vampire Slayer
extracharacters:Buffy, Spike
extraships:Spike/Buffy
[www.swi.org.ru]
use_basic_cache:true

View file

@ -145,6 +145,7 @@ from . import adapter_psychficcom
from . import adapter_deviantartcom
from . import adapter_merengohu
from . import adapter_readonlymindcom
from . import adapter_wwwsunnydaleafterdarkcom
## This bit of complexity allows adapters to be added by just adding
## importing. It eliminates the long if/else clauses we used to need

View file

@ -0,0 +1,84 @@
# -*- coding: utf-8 -*-
# Copyright 2011 Fanficdownloader team, 2018 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 __future__ import absolute_import
from ..htmlcleanup import stripHTML
# Software: eFiction
from .base_efiction_adapter import BaseEfictionAdapter
class WWWSunnydaleAfterDarkComAdapter(BaseEfictionAdapter):
@classmethod
def getProtocol(self):
"""
Some, but not all site now require https.
"""
return "https"
@staticmethod
def getSiteDomain():
return 'www.sunnydaleafterdark.com'
@classmethod
def getSiteAbbrev(self):
return 'sad'
@classmethod
def getDateFormat(self):
return r"%m/%d/%y"
def extractChapterUrlsAndMetadata(self):
## Call super of extractChapterUrlsAndMetadata().
## base_efiction leaves the soup in self.html.
super(WWWSunnydaleAfterDarkComAdapter, self).extractChapterUrlsAndMetadata()
## attempt to fetch rating from title line:
## "Do You Think This Is Love? by Supernatural Beings [PG]"
r = stripHTML(self.html.find("div", {"id": "pagetitle"}))
if '[' in r and ']' in r:
self.story.setMetadata('rating',
r[r.index('[')+1:r.index(']')])
def make_soup(self, data):
soup = super(WWWSunnydaleAfterDarkComAdapter, self).make_soup(data)
## This site uses Javascript to "hide" warnings, for spoiler reasons
## <span class="label">Warnings: <span class="revealSpoiler" onclick="this.getElementsByClassName('spoiler')[0].classList.remove('spoiler');">(Click Here To Reveal) <span class="spoiler">Warning A, Warning B, Warning Y, Warning Z</span></span></span>
## We need to remove the revealSpoiler spans and replace them with the contents
## of the enclosed spoiler spans.
infobox = soup.find("div", "infobox")
if infobox is not None:
for revealSpoiler in infobox.find_all("span", class_="revealSpoiler"):
parent = revealSpoiler.parent
spoiler = revealSpoiler.find("span", class_="spoiler")
spoiler.extract()
revealSpoiler.replace_with(spoiler)
spoiler.unwrap()
parent.smooth()
return soup
def handleMetadataPair(self, key, value):
## Inexplicably puts the entire Genres string inside the label span
## Likewise Warnings, which also have the spoiler javascript (removed in make_soup)
if key.startswith("Genre") or key.startswith("Warning"):
key, value = key.split(': ')
super(WWWSunnydaleAfterDarkComAdapter, self).handleMetadataPair(key, value)
def getClass():
return WWWSunnydaleAfterDarkComAdapter

View file

@ -3548,6 +3548,24 @@ extracategories:Lord of the Rings
website_encodings:Windows-1252,utf8
[www.sunnydaleafterdark.com]
## Site dedicated to these categories/characters/ships
## 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
## Some sites also require the user to confirm they are adult for
## adult content. In commandline version, this should go in your
## personal.ini, not defaults.ini.
#is_adult:true
extracategories:Buffy: The Vampire Slayer
extracharacters:Buffy, Spike
extraships:Spike/Buffy
[www.swi.org.ru]
use_basic_cache:true