al_search.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import requests
  2. import sys
  3. from plugins.plugin import Plugin
  4. sys.path.append("..")
  5. from src.video import Video
  6. from src.playlist import Playlist
  7. from src.history import History
  8. from src.config import Config
  9. class Anilibria(Plugin):
  10. def __init__(self, history: History=History(), config: Config=Config()) -> None:
  11. super().__init__(history, config)
  12. self.history = history
  13. self.config = config
  14. self.name = "[+] AnilibriaTV: Search"
  15. self.category = "AnilibriaTV"
  16. self.query_description = """"""
  17. self.params = {
  18. 'query' : True,
  19. 'api_instance' : False
  20. }
  21. self.flag = "-als"
  22. self.full_flag = "--anilibriasearch"
  23. self.flag_help = "search anilibria titles"
  24. self.flag_action = ""
  25. self.save_config()
  26. self.api_instance = self.config.get_option(self.category, 'api-instance')
  27. self.instance = self.config.get_option(self.category, 'instance')
  28. def get_search(self, params):
  29. api_instance = self.api_instance
  30. if 'api_instance' in params:
  31. api_instance = params['api_instance']
  32. resp = requests.get(f"{api_instance}/searchTitles",
  33. {
  34. "search" : params['query']
  35. }
  36. )
  37. if resp.status_code != 200: return list()
  38. resp = resp.json()
  39. items = []
  40. for it in resp:
  41. title = f"{it['names']['ru']} ({it['names']['en']})"
  42. host = "https://" + it["player"]["host"]
  43. purl = f"{self.instance}/release/{it['code']}.html"
  44. videos = list()
  45. for vid in it["player"]["playlist"].values():
  46. ititle = "Episode " + str(vid["serie"])
  47. video = Video(
  48. title=ititle,
  49. #playlist_title=title,
  50. url=host+vid["hls"]["hd"],
  51. #length=it["type"]["length"]
  52. )
  53. video.length=it["type"]["length"]
  54. video.isWatched = video.in_history(self.history)
  55. videos.append(video.to_json())
  56. playlist = Playlist(title, videos, url=purl)
  57. items.append(playlist.to_json())
  58. return items
  59. def get_items(self, params):
  60. if not 'query' in params: return list()
  61. return self.get_search(params)
  62. def save_config(self):
  63. self.config.set_option(self.category, 'api-instance', 'https://api.anilibria.tv/v2')
  64. self.config.set_option(self.category, 'instance', 'https://anilibria.tv')