implement basic sponsblock indexing, #119

This commit is contained in:
simon 2022-04-04 23:08:44 +07:00
parent 29f8e148da
commit 730d12212f
4 changed files with 31 additions and 1 deletions

View File

@ -27,7 +27,8 @@
"subtitle_source": false, "subtitle_source": false,
"subtitle_index": false, "subtitle_index": false,
"throttledratelimit": false, "throttledratelimit": false,
"integrate_ryd": false "integrate_ryd": false,
"integrate_sponsorblock": false
}, },
"application": { "application": {
"app_root": "/app", "app_root": "/app",

View File

@ -62,6 +62,12 @@ class ApplicationSettingsForm(forms.Form):
("1", "enable ryd integration"), ("1", "enable ryd integration"),
] ]
SP_CHOICES = [
("", "-- change sponsorblock integrations"),
("0", "disable sponsorblock integration"),
("1", "enable sponsorblock integration"),
]
CAST_CHOICES = [ CAST_CHOICES = [
("", "-- change Cast integration --"), ("", "-- change Cast integration --"),
("0", "disable Cast"), ("0", "disable Cast"),
@ -103,6 +109,9 @@ class ApplicationSettingsForm(forms.Form):
downloads_integrate_ryd = forms.ChoiceField( downloads_integrate_ryd = forms.ChoiceField(
widget=forms.Select, choices=RYD_CHOICES, required=False widget=forms.Select, choices=RYD_CHOICES, required=False
) )
downloads_integrate_sponsorblock = forms.ChoiceField(
widget=forms.Select, choices=SP_CHOICES, required=False
)
application_enable_cast = forms.ChoiceField( application_enable_cast = forms.ChoiceField(
widget=forms.Select, choices=CAST_CHOICES, required=False widget=forms.Select, choices=CAST_CHOICES, required=False
) )

View File

@ -306,6 +306,9 @@ class YoutubeVideo(YouTubeItem, YoutubeSubtitle):
if self.config["downloads"]["integrate_ryd"]: if self.config["downloads"]["integrate_ryd"]:
self._get_ryd_stats() self._get_ryd_stats()
if self.config["downloads"]["integrate_sponsorblock"]:
self._get_sponsorblock()
return return
def _process_youtube_meta(self): def _process_youtube_meta(self):
@ -447,6 +450,18 @@ class YoutubeVideo(YouTubeItem, YoutubeSubtitle):
return True return True
def _get_sponsorblock(self):
"""get optional sponsorblock timestamps from sponsor.ajay.app"""
api = "https://sponsor.ajay.app/api"
url = f"{api}/skipSegments?videoID={self.youtube_id}"
print(f"{self.youtube_id}: get sponsorblock timestamps")
response = requests.get(url)
if not response.ok:
print(f"{self.youtube_id}: failed to get sponsorblock data")
return
self.json_data["sponsorblock"] = response.json()
def check_subtitles(self): def check_subtitles(self):
"""optionally add subtitles""" """optionally add subtitles"""
handler = YoutubeSubtitle(self) handler = YoutubeSubtitle(self)

View File

@ -128,6 +128,11 @@
<i>Before activating that, make sure you have a scraping sleep interval of at least 3 secs set to avoid ratelimiting issues.</i><br> <i>Before activating that, make sure you have a scraping sleep interval of at least 3 secs set to avoid ratelimiting issues.</i><br>
{{ app_form.downloads_integrate_ryd }} {{ app_form.downloads_integrate_ryd }}
</div> </div>
<div class="settings-item">
<p>Integrate with <a href="https://sponsor.ajay.app/">SponsorBlock</a> to get sponsored timestamps: <span class="settings-current">{{ config.downloads.integrate_sponsorblock }}</span></p>
<i>Before activating that, make sure you have a scraping sleep interval of at least 3 secs set to avoid ratelimiting issues.</i><br>
{{ app_form.downloads_integrate_sponsorblock }}
</div>
<div class="settings-item"> <div class="settings-item">
<p>Current Cast integration: <span class="settings-current">{{ config.application.enable_cast }}</span></p> <p>Current Cast integration: <span class="settings-current">{{ config.application.enable_cast }}</span></p>
<i>Enabling Cast will load an additional JS library from Google. HTTPS and a supported browser are required for this integration.</i><br> <i>Enabling Cast will load an additional JS library from Google. HTTPS and a supported browser are required for this integration.</i><br>