diff --git a/config.json b/config.json
index 5241756..0cbffd7 100644
--- a/config.json
+++ b/config.json
@@ -21,7 +21,8 @@
"General":{
"load_env": "1",
"HOST": "0.0.0.0",
- "PORT": "8080"
+ "PORT": "8080",
+ "HF": "1"
}
}
\ No newline at end of file
diff --git a/config.py b/config.py
index fd68d84..1c89361 100644
--- a/config.py
+++ b/config.py
@@ -21,4 +21,5 @@ TF_FAST_SEARCH = SITE["Tuttifilm"]['fast_search']
GENERAL = config['General']
dotenv = GENERAL["load_env"]
HOST = GENERAL["HOST"]
-PORT = GENERAL["PORT"]
\ No newline at end of file
+PORT = GENERAL["PORT"]
+HF = GENERAL["HF"]
\ No newline at end of file
diff --git a/info.py b/info.py
index 3da1b42..5aed610 100644
--- a/info.py
+++ b/info.py
@@ -80,9 +80,12 @@ def get_info_imdb(imdb_id, ismovie, type):
elif type == "StreamingCommunity":
return showname
elif type == "Tuttifilm":
- date = data['tv_results'][0]['first_air_date']
- date = date.split("-")[0]
- return showname,date
+ if TF_FAST_SEARCH == "0":
+ date = data['tv_results'][0]['first_air_date']
+ date = date.split("-")[0]
+ return showname,date
+ elif TF_FAST_SEARCH == "1":
+ return showname
elif type == "Cool":
return showname
@@ -95,7 +98,6 @@ def get_info_imdb(imdb_id, ismovie, type):
elif type == "Tuttifilm":
date = data['movie_results'][0]['release_date']
date = date.split("-")[0]
- print("Real date",date)
return showname,date
elif type == "Cool":
return showname
diff --git a/run.py b/run.py
index 494946a..c77532d 100644
--- a/run.py
+++ b/run.py
@@ -12,8 +12,15 @@ FILMPERTUTTI = config.FILMPERTUTTI
STREAMINGCOMMUNITY = config.STREAMINGCOMMUNITY
MYSTERIUS = config.MYSTERIUS
TUTTIFILM = config.TUTTIFILM
+TF_DOMAIN = config.TF_DOMAIN
HOST = config.HOST
PORT = int(config.PORT)
+HF = config.HF
+if HF == "1":
+ HF = "🤗️"
+ #Cool code to set the hugging face if the service is hosted there.
+else:
+ HF = ""
if MYSTERIUS == "1":
from cool import cool
@@ -37,7 +44,7 @@ STREAMS = {
"skysport24": [
{
"title": "Sky Sport 24",
- "poster": "https://www.tanti.bond/public/upload/channel/sky-sport-24.webp",
+ "poster": f"https://www.tanti.{TF_DOMAIN}/public/upload/channel/sky-sport-24.webp",
"url": "https://07-24.mizhls.ru/fls/cdn/calcioXskysport24/playlist.m3u8",
"behaviorHints": {
"notWebReady": True,
@@ -54,6 +61,7 @@ STREAMS = {
"Skyuno": [
{
"title": "Sky Uno",
+ "poster": f"https://www.tanti.{TF_DOMAIN}/public/upload/channel/sky-uno.webp",
"url": "https://07-24.mizhls.ru/fls/cdn/calcioXskyuno/playlist.m3u8",
"behaviorHints": {
"notWebReady": True,
@@ -70,6 +78,7 @@ STREAMS = {
"skyserie": [
{
"title": "Sky Serie",
+ "poster": f"https://www.tanti.{TF_DOMAIN}/public/upload/channel/sky-serie.webp",
"url": "https://07-24.mizhls.ru/fls/cdn/calcioXskyserie/playlist.m3u8",
"behaviorHints": {
"notWebReady": True,
@@ -86,6 +95,7 @@ STREAMS = {
"Sky Nature": [
{
"title": "Sky Nature",
+ "poster": f"https://www.tanti.{TF_DOMAIN}/public/upload/channel/sky-nature.webp",
"url": "https://07-24.mizhls.ru/fls/cdn/calcioXskynature/playlist.m3u8",
"behaviorHints": {
"notWebReady": True,
@@ -102,6 +112,7 @@ STREAMS = {
"skyinvestigation": [
{
"title": "skyinvestigation",
+ "poster": f"https://www.tanti.{TF_DOMAIN}/public/upload/channel/sky-nature.webp",
"url": "https://07-24.mizhls.ru/fls/cdn/calcioXskyinvestigation/playlist.m3u8",
"behaviorHints": {
"notWebReady": True,
@@ -164,20 +175,23 @@ def addon_stream(type, id):
results = cool(id)
if results:
for resolution, link in results.items():
- streams['streams'].append({'title': f'Mysterious {resolution}', 'url': link})
+ streams['streams'].append({'title': f'{HF}Mysterious {resolution}', 'url': link})
if STREAMINGCOMMUNITY == "1":
url_streaming_community = streaming_community(id)
- print(url_streaming_community)
if url_streaming_community is not None:
- streams['streams'].append({'title': 'StreamingCommunity 1080p', 'url': f'{url_streaming_community}?rendition=1080p'})
- streams['streams'].append({'title': 'StreamingCommunity 720p', 'url': f'{url_streaming_community}?rendition=720p'})
+ streams['streams'].append({'title': f'{HF}StreamingCommunity 1080p', 'url': f'{url_streaming_community}?rendition=1080p'})
+ streams['streams'].append({'title': f'{HF}StreamingCommunity 720p', 'url': f'{url_streaming_community}?rendition=720p'})
if FILMPERTUTTI == "1":
url_filmpertutti = filmpertutti(id)
if url_filmpertutti is not None:
streams['streams'].append({'title': 'Filmpertutti', 'url': url_filmpertutti})
if TUTTIFILM == "1":
url_tuttifilm = tantifilm(id)
- streams['streams'].append({'title': 'Tantifilm', 'url': url_tuttifilm, 'behaviorHints': {'proxyHeaders': {"request": {"Referer": "https://d000d.com/"}}, 'notWebReady': True}})
+ if not isinstance(url_tuttifilm, str):
+ for title, url in url_tuttifilm.items():
+ streams['streams'].append({'title': f'{HF}Tantifilm {title}', 'url': url, 'behaviorHints': {'proxyHeaders': {"request": {"Referer": "https://d000d.com/"}}, 'notWebReady': True}})
+ else:
+ streams['streams'].append({'title': f'{HF}Tantifilm', 'url': url_tuttifilm, 'behaviorHints': {'proxyHeaders': {"request": {"Referer": "https://d000d.com/"}}, 'notWebReady': True}})
if not streams['streams']:
abort(404)
@@ -197,8 +211,8 @@ def meta(type, id):
"id": stream_id,
"type": type,
"name": item['title'],
- "poster": item.get('poster', "https://via.placeholder.com/150"),
- "background": item.get('background', "https://via.placeholder.com/800x450")
+ "poster": item.get('poster', "https://icons.iconarchive.com/icons/designbolts/free-multimedia/256/TV-icon.png"),
+ "background": item.get('background', "https://icons.iconarchive.com/icons/designbolts/free-multimedia/256/TV-icon.png")
}
break
diff --git a/tantifilm.py b/tantifilm.py
index 40a1f90..dc6694e 100644
--- a/tantifilm.py
+++ b/tantifilm.py
@@ -9,7 +9,7 @@ TF_DOMAIN = config.TF_DOMAIN
##FOR NOW ONLY MOVIES WORK, I HOPE I CAN FIX SERIES
-def search(showname,ismovie,season,episode,date):
+def search(showname,ismovie,date):
url = f'https://www.tanti.bond/search/{showname}'
response = requests.get(url)
soup = BeautifulSoup(response.text, "lxml")
@@ -21,44 +21,137 @@ def search(showname,ismovie,season,episode,date):
pattern = r'Data di rilascio\s*\s*
\s*(\d{4})\s*
'
found_date = re.search(pattern, response.text)
release_date = str(found_date.group(1))
- print(release_date)
if release_date == date:
- tid= url.split('-')[1]
- print(tid)
+ tid= url.split('-')[-1]
#Return URL and even the soup so I can use it later
#I try to get doodstream link inside this function so I do not have to get again the response
- print(url)
- return tid
+ return tid,url
elif ismovie == 0:
all_link = soup.select('#series .col .list-media')
for link in all_link:
base_url = link['href']
- url = f'{base_url}-{season}-season-{episode}-episode'
+ url = f'{base_url}-1-season-1-episode'
response = requests.get(url)
pattern = r'Data di rilascio\s*\s*\s*(\d{4})\s*
'
found_date = re.search(pattern, response.text)
release_date = str(found_date.group(1))
if release_date == date:
- print("RELEASE DATE IS EQUAL")
tid= url.split('-')[1]
- print(tid)
+ soup = BeautifulSoup(response.text, 'lxml')
+ a_tag = soup.find('a', class_='dropdown-toggle btn-service selected')
+ embed_id = a_tag['data-embed']
#I try to get doodstream link inside this function so I do not have to get again the response
- return tid
+ return url,embed_id
+
+def fast_search(showname,ismovie):
+ url = f'https://www.tanti.bond/search/{showname}'
+ response = requests.get(url)
+ soup = BeautifulSoup(response.text, "lxml")
+ if ismovie == 1:
+ first_link = soup.select_one('#movies .col .list-media')
+ url = first_link['href']
+ tid= url.split('-')[1]
+ return tid,url
+ elif ismovie == 0:
+ first_link = soup.select_one('#series .col .list-media')
+ base_url = first_link['href']
+ url = f'{base_url}-1-season-1-episode'
+ response = requests.get(url)
+ soup = BeautifulSoup(response.text, 'lxml')
+ a_tag = soup.find('a', class_='dropdown-toggle btn-service selected')
+ embed_id = a_tag['data-embed']
+ return url,embed_id
-def get_protect_link(id):
- #Get the link where the Iframe is located, which contains the doodstream url kind of.
- response = requests.get(f"https://p.hdplayer.casa/myadmin/play.php?id={id}")
- soup = BeautifulSoup(response.text, "lxml", parse_only=SoupStrainer('iframe'))
- print(soup)
- protect_link = soup.iframe['src']
- print("HERE PROTECT_LINK",protect_link)
- return protect_link
+def get_protect_link(id,url):
+ #Get the link where the Iframe is located, which contains the doodstream url kind of.
+ response = requests.get(f"https://p.hdplayer.casa/myadmin/play.php?id={id}")
+ soup = BeautifulSoup(response.text, "lxml", parse_only=SoupStrainer('iframe'))
+ protect_link = soup.iframe['src']
+ if "protect" in protect_link:
+ return protect_link
+ else:
+ #DO this in case the movie has a 3D version etc
+ response = requests.get(url)
+ soup = BeautifulSoup(response.text, 'lxml')
+ a_tag = soup.find('a', class_='dropdown-toggle btn-service selected')
+ embed_id = a_tag['data-embed']
+ headers = {
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
+ 'Referer': url
+ }
+ #Parameters needed is the embed ID
+ data = {
+ 'id': embed_id
+ }
+ ajax_url = "https://www.tanti.bond/ajax/embed"
+ response = requests.post(ajax_url, headers=headers, data=data)
+ hdplayer = response.text[43:-27]
+ response = requests.get(hdplayer)
+ soup = BeautifulSoup(response.text, 'lxml')
+ links_dict = {}
+ li_tags = soup.select('ul.nav.navbar-nav li.dropdown')
+ for li_tag in li_tags:
+ a_tag = li_tag.find('a')
+ if a_tag:
+ title = a_tag.text.strip()
+ #Since tantifilm player is broken I just skip it
+ if title == "1" or "Tantifilm" in title:
+ continue # Get the text of the tag
+ href = a_tag['href']
+ response = requests.get(href)
+ soup = BeautifulSoup(response.text, "lxml", parse_only=SoupStrainer('iframe'))
+ protect_link = soup.iframe['src']
+ if "protect" in protect_link:
+ url = true_url(protect_link)
+ links_dict[title] = url
+ return links_dict
+ # Get the value of the href attribute
+
+def get_nuovo_indirizzo_and_protect_link(url,embed_id,season,episode):
+ headers = {
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
+ 'Referer': url
+ }
+ #Parameters needed is the embed ID
+ data = {
+ 'id': embed_id
+}
+ ajax_url = "https://www.tanti.bond/ajax/embed"
+ response = requests.post(ajax_url, headers=headers, data=data)
+ nuovo_indirizzo = response.text[43:-27]
+ response = requests.get(nuovo_indirizzo)
+ soup = BeautifulSoup(response.text, 'lxml')
+ #Get season
+ season = season - 1
+ li_tags = soup.select('ul.nav.navbar-nav > li.dropdown')
+ if len(li_tags) != 1:
+ link = li_tags[season].find('a')['href']
+ response = requests.get(link)
+ soup = BeautifulSoup(response.text, 'lxml')
+ option_tag = soup.select(f'select[name="ep_select"] > option:nth-of-type({episode})')[0]
+ link = option_tag['value']
+ #Let's find protect link now
+ response = requests.get(link)
+ soup = BeautifulSoup(response.text, "lxml", parse_only=SoupStrainer('iframe'))
+ protect_link = soup.iframe['src']
+ return protect_link
+
+ else:
+ #If there is only one season than
+ option_tag = soup.select('select.dynamic_select > option')[episode]
+ link = option_tag['value']
+ #Let's find protect link now
+ response = requests.get(link)
+ soup = BeautifulSoup(response.text, "lxml", parse_only=SoupStrainer('iframe'))
+ protect_link = soup.iframe['src']
+ return protect_link
def true_url(protect_link):
+ print(protect_link)
# Define headers
headers = {
"Range": "bytes=0-",
@@ -100,125 +193,61 @@ def true_url(protect_link):
#Get temporaly ID
def tantifilm(imdb):
+ urls = None
try:
general = is_movie(imdb)
ismovie = general[0]
imdb_id = general[1]
type = "Tuttifilm"
if ismovie == 0 :
- print("Series not supported yet")
- return
season = int(general[2])
episode = int(general[3])
if "tt" in imdb:
if TF_FAST_SEARCH == "0":
showname,date = get_info_imdb(imdb_id,ismovie,type)
+ url,embed_id = search(showname,ismovie,date)
elif TF_FAST_SEARCH == "1":
showname = get_info_imdb(imdb_id,ismovie,type)
- date = None
+ url,embed_id = fast_search(showname,ismovie)
else:
#else just equals them
tmdba = imdb_id.replace("tmdb:","")
if TF_FAST_SEARCH == "0":
- showname = get_info_tmdb(tmdba,ismovie,type)
- date = None
+ showname,date = get_info_tmdb(tmdba,ismovie,type)
+ url,embed_id = search(showname,ismovie,date)
+ elif TF_FAST_SEARCH == "1":
+ showname= get_info_tmdb(tmdba,ismovie,type)
+ url,embed_id = fast_search(showname,ismovie)
+ protect_link = get_nuovo_indirizzo_and_protect_link(url,embed_id,season,episode)
+ url = true_url(protect_link)
+ return url
elif ismovie == 1:
- season = None
- episode = None
if "tt" in imdb:
#Get showname
if TF_FAST_SEARCH == "0":
showname,date = get_info_imdb(imdb_id,ismovie,type)
-
+ tid,url = search(showname,ismovie,date)
elif TF_FAST_SEARCH == "1":
showname = get_info_imdb(imdb_id,ismovie,type)
date = None
+ tid,url = fast_search(showname,ismovie)
else:
#else just equals themtantifilm("tt2096673")
if TF_FAST_SEARCH == "0":
showname,date = get_info_tmdb(imdb,ismovie,type)
- date = None
+ tid,url = search(showname,ismovie,date)
elif TF_FAST_SEARCH == "1":
showname = get_info_tmdb(imdb,ismovie,type)
- date = None
-
- tid = search(showname,ismovie,season,episode,date)
- protect_link = get_protect_link(tid)
- url = true_url(protect_link)
- return url
+ tid,url = fast_search(showname,ismovie)
+ protect_link = get_protect_link(tid,url)
+ if not isinstance(protect_link, str):
+ urls = protect_link
+ return urls
+ url = true_url(protect_link)
+ return url
except Exception as e:
- print("Tantifilm Error")
-
-
-
-
-
-
-
-
-
-
-
-
-#OLD SEARC THAT DOESN't CHECK THE DATE
-def mamma(showname,ismovie,season,episode):
- url = f'https://www.tanti.bond/search/{showname}'
- response = requests.get(url)
- soup = BeautifulSoup(response.text, "lxml")
- if ismovie == 1:
- first_link = soup.select_one('#movies .col .list-media')
- url = first_link['href']
- return url
- elif ismovie == 0:
- first_link = soup.select_one('#series .col .list-media')
- base_url = first_link['href']
- url = f'{base_url}-{season}-{episode}'
- print(url)
- return url
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-def searcht(showname,ismovie,season,episode):
- url = f'https://www.tanti.bond/search/{showname}'
- response = requests.get(url)
- soup = BeautifulSoup(response.text, "lxml")
- date = "2020"
- if ismovie == 1:
- all_link = soup.select('#movies .col .list-media')
- for link in all_link:
- url = link['href']
- response = requests.get(url)
- info_soup = BeautifulSoup(response.text, "lxml")
- release_date= info_soup.select('div.video-attr div.text')[4].text.strip()
- if release_date == date:
- print("WOW")
- #Return URL and even the soup so I can use it later
- return url,info_soup
- elif ismovie == 0:
- all_link = soup.select('#series .col .list-media')
- for link in all_link:
- base_url = link['href']
- url = f'{base_url}-{season}-season-{episode}-episode'
- response = requests.get(url)
- info_soup = BeautifulSoup(response.text, "lxml")
- release_date= info_soup.select('div.video-attr div.text')[4].text.strip()
- if release_date == date:
- print("RELEASE DATE IS EQUAL")
- #Return URL and even the soup so I can use it later
- return url,info_soup
\ No newline at end of file
+ if urls or url == None:
+ print("Tantifilm Error")
\ No newline at end of file