-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path__init__.py
executable file
·120 lines (101 loc) · 5.23 KB
/
__init__.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import random
from os.path import join, dirname
import requests
from json_database import JsonStorageXDG
from ovos_utils.ocp import MediaType, PlaybackType
from ovos_workshop.decorators.ocp import ocp_search, ocp_featured_media
from ovos_workshop.skills.common_play import OVOSCommonPlaybackSkill
class VHorrorSkill(OVOSCommonPlaybackSkill):
def __init__(self, *args, **kwargs):
self.supported_media = [MediaType.MOVIE]
self.skill_icon = self.default_bg = join(dirname(__file__), "ui", "vhorror_icon.jpg")
self.archive = JsonStorageXDG("VHorror", subfolder="OCP")
self.media_type_exceptions = {}
super().__init__(*args, **kwargs)
def initialize(self):
self._sync_db()
self.load_ocp_keywords()
def load_ocp_keywords(self):
genre = ["horror", "monster"]
title = []
for url, data in self.archive.items():
t = data["title"].split("|")[0].split("(")[0].split("-")[0].strip()
title.append(t)
if ":" in t:
t1, t2 = t.split(":", 1)
title.append(t1.strip())
title.append(t2.strip())
self.register_ocp_keyword(MediaType.MOVIE,
"movie_name", title)
self.register_ocp_keyword(MediaType.MOVIE,
"film_genre", genre)
self.register_ocp_keyword(MediaType.MOVIE,
"movie_streaming_provider",
["V Movies",
"V Horror",
"VHorror",
"VMovies"])
def _sync_db(self):
bootstrap = "https://github.com/JarbasSkills/skill-vhorror/raw/dev/bootstrap.json"
data = requests.get(bootstrap).json()
self.archive.merge(data)
self.schedule_event(self._sync_db, random.randint(3600, 24 * 3600))
def get_playlist(self, score=50, num_entries=25):
pl = self.featured_media()[:num_entries]
return {
"match_confidence": score,
"media_type": MediaType.MOVIE,
"playlist": pl,
"playback": PlaybackType.VIDEO,
"skill_icon": self.skill_icon,
"image": self.skill_icon,
"bg_image": self.default_bg,
"title": "V Horror (Movie Playlist)",
"author": "VHorror"
}
@ocp_search()
def search_db(self, phrase, media_type):
base_score = 15 if media_type == MediaType.MOVIE else 0
entities = self.ocp_voc_match(phrase)
skill = "movie_streaming_provider" in entities # skill matched
base_score += 30 * len(entities)
title = entities.get("movie_name")
if title:
base_score += 30
candidates = [video for video in self.archive.values()
if title.lower() in video["title"].lower()]
for video in candidates:
yield {
"title": video["title"],
"author": video["author"],
"match_confidence": min(100, base_score),
"media_type": MediaType.MOVIE,
"uri": "youtube//" + video["url"],
"playback": PlaybackType.VIDEO,
"skill_icon": self.skill_icon,
"skill_id": self.skill_id,
"image": video["thumbnail"],
"bg_image": video["thumbnail"]
}
if skill:
yield self.get_playlist()
@ocp_featured_media()
def featured_media(self):
return [{
"title": video["title"],
"image": video["thumbnail"],
"match_confidence": 70,
"media_type": MediaType.MOVIE,
"uri": "youtube//" + video["url"],
"playback": PlaybackType.VIDEO,
"skill_icon": self.skill_icon,
"bg_image": video["thumbnail"],
"skill_id": self.skill_id
} for video in self.archive.values()]
if __name__ == "__main__":
from ovos_utils.messagebus import FakeBus
s = VHorrorSkill(bus=FakeBus(), skill_id="t.fake")
for r in s.search_db("play DINOSAUR HOTEL", MediaType.MOVIE):
print(r)
# {'title': 'DINOSAUR HOTEL - FULL HORROR MOVIE IN ENGLISH', 'author': 'V Horror', 'match_confidence': 75, 'media_type': <MediaType.MOVIE: 10>, 'uri': 'youtube//https://youtube.com/watch?v=nKojORnfzAY', 'playback': <PlaybackType.VIDEO: 1>, 'skill_icon': 'https://github.com/OpenVoiceOS/ovos-ocp-audio-plugin/raw/master/ovos_plugin_common_play/ocp/res/ui/images/ocp.png', 'skill_id': 't.fake', 'image': 'https://i.ytimg.com/vi/nKojORnfzAY/sddefault.jpg', 'bg_image': 'https://i.ytimg.com/vi/nKojORnfzAY/sddefault.jpg'}
# {'title': 'DINOSAUR HOTEL - FULL HD HORROR MOVIE IN ENGLISH', 'author': 'V Horror', 'match_confidence': 75, 'media_type': <MediaType.MOVIE: 10>, 'uri': 'youtube//https://youtube.com/watch?v=iDYX57jBgdo', 'playback': <PlaybackType.VIDEO: 1>, 'skill_icon': 'https://github.com/OpenVoiceOS/ovos-ocp-audio-plugin/raw/master/ovos_plugin_common_play/ocp/res/ui/images/ocp.png', 'skill_id': 't.fake', 'image': 'https://i.ytimg.com/vi/iDYX57jBgdo/sddefault.jpg', 'bg_image': 'https://i.ytimg.com/vi/iDYX57jBgdo/sddefault.jpg'}