diff options
Diffstat (limited to 'pyload/plugins/crypter/YoutubeBatch.py')
-rw-r--r-- | pyload/plugins/crypter/YoutubeBatch.py | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/pyload/plugins/crypter/YoutubeBatch.py b/pyload/plugins/crypter/YoutubeBatch.py index b48e792c0..7cb0e2f0a 100644 --- a/pyload/plugins/crypter/YoutubeBatch.py +++ b/pyload/plugins/crypter/YoutubeBatch.py @@ -8,29 +8,34 @@ from pyload.utils import json_loads from pyload.plugins.base.Crypter import Crypter from pyload.utils import safe_join -API_URL = "AIzaSyCKnWLNlkX-L4oD1aEzqqhRw1zczeD6_k0" - class YoutubeBatch(Crypter): - __name__ = "YoutubeBatch" - __type__ = "crypter" - __version__ = "1.00" + __name__ = "YoutubeBatch" + __type__ = "crypter" + __version__ = "1.01" __pattern__ = r'https?://(?:www\.|m\.)?youtube\.com/(?P<TYPE>user|playlist|view_play_list)(/|.*?[?&](?:list|p)=)(?P<ID>[\w-]+)' - __config__ = [("likes", "bool", "Grab user (channel) liked videos", False), + __config__ = [("use_subfolder", "bool", "Save package to subfolder", True), + ("subfolder_per_package", "bool", "Create a subfolder for each package", True), + ("likes", "bool", "Grab user (channel) liked videos", False), ("favorites", "bool", "Grab user (channel) favorite videos", False), ("uploads", "bool", "Grab channel unplaylisted videos", True)] __description__ = """Youtube.com channel & playlist decrypter plugin""" - __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] + __license__ = "GPLv3" + __authors__ = [("Walter Purcaro", "vuolter@gmail.com")] + + + API_KEY = "AIzaSyCKnWLNlkX-L4oD1aEzqqhRw1zczeD6_k0" def api_response(self, ref, req): - req.update({"key": API_KEY}) + req.update({"key": self.API_KEY}) url = urljoin("https://www.googleapis.com/youtube/v3/", ref) page = self.load(url, get=req) return json_loads(page) + def getChannel(self, user): channels = self.api_response("channels", {"part": "id,snippet,contentDetails", "forUsername": user, "maxResults": "50"}) if channels['items']: @@ -40,6 +45,7 @@ class YoutubeBatch(Crypter): "relatedPlaylists": channel['contentDetails']['relatedPlaylists'], "user": user} # One lone channel for user? + def getPlaylist(self, p_id): playlists = self.api_response("playlists", {"part": "snippet", "id": p_id}) if playlists['items']: @@ -49,6 +55,7 @@ class YoutubeBatch(Crypter): "channelId": playlist['snippet']['channelId'], "channelTitle": playlist['snippet']['channelTitle']} + def _getPlaylists(self, id, token=None): req = {"part": "id", "maxResults": "50", "channelId": id} if token: @@ -63,9 +70,11 @@ class YoutubeBatch(Crypter): for item in self._getPlaylists(id, playlists['nextPageToken']): yield item + def getPlaylists(self, ch_id): return map(self.getPlaylist, self._getPlaylists(ch_id)) + def _getVideosId(self, id, token=None): req = {"part": "contentDetails", "maxResults": "50", "playlistId": id} if token: @@ -80,9 +89,11 @@ class YoutubeBatch(Crypter): for item in self._getVideosId(id, playlist['nextPageToken']): yield item + def getVideosId(self, p_id): return list(self._getVideosId(p_id)) + def decrypt(self, pyfile): m = re.match(self.__pattern__, pyfile.url) m_id = m.group("ID") @@ -114,7 +125,7 @@ class YoutubeBatch(Crypter): playlists = [self.getPlaylist(m_id)] if not playlists: - self.fail("No playlist available") + self.fail(_("No playlist available")) addedvideos = [] urlize = lambda x: "https://www.youtube.com/watch?v=" + x |