sr_search.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import requests
  2. import sys
  3. from plugins.plugin import Plugin
  4. from src.history import History
  5. from src.config import Config
  6. sys.path.append("..")
  7. from src.video import Video
  8. from src.playlist import Playlist
  9. class SovetRomantica(Plugin):
  10. def __init__(self, history: History=History(), config: Config=Config()):
  11. super().__init__(history, config)
  12. self.history = history
  13. self.config = config
  14. self.name = "[+] SovetRomantica: Search"
  15. self.category = "SovetRomantica"
  16. self.query_description = """"""
  17. self.history = history
  18. self.params = {
  19. 'query' : True
  20. }
  21. self.flag = "-sr"
  22. self.full_flag = "--sovetromantica"
  23. self.flag_help = "search sovetromantica titles"
  24. self.flag_action = ""
  25. self.save_config()
  26. self.api_instance = self.config.get_option(self.category, 'api-instance')
  27. def get_episodes(self, anime_id):
  28. resp = requests.get(
  29. f"{self.api_instance}/anime/{anime_id}/episodes"
  30. )
  31. if resp.status_code != 200: return list()
  32. episodes = resp.json()
  33. return episodes
  34. def get_search(self, query: str=""):
  35. resp = requests.get(f"{self.api_instance}/animesearch",
  36. {
  37. "anime_name" : query
  38. }
  39. )
  40. if resp.status_code != 200: return list()
  41. anime_list = resp.json()
  42. items = []
  43. for it in anime_list:
  44. if type(it) != dict: continue
  45. title = f"{it['anime_name']} ({it['anime_name_russian']})"
  46. anime_id = it['anime_id']
  47. episodes = list()
  48. episodes_js = self.get_episodes(anime_id)
  49. for episode in episodes_js:
  50. if type(episode) != dict or episode['episode_type'] > 0: continue
  51. ititle = f"Episode {episode['episode_count']}"
  52. video = Video(
  53. title=ititle,
  54. #playlist_title=title,
  55. url=episode['embed']
  56. )
  57. video.isWatched = video.in_history(self.history)
  58. item = video.to_json()
  59. episodes.append(item)
  60. episodes.sort(key=lambda v: int(v['title'][8:]))
  61. playlist = Playlist(title, episodes)
  62. items.append(playlist.to_json())
  63. return items
  64. def get_items(self, params):
  65. query = ""
  66. if 'query' in params:
  67. query = params['query']
  68. return self.get_search(query=query)
  69. def save_config(self):
  70. self.config.set_option(self.category, 'api-instance', 'https://service.sovetromantica.com/v1')