summaryrefslogtreecommitdiff
path: root/addon.py
diff options
context:
space:
mode:
Diffstat (limited to 'addon.py')
-rw-r--r--addon.py69
1 files changed, 66 insertions, 3 deletions
diff --git a/addon.py b/addon.py
index 6dd59a8..1d89740 100644
--- a/addon.py
+++ b/addon.py
@@ -69,6 +69,7 @@ def get_series(official=True, sort_by="date", offset=1):
"order": sort_by,
"page": offset,
},
+ cookies=get_session()
).text
soup = BeautifulSoup(html, "html.parser")
visual_links = [
@@ -95,6 +96,7 @@ def get_collections(official=True, sort_by="date", offset=1):
"order": sort_by,
"page": offset,
},
+ cookies=get_session()
).text
soup = BeautifulSoup(html, "html.parser")
visual_links = [
@@ -112,7 +114,7 @@ def get_series_videos(url):
:return: list of video list entries
:rtype: list
"""
- html = requests.get(url).text
+ html = requests.get(url, cookies=get_session()).text
soup = BeautifulSoup(html, "html.parser")
visual_links = [
json.loads(li["data-visual-link"])
@@ -141,6 +143,7 @@ def fetch_visual_links(visual_links):
"include_all_suitabilities": "0",
"isAjaxRequest": "1",
},
+ cookies=get_session()
)
result = r.json()
@@ -258,7 +261,7 @@ def get_video_url(url):
:return: stream URL
:rtype: str
"""
- html = requests.get(url).text
+ html = requests.get(url, cookies=get_session()).text
soup = BeautifulSoup(html, "html.parser")
video_id = soup.find("meta", property="og:url")["content"].strip(
"https://www.newgrounds.com/portal/view/"
@@ -266,6 +269,7 @@ def get_video_url(url):
response = requests.get(
"https://www.newgrounds.com/portal/video/{}".format(video_id),
headers={"X-Requested-With": "XMLHttpRequest"},
+ cookies=get_session()
).json()
preferences = ["1080p", "720p", "360p"]
for preference in preferences:
@@ -287,9 +291,10 @@ def get_addon_video_info(url):
:return: dictionary of video metadata
:rtype: dict
"""
- html = requests.get(url).text
+ html = requests.get(url, cookies=get_session()).text
soup = BeautifulSoup(html, "html.parser")
+ xbmc.log("Getting {}...".format(url), 2)
title = soup.find("div", id="embed_header").h2.string
thumbnail = soup.find("meta", property="og:image")
if thumbnail is not None:
@@ -396,6 +401,7 @@ def get_frontpage_video_urls(
headers={
"X-Requested-With": "XMLHttpRequest",
},
+ cookies=get_session()
).json()
soup = BeautifulSoup(response["content"], "html.parser")
@@ -436,6 +442,7 @@ def search(term, sort_by="relevance", offset=1):
headers={
"X-Requested-With": "XMLHttpRequest",
},
+ cookies=get_session(),
).json()
soup = BeautifulSoup(response["content"], "html.parser")
@@ -609,5 +616,61 @@ def router(paramstring):
raise ValueError(f"Invalid paramstring: {paramstring}!")
+SESSION_COOKIE_NAME = "vmkIdu5l8m"
+
+
+def test_logged_in(session):
+ return (
+ requests.get(
+ "https://www.newgrounds.com/account", cookies={SESSION_COOKIE_NAME: session}
+ ).status_code
+ != 401
+ )
+
+
+def get_session():
+ addon = Addon()
+
+ session = addon.getSetting("newgrounds.session")
+ if session is not None: # and test_logged_in(session):
+ return {SESSION_COOKIE_NAME: session}
+
+ username = addon.getSetting("newgrounds.username")
+ password = addon.getSetting("newgrounds.password")
+
+ if username == "" or password == "":
+ return {}
+
+ session = open_new_session(username, password)
+ addon.setSetting("newgrounds.session", session)
+
+ return {SESSION_COOKIE_NAME: session}
+
+
+def open_new_session(username, password):
+ html = requests.get("https://www.newgrounds.com/login").text
+ soup = BeautifulSoup(html, "html.parser")
+
+ form = soup.find("form", method="post")
+ endpoint = form["action"]
+ auth = form.find("input")["value"]
+
+ r = requests.post(
+ "https://www.newgrounds.com" + endpoint,
+ data={
+ "auth": auth,
+ "username": username,
+ "password": password,
+ "code": "",
+ "codehint": "------",
+ },
+ cookies={
+ "passport-auth": auth,
+ },
+ )
+ session = r.cookies[SESSION_COOKIE_NAME]
+ return session
+
+
if __name__ == "__main__":
router(sys.argv[2][1:])