summaryrefslogtreecommitdiff
path: root/addon.py
diff options
context:
space:
mode:
authorJakob L. Kreuze <zerodaysfordays@sdf.org>2024-06-16 15:23:53 -0400
committerJakob L. Kreuze <zerodaysfordays@sdf.org>2024-06-16 15:23:53 -0400
commitadde8ab63fc5e34c5ab4461966614220f0271ef6 (patch)
tree64bebc22e4370b5c8f23d52e6101d0727ee83ea1 /addon.py
parent0514abcc20debb22d15cac6e07f5735cb3b669d4 (diff)
Lint
Diffstat (limited to 'addon.py')
-rw-r--r--addon.py179
1 files changed, 98 insertions, 81 deletions
diff --git a/addon.py b/addon.py
index 4b01c59..3343f7b 100644
--- a/addon.py
+++ b/addon.py
@@ -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:])