diff options
| author | Jakob L. Kreuze <zerodaysfordays@sdf.org> | 2024-06-16 15:23:53 -0400 |
|---|---|---|
| committer | Jakob L. Kreuze <zerodaysfordays@sdf.org> | 2024-06-16 15:23:53 -0400 |
| commit | adde8ab63fc5e34c5ab4461966614220f0271ef6 (patch) | |
| tree | 64bebc22e4370b5c8f23d52e6101d0727ee83ea1 | |
| parent | 0514abcc20debb22d15cac6e07f5735cb3b669d4 (diff) | |
Lint
| -rw-r--r-- | addon.py | 179 |
1 files changed, 98 insertions, 81 deletions
@@ -32,9 +32,10 @@ from xbmcvfs import translatePath URL = sys.argv[0] HANDLE = int(sys.argv[1]) -ADDON_PATH = translatePath(Addon().getAddonInfo('path')) -ICONS_DIR = os.path.join(ADDON_PATH, 'resources', 'images', 'icons') -FANART_DIR = os.path.join(ADDON_PATH, 'resources', 'images', 'fanart') +ADDON_PATH = translatePath(Addon().getAddonInfo("path")) +ICONS_DIR = os.path.join(ADDON_PATH, "resources", "images", "icons") +FANART_DIR = os.path.join(ADDON_PATH, "resources", "images", "fanart") + def get_url(**kwargs): """ @@ -44,15 +45,15 @@ def get_url(**kwargs): :return: plugin call URL :rtype: str """ - return '{}?{}'.format(URL, urlencode(kwargs)) + return "{}?{}".format(URL, urlencode(kwargs)) def list_genres(): """ Create the list of movie genres in the Kodi interface. """ - xbmcplugin.setPluginCategory(HANDLE, 'Newgrounds') - xbmcplugin.setContent(HANDLE, 'movies') + xbmcplugin.setPluginCategory(HANDLE, "Newgrounds") + xbmcplugin.setContent(HANDLE, "movies") genres = ["Featured", "Latest", "Popular"] @@ -61,11 +62,11 @@ def list_genres(): # list_item.setArt({'icon': genre_info['icon'], 'fanart': genre_info['fanart']}) info_tag = list_item.getVideoInfoTag() - info_tag.setMediaType('video') + info_tag.setMediaType("video") info_tag.setTitle(name) info_tag.setGenres([name]) - url = get_url(action='listing', genre=name) + url = get_url(action="listing", genre=name) is_folder = True xbmcplugin.addDirectoryItem(HANDLE, url, list_item, is_folder) @@ -73,24 +74,24 @@ def list_genres(): xbmcplugin.endOfDirectory(HANDLE) -def list_categories(genre='Featured'): +def list_categories(genre="Featured"): """ Create the list of movie categories in the Kodi interface. """ - xbmcplugin.setPluginCategory(HANDLE, 'Newgrounds') - xbmcplugin.setContent(HANDLE, 'movies') + xbmcplugin.setPluginCategory(HANDLE, "Newgrounds") + xbmcplugin.setContent(HANDLE, "movies") CATEGORIES = { - 'All': 0, - 'Action': 45, - 'Comedy - Original': 60, - 'Comedy - Parody': 61, - 'Drama': 47, - 'Experimental': 49, - 'Informative': 48, - 'Music Video': 50, - 'Other': 51, - 'Spam': 55, + "All": 0, + "Action": 45, + "Comedy - Original": 60, + "Comedy - Parody": 61, + "Drama": 47, + "Experimental": 49, + "Informative": 48, + "Music Video": 50, + "Other": 51, + "Spam": 55, } for name in CATEGORIES.keys(): @@ -98,11 +99,11 @@ def list_categories(genre='Featured'): # list_item.setArt({'icon': genre_info['icon'], 'fanart': genre_info['fanart']}) info_tag = list_item.getVideoInfoTag() - info_tag.setMediaType('video') + info_tag.setMediaType("video") info_tag.setTitle(name) info_tag.setGenres([name]) - url = get_url(action='listing', genre=genre, category=CATEGORIES[name]) + url = get_url(action="listing", genre=genre, category=CATEGORIES[name]) is_folder = True xbmcplugin.addDirectoryItem(HANDLE, url, list_item, is_folder) @@ -114,61 +115,73 @@ def get_video_url(url): """ TODO """ - xbmc.log('Getting info for {}'.format(url), 2) + xbmc.log("Getting info for {}".format(url), 2) html = requests.get(url).text - soup = BeautifulSoup(html, 'html.parser') - video_id = soup.find('meta', property='og:url')['content'] \ - .strip('https://www.newgrounds.com/portal/view/') - response = requests.get('https://www.newgrounds.com/portal/video/{}'.format(video_id), headers={ - 'X-Requested-With': 'XMLHttpRequest' - }).json() - preferences = ['1080p', '720p', '360p'] + soup = BeautifulSoup(html, "html.parser") + video_id = soup.find("meta", property="og:url")["content"].strip( + "https://www.newgrounds.com/portal/view/" + ) + response = requests.get( + "https://www.newgrounds.com/portal/video/{}".format(video_id), + headers={"X-Requested-With": "XMLHttpRequest"}, + ).json() + preferences = ["1080p", "720p", "360p"] for preference in preferences: - if preference in response['sources']: - source = next(filter(lambda x: x['type'] == 'video/mp4', response['sources'][preference])) + if preference in response["sources"]: + source = next( + filter( + lambda x: x["type"] == "video/mp4", response["sources"][preference] + ) + ) if source is not None: - return source['src'] + return source["src"] def get_addon_video_info(url): """ Scrape metadata from `url`. """ - xbmc.log('Getting info for {}'.format(url), 2) + xbmc.log("Getting info for {}".format(url), 2) html = requests.get(url).text - soup = BeautifulSoup(html, 'html.parser') + soup = BeautifulSoup(html, "html.parser") return { - 'title': soup.find('div', id="embed_header").h2.string, - 'thumbnail': soup.find('meta', property="og:image")['content'], - 'url': url + "title": soup.find("div", id="embed_header").h2.string, + "thumbnail": soup.find("meta", property="og:image")["content"], + "url": url, } -def get_video_urls(genre='Featured', interval='today', sort='date', category=0, offset=0): +def get_video_urls( + genre="Featured", interval="today", sort="date", category=0, offset=0 +): URLS = { - 'Featured': 'https://www.newgrounds.com/movies/featured', - 'Latest': 'https://www.newgrounds.com/movies/browse', - 'Popular': 'https://www.newgrounds.com/movies/popular', + "Featured": "https://www.newgrounds.com/movies/featured", + "Latest": "https://www.newgrounds.com/movies/browse", + "Popular": "https://www.newgrounds.com/movies/popular", } - assert(interval in ['today', 'yesterday', 'week', 'month', 'year', 'all']) - assert(sort in ['date']) - assert(isinstance(genre, int)) + assert interval in ["today", "yesterday", "week", "month", "year", "all"] + assert sort in ["date"] + assert isinstance(genre, int) url = URLS[genre] - response = requests.get(url, params={ - 'interval': interval, - 'sort': sort, - 'genre': category, - 'isAjaxRequest': True, - 'offset': offset, - 'inner': 1 - }, headers={ - 'X-Requested-With': 'XMLHttpRequest', - }).json() + response = requests.get( + url, + params={ + "interval": interval, + "sort": sort, + "genre": category, + "isAjaxRequest": True, + "offset": offset, + "inner": 1, + }, + headers={ + "X-Requested-With": "XMLHttpRequest", + }, + ).json() - soup = BeautifulSoup(response['content'], 'html.parser') - return [tag["href"] for tag in soup.find_all('a', "inline-card-portalsubmission")] + soup = BeautifulSoup(response["content"], "html.parser") + return [tag["href"] for tag in soup.find_all("a", "inline-card-portalsubmission")] def list_videos(genre, category=0, offset=0): @@ -179,37 +192,37 @@ def list_videos(genre, category=0, offset=0): :type genre: str :type offset: int """ - html = requests.get("https://www.newgrounds.com/movies").text - soup = BeautifulSoup(html, 'html.parser') - videos = [get_addon_video_info(url) for url in get_video_urls(category=category, interval='all', offset=offset)] - - xbmcplugin.setPluginCategory(HANDLE, "Featured") #, genre_info['genre']) - xbmcplugin.setContent(HANDLE, 'movies') + videos = [ + get_addon_video_info(url) + for url in get_video_urls(category=category, interval="all", offset=offset) + ] + xbmcplugin.setPluginCategory(HANDLE, "Featured") # , genre_info['genre']) + xbmcplugin.setContent(HANDLE, "movies") # Get the list of videos in the category. # videos = genre_info['movies'] # Iterate through videos. for video in videos: - list_item = xbmcgui.ListItem(label=video['title']) - list_item.setArt({'thumb': video['thumbnail']}) + list_item = xbmcgui.ListItem(label=video["title"]) + list_item.setArt({"thumb": video["thumbnail"]}) info_tag = list_item.getVideoInfoTag() - info_tag.setMediaType('movie') - info_tag.setTitle(video['title']) + info_tag.setMediaType("movie") + info_tag.setTitle(video["title"]) # info_tag.setGenres([genre_info['genre']]) # info_tag.setPlot(video['plot']) # info_tag.setYear(video['year']) - list_item.setProperty('IsPlayable', 'true') + list_item.setProperty("IsPlayable", "true") - url = get_url(action='play', video=video['url']) + url = get_url(action="play", video=video["url"]) is_folder = False xbmcplugin.addDirectoryItem(HANDLE, url, list_item, is_folder) # Add a "continue" folder. list_item = xbmcgui.ListItem(label="Next Page") info_tag = list_item.getVideoInfoTag() - info_tag.setMediaType('video') + info_tag.setMediaType("video") info_tag.setTitle("Next Page") - url = get_url(action='listing', genre=genre, category=category, offset=offset+20) + url = get_url(action="listing", genre=genre, category=category, offset=offset + 20) is_folder = True xbmcplugin.addDirectoryItem(HANDLE, url, list_item, is_folder) @@ -220,7 +233,7 @@ def list_videos(genre, category=0, offset=0): def play_video(path): play_item = xbmcgui.ListItem(path=get_video_url(path)) - play_item.setProperty('IsPlayable', 'true') + play_item.setProperty("IsPlayable", "true") xbmcplugin.setResolvedUrl(HANDLE, True, play_item) @@ -235,15 +248,19 @@ def router(paramstring): params = dict(parse_qsl(paramstring)) if not params: list_genres() - elif params['action'] == 'listing' and 'category' in params: - list_videos(params['genre'], category=params['category'], offset=int(params.get('offset', 0))) - elif params['action'] == 'listing': - list_categories(params['genre']) - elif params['action'] == 'play': - play_video(params['video']) + elif params["action"] == "listing" and "category" in params: + list_videos( + params["genre"], + category=params["category"], + offset=int(params.get("offset", 0)), + ) + elif params["action"] == "listing": + list_categories(params["genre"]) + elif params["action"] == "play": + play_video(params["video"]) else: - raise ValueError(f'Invalid paramstring: {paramstring}!') + raise ValueError(f"Invalid paramstring: {paramstring}!") -if __name__ == '__main__': +if __name__ == "__main__": router(sys.argv[2][1:]) |