mirror of
https://github.com/tubearchivist/tubearchivist-frontend.git
synced 2024-11-22 20:00:15 +00:00
basic methods of YoutubePlaylist class
This commit is contained in:
parent
661ee2616c
commit
72bc6a4d02
@ -21,7 +21,7 @@ from home.src.helper import (
|
|||||||
clean_string,
|
clean_string,
|
||||||
ignore_filelist,
|
ignore_filelist,
|
||||||
)
|
)
|
||||||
from home.src.index import YoutubeChannel, index_new_video
|
from home.src.index import YoutubeChannel, YoutubePlaylist, index_new_video
|
||||||
|
|
||||||
|
|
||||||
class PendingList:
|
class PendingList:
|
||||||
@ -61,8 +61,8 @@ class PendingList:
|
|||||||
youtube_ids = [i[0] for i in video_results]
|
youtube_ids = [i[0] for i in video_results]
|
||||||
missing_videos = missing_videos + youtube_ids
|
missing_videos = missing_videos + youtube_ids
|
||||||
elif url_type == "playlist":
|
elif url_type == "playlist":
|
||||||
video_results = playlist_extractor(url)
|
video_results = YoutubePlaylist(url).get_entries()
|
||||||
youtube_ids = [i[0] for i in video_results]
|
youtube_ids = [i["youtube_id"] for i in video_results]
|
||||||
missing_videos = missing_videos + youtube_ids
|
missing_videos = missing_videos + youtube_ids
|
||||||
|
|
||||||
return missing_videos
|
return missing_videos
|
||||||
@ -444,21 +444,6 @@ class ChannelSubscription:
|
|||||||
channel_handler.get_channel_art()
|
channel_handler.get_channel_art()
|
||||||
|
|
||||||
|
|
||||||
def playlist_extractor(playlist_id):
|
|
||||||
"""return youtube_ids from a playlist_id"""
|
|
||||||
url = "https://www.youtube.com/playlist?list=" + playlist_id
|
|
||||||
obs = {
|
|
||||||
"default_search": "ytsearch",
|
|
||||||
"quiet": True,
|
|
||||||
"ignoreerrors": True,
|
|
||||||
"skip_download": True,
|
|
||||||
"extract_flat": True,
|
|
||||||
}
|
|
||||||
playlist = youtube_dl.YoutubeDL(obs).extract_info(url, download=False)
|
|
||||||
playlist_vids = [(i["id"], i["title"]) for i in playlist["entries"]]
|
|
||||||
return playlist_vids
|
|
||||||
|
|
||||||
|
|
||||||
class VideoDownloader:
|
class VideoDownloader:
|
||||||
"""
|
"""
|
||||||
handle the video download functionality
|
handle the video download functionality
|
||||||
|
@ -416,6 +416,93 @@ class YoutubeVideo:
|
|||||||
ThumbManager().delete_vid_thumb(self.youtube_id)
|
ThumbManager().delete_vid_thumb(self.youtube_id)
|
||||||
|
|
||||||
|
|
||||||
|
class YoutubePlaylist:
|
||||||
|
"""represent a single playlist on YouTube"""
|
||||||
|
|
||||||
|
CONFIG = AppConfig().config
|
||||||
|
ES_URL = CONFIG["application"]["es_url"]
|
||||||
|
ES_AUTH = CONFIG["application"]["es_auth"]
|
||||||
|
|
||||||
|
def __init__(self, playlist_id):
|
||||||
|
self.playlist_id = playlist_id
|
||||||
|
self.stamp = int(datetime.now().strftime("%s"))
|
||||||
|
|
||||||
|
def get_playlist_dict(self, scrape=False):
|
||||||
|
"""get data from es or youtube"""
|
||||||
|
print(f"get playlist with id {self.playlist_id}")
|
||||||
|
if scrape:
|
||||||
|
playlist_dict = self.get_youtube_playlist()
|
||||||
|
else:
|
||||||
|
playlist_dict = self.get_es_playlist()
|
||||||
|
if not playlist_dict:
|
||||||
|
playlist_dict = self.get_youtube_playlist()
|
||||||
|
|
||||||
|
return playlist_dict
|
||||||
|
|
||||||
|
def get_youtube_playlist(self):
|
||||||
|
"""get meta data dict from youtube"""
|
||||||
|
url = "https://www.youtube.com/playlist?list=" + self.playlist_id
|
||||||
|
obs = {
|
||||||
|
"default_search": "ytsearch",
|
||||||
|
"quiet": True,
|
||||||
|
"ignoreerrors": True,
|
||||||
|
"skip_download": True,
|
||||||
|
"extract_flat": True,
|
||||||
|
"playlistend": 0,
|
||||||
|
}
|
||||||
|
playlist = youtube_dl.YoutubeDL(obs).extract_info(url, download=False)
|
||||||
|
|
||||||
|
playlist_es = {
|
||||||
|
"playlist_id": self.playlist_id,
|
||||||
|
"playlist_active": True,
|
||||||
|
"playlist_subscribed": False,
|
||||||
|
"playlist_name": playlist["title"],
|
||||||
|
"playlist_channel": playlist["channel"],
|
||||||
|
"playlist_channel_id": playlist["channel_id"],
|
||||||
|
"playlist_thumbnail": playlist["thumbnails"][-1]["url"],
|
||||||
|
"playlist_description": playlist["description"] or False,
|
||||||
|
"playlist_last_refresh": self.stamp,
|
||||||
|
}
|
||||||
|
|
||||||
|
return playlist_es
|
||||||
|
|
||||||
|
def get_es_playlist(self):
|
||||||
|
"""get indexed data from es"""
|
||||||
|
url = f"{self.ES_URL}/ta_playlist/_doc/{self.playlist_id}"
|
||||||
|
response = requests.get(url, auth=self.ES_AUTH)
|
||||||
|
if response.ok:
|
||||||
|
return json.loads(response.text)
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_entries(self, playlistend=False):
|
||||||
|
"""get all videos in playlist"""
|
||||||
|
url = "https://www.youtube.com/playlist?list=" + self.playlist_id
|
||||||
|
obs = {
|
||||||
|
"default_search": "ytsearch",
|
||||||
|
"quiet": True,
|
||||||
|
"ignoreerrors": True,
|
||||||
|
"skip_download": True,
|
||||||
|
"extract_flat": True,
|
||||||
|
}
|
||||||
|
if playlistend:
|
||||||
|
obs["playlistend"] = playlistend
|
||||||
|
|
||||||
|
playlist = youtube_dl.YoutubeDL(obs).extract_info(url, download=False)
|
||||||
|
|
||||||
|
all_members = []
|
||||||
|
for idx, entry in enumerate(playlist["entries"]):
|
||||||
|
to_append = {
|
||||||
|
"youtube_id": entry["id"],
|
||||||
|
"title": entry["title"],
|
||||||
|
"uploader": entry["uploader"],
|
||||||
|
"idx": idx,
|
||||||
|
}
|
||||||
|
all_members.append(to_append)
|
||||||
|
|
||||||
|
return all_members
|
||||||
|
|
||||||
|
|
||||||
class WatchState:
|
class WatchState:
|
||||||
"""handle watched checkbox for videos and channels"""
|
"""handle watched checkbox for videos and channels"""
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user