From bb97ff4e8adea33e238733fcf350ff707c333cc4 Mon Sep 17 00:00:00 2001 From: UrloMythus Date: Mon, 8 Jul 2024 15:37:04 +0200 Subject: [PATCH] divided function into utilies in order to add a new API --- README.md | 1 + Spacefile | 7 --- US_date.py | 20 ++++++++ __pycache__/US_date.cpython-311.pyc | Bin 0 -> 2363 bytes __pycache__/convert.cpython-311.pyc | Bin 0 -> 1541 bytes __pycache__/info.cpython-311.pyc | Bin 0 -> 1212 bytes __pycache__/loadenv.cpython-311.pyc | Bin 0 -> 571 bytes convert.py | 26 ++++++++++ filmpertutti.py | 75 +++------------------------- info.py | 26 ++++++++++ loadenv.py | 7 +++ 11 files changed, 86 insertions(+), 76 deletions(-) delete mode 100644 Spacefile create mode 100644 US_date.py create mode 100644 __pycache__/US_date.cpython-311.pyc create mode 100644 __pycache__/convert.cpython-311.pyc create mode 100644 __pycache__/info.cpython-311.pyc create mode 100644 __pycache__/loadenv.cpython-311.pyc create mode 100644 convert.py create mode 100644 info.py create mode 100644 loadenv.py diff --git a/README.md b/README.md index 9a29ee7..5261455 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # MammaMia A Stremio Addon for HTTPS Stream in Italian +Note that for now only filmpertutti is avaiable which uses Mixdrop. Mixdrop allows to see the videos only from the same IP they were generated so, if you want to scrape filmpertutti, you have to host this project locally. # Installation Install required packages diff --git a/Spacefile b/Spacefile deleted file mode 100644 index 8c4e750..0000000 --- a/Spacefile +++ /dev/null @@ -1,7 +0,0 @@ -# Spacefile Docs: https://go.deta.dev/docs/spacefile/v0 -v: 0 -micros: - - name: MammaMia - src: ./ - engine: python3.9 - primary: true diff --git a/US_date.py b/US_date.py new file mode 100644 index 0000000..e2f14c8 --- /dev/null +++ b/US_date.py @@ -0,0 +1,20 @@ + +def convert_US_date(date): + us_data = next((country_data for country_data in date['results'] if country_data["iso_3166_1"] == "US"), None) + if us_data: + us_release_dates_type_3 = [rd for rd in us_data['release_dates'] if rd['type'] == 3] + # Sort the list of release dates and get the latest + us_release_dates_type_3.sort(key = lambda x: x['release_date'], reverse=True) + if len(us_release_dates_type_3) > 0: + latest_release_date = us_release_dates_type_3[0]['release_date'] + date = latest_release_date.split('T')[0] + print('Latest US theatrical release date:', date) + return date + else: + us_release_dates_type_4 = [rd for rd in us_data['release_dates'] if rd['type'] == 4] + us_release_dates_type_4.sort(key = lambda x: x['release_date'], reverse=True) + if len(us_release_dates_type_4) > 0: + latest_release_date = us_release_dates_type_4[0]['release_date'] + date = latest_release_date.split('T')[0] + print('Latest US theatrical release date (type 4):', date) + return date \ No newline at end of file diff --git a/__pycache__/US_date.cpython-311.pyc b/__pycache__/US_date.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3ebaad959ef1e018d17238af720686baf26d235a GIT binary patch literal 2363 zcmcIkO-vg{6rNq%vB8UNSS4=NDj0(tj1h+Lqb3EnYEgn50#0pLh0-{ScS8*R>+CuT z$W$CSL~0K7#FY~zB2s}Q)0h;(p z4Qo8LiL!{NKPG-!n?$?tzh8SokaZWL_F+`pI+dkxh1WqG#p^GQTc@-1PQy;8@sQE5 ziTG=8jLmr|B$0F0T9)30*!{D3-n0Vf5yGEmY2H-dm2auf*L7Ll4#D|e<6F;XYluQp zOFe)$XV2lKfS(}ZnM?8Nv-%70wp{_Q{`?7Rcqg*@{}r$00=xt>47YWrNlJv?VHn4^ z!8|||$SI3{=pdrtQJqwtTG0ganmQhEzHnoOumu zRq262m5HV@NeQn;cuwL(67F!EeBphTN(kNzj;Fknsc0r4B&C=)7{y#VmR#}%B`hRj zDF?^%sigNImq>6AW1Ke}BuRvU^y*2=_>zzmUZk;a%^6K4p9@%uoGy>YQ&BE1`UcK? z2t1MC`x|~6NM=`{?<^D;Im{_ji}KUu($um%wY)VArrtHTV+cd45es4_E{RR75$Uop zj{CrDqb0(b?L(aXLceM!*I3m{t7+kg91C9q^P0v+_)}@j*BHV?yeF;W@t7z@Q;D>1 zt@~n_XHMj%iB2$p(Ya9Vd(OgFh39|z<@xXbm@Uli+%AAE%wjXyunh}wffEId*Jf~} zQX04pm=HPeR9y%`IP#3jG)7l}P%8C8B-h(fMPM3_bBRTs^R0D#;QUn=LV-w*wSjVv zaz81f_coAr%n&f9TM<@C6`<0ha0E^W-vFahp*80;h(eSc;h;l$CU6ptLHQlEvpI-j z?*2Dr!xq@_h*Vtzi)}D#tQRI!U8ztckw{bng>pTq_Ps?p@QoatQv&ny<47qGkpqz( z45r#OCYo?uQXzaD@>dUPC)?Glf=MB-P!KB#s}>~Rp7$wt{I!Ctc`l{g(Mu%m7;)cq z8&o}9RY}#0DJ-eFxR6v0Vmcm^R6`oak`i$sRZ@)^QTs}$c9=A3ON@|YkztjMYo%^l zyvTb*B-g<~nx;k7dQO4Z1M7rD@ey#dfetMl)h|OXlz0Cgfq9W#QQ#wx__1igiUn`n zFB>ftWHWqP)^1nMn71l}Q*h6U&IJWtnL6K@IuA@eB~y>=xkq{+B%6AQrm$iP%ck(5 z*&E3On+0 z@{nnlJI3<*A~T^d6EZVVX6-K@ywlW^yPuy`My5eWMb{GrUNPNeru%^DEit{a*H3!r zJDKS%GII(uCo^-0R)E@9w0ab)XOAmcy|UF?c1`3t#r5Uen~EzS+q%p4z61MU$v&84 zi}q2)KAPhc`)6DFL)&%v#@BB{MVnu-`DL5GZ2x4-T;{VpU@d?qgVa6h~w(iCrkspu$*s^~i?NcFzaGX4t&_c;Ur literal 0 HcmV?d00001 diff --git a/__pycache__/convert.cpython-311.pyc b/__pycache__/convert.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1064d4d3c78f5f45edb4739113a6550a1f4e93c5 GIT binary patch literal 1541 zcma)6PfQ$T6#wS`>~>+wf+<9>Eq`iPQYM5L=*FlR+E{f#1F5>UnGAdbOx>ATznNWa zGciPNh6?N|NM4d;}H6TD*FU_gLW_+s|X{^lu(hLY>BbhB5QF)&f<$aLv371u*9Os zAQlqp@Z)H4ptbF@lh3#aUa#e_#$DZxiMzD4uX~-7js8+ z7V}Ho|E|Oz$wW4b*(J`~hY)()01);F3qHD!9{)(e&+Gr7y;x9Gdy`Ui+mjBfQVdS2PhtEyf$hrC6@q6>p(ha9q? zj;QmdjnzalEj+84IL9W6@s(!~TQ6y@Qz3IkB0-+^xp5QrODyX|x7?(qQ9~n!TPb;N z!kRcqd)0kCCnkbhE}32;6XT1D;X(+vV1No6`;PYhrB4(7hU?ggP$s7BA9la@^b`o-c=YYxKK$gD>tWw#z}p;i@;dVuqVn&C zti8LL>G-bjP2tYe@>K0oEM)>Ml6tn0By>EJTLR-wW;qjNVx?n6ifT2D^Nf`bqSmwZvr%h*eI{ysZ9^W61*8{K{kl=bsQcO&vWTcI7uL2UkkQo1`C9y3TGD1OUS@ zF;Z%cUyKIA<2gp%VKc|=FRzS!pTC#iKqqT*aBiE=G9BCKK%7TRSBN^-PH&)GgmU3N HH|F{m!XZR1au!k^EC`u1{D)i>bnb_TahzB1tZ|2RLdGGf==2Lt7A;9VD z&o>j_WB|Skp-Eg$X?uh(?|=gw$pcs_Ns`#ho{W`}f?)|_wWOwJilLV?z zuw2t<_pXOXJAh8x6EBR^NSlz0pt)w1VJ5qjh;(F+5Xcv1@DklE-yeFybbHDzKSwWl z1#Q1FZC4NxaWdUO)ONj)LEpxRnG-GvY1wv3T0bJP##HK353zQFJYD_yCF^+0aEOYF_~5w44(xrm?3y-8;Xu#YI-d+`0KtM`Zbt)7GRW{CSH)s2jkNi z`P9u7#|a1RS8_#45O#w;+i?OvSFka*3$C4W{fXex6pyHaXjurPhZ_}9g&#SqgZ0DK z?A5nd>-qKLrx$M4^D_^U&J%noB)YlK|2nEi>+RO;=-bg)PRx$^$+^kpt~K*a!#oqi zB-6cgJvI{aSi|g(VGK7rx)${%JysJlGmq!+^3a+&&@c!1)nmt(F2=@&m1$V~>ZWyi znXXyq8rC_k{Fw@1a;-89$#%66IgVifM_Oys; z4R(sP^R3d{6VWwH%RemKxi_4K{uz*7enw7m_RAQ=fivx)TV#NXqQk=}&bAauk`mCn rx_>0#{OZ3)0?w}PA4#TX;o9Pjr5kIYqi)0(wqU1pY76|$QbfN2HvAm} literal 0 HcmV?d00001 diff --git a/__pycache__/loadenv.cpython-311.pyc b/__pycache__/loadenv.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fe18b9884b935e645796a912cc259285e582cfb2 GIT binary patch literal 571 zcmZ`#ze~eF6n=L}Yc<3o-BculOAwmPNff1uMOuf7U>6C!v{sT{xwc|OA%lZp2RHo- z6cOD0FIwnO0!~gk6}mb3F4aO6-`)G(_l|e(*MqK40m{qAb@3VPn{<9e`6h#9B)7nT z5f}2(QkQr%PYF8`QbGgk98LvB)lQT7mSor=B z8d*&0Adheh^-(&2;}K_Mywt^iar9RlIfrvnq}Y&>4Ptwl)W+e?=0Olm?Pk`~S(65o z*Mextkt|07cxl*!nb>VnrZrF_R zij}cF&(4%>OHPallhtMr3#Ug%$bG9a^%8;)uko2y^KP~iU+l&g{q0vh-a5EB?dV2V zH~g)hmblq(YjbUNZh+xns$v375FPGO$c=>=A3p`%(0uJ`s{@HHB-)VZQ-#d;;V*=xz5q-geMJBO literal 0 HcmV?d00001 diff --git a/convert.py b/convert.py new file mode 100644 index 0000000..482686d --- /dev/null +++ b/convert.py @@ -0,0 +1,26 @@ +import requests +from tmdbv3api import TMDb, Movie, TV +from loadenv import load_env +TMDB_KEY, DOMAIN = load_env() + +def get_TMDb_id_from_IMDb_id(imdb_id): + if ":" in imdb_id: + season = imdb_id.split(":")[1] + episode = imdb_id[-1] + ismovie = 0 + imdb_id = imdb_id.split(":")[0] + else: + ismovie = 1 + response = requests.get(f'https://api.themoviedb.org/3/find/{imdb_id}', + params={'external_source': 'imdb_id', 'api_key': f'{TMDB_KEY}'}) + tmbda = response.json() + if tmbda['movie_results']: + print(tmbda) + return tmbda['movie_results'][0]['id'], ismovie + elif tmbda['tv_results']: + print(tmbda['tv_results'][0]['id']) + return tmbda['tv_results'][0]['id'], season, episode , ismovie + else: + return None + +get_TMDb_id_from_IMDb_id("tt1839578:1:1") \ No newline at end of file diff --git a/filmpertutti.py b/filmpertutti.py index 67044e0..8a3dc8c 100644 --- a/filmpertutti.py +++ b/filmpertutti.py @@ -6,14 +6,12 @@ import string import re from datetime import datetime import dateparser -import os -from dotenv import load_dotenv - -load_dotenv(".env") - -TMDB_KEY = os.getenv('TMDB_KEY') -DOMAIN = os.getenv('DOMAIN') +from convert import get_TMDb_id_from_IMDb_id +from loadenv import load_env +from info import get_info +from US_date import convert_US_date +TMDB_KEY, DOMAIN = load_env() headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.10; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', 'Accept-Language': 'en-US,en;q=0.5' @@ -23,66 +21,6 @@ month_mapping = { 'May': 'Maggio', 'Jun': 'Giugno', 'Jul': 'Luglio', 'Aug': 'Agosto', 'Sep': 'Settembre', 'Oct': 'Ottobre', 'Nov': 'Novembre', 'Dec': 'Dicembre' } -def convert_US_date(date): - us_data = next((country_data for country_data in date['results'] if country_data["iso_3166_1"] == "US"), None) - if us_data: - us_release_dates_type_3 = [rd for rd in us_data['release_dates'] if rd['type'] == 3] - # Sort the list of release dates and get the latest - us_release_dates_type_3.sort(key = lambda x: x['release_date'], reverse=True) - if len(us_release_dates_type_3) > 0: - latest_release_date = us_release_dates_type_3[0]['release_date'] - date = latest_release_date.split('T')[0] - print('Latest US theatrical release date:', date) - return date - else: - us_release_dates_type_4 = [rd for rd in us_data['release_dates'] if rd['type'] == 4] - us_release_dates_type_4.sort(key = lambda x: x['release_date'], reverse=True) - if len(us_release_dates_type_4) > 0: - latest_release_date = us_release_dates_type_4[0]['release_date'] - date = latest_release_date.split('T')[0] - print('Latest US theatrical release date (type 4):', date) - return date -def get_TMDb_id_from_IMDb_id(imdb_id): - if ":" in imdb_id: - season = imdb_id.split(":")[1] - episode = imdb_id[-1] - ismovie = 0 - imdb_id = imdb_id.split(":")[0] - else: - ismovie = 1 - response = requests.get(f'https://api.themoviedb.org/3/find/{imdb_id}', - params={'external_source': 'imdb_id', 'api_key': f'{TMDB_KEY}'}) - tmbda = response.json() - if tmbda['movie_results']: - print(tmbda) - return tmbda['movie_results'][0]['id'], ismovie - elif tmbda['tv_results']: - print(tmbda['tv_results'][0]['id']) - return tmbda['tv_results'][0]['id'], season, episode , ismovie - else: - return None - -def get_mamma(tmbda,ismovie): - tmdb = TMDb() - tmdb.api_key = f'{TMDB_KEY}' - tmdb.language = 'it' - if ismovie == 0: - tv = TV() - show= tv.details(tmbda) - showname = show.name - date= show.first_air_date - else: - movie = Movie() - show= movie.details(tmbda) - showname= show.title - #Get all release dates - date = show.release_dates - #GET US RELEASE DATE because filmpertutti somewhy uses US release date - date = convert_US_date(date) - if ismovie==0: - return showname,date - else: - return showname,date def search(query,date): response = requests.get(query).json() @@ -153,7 +91,7 @@ def get_stream_link(imbd): tmdba,season,episode,ismovie = info else: tmdba,ismovie = info - showname,date = get_mamma(tmdba,ismovie) + showname,date = get_info(tmdba,ismovie) showname = showname.replace(" ", "+").replace("–", "+").replace("—","+") query = f'https://filmpertutti.{DOMAIN}/wp-json/wp/v2/posts?search={showname}&page=1&_fields=link,id' print(query) @@ -176,4 +114,3 @@ def get_stream_link(imbd): #let's get delivery link, streaming link streaming_link = get_true_link(real_link) return streaming_link - diff --git a/info.py b/info.py new file mode 100644 index 0000000..e1761b5 --- /dev/null +++ b/info.py @@ -0,0 +1,26 @@ +from loadenv import load_env +from tmdbv3api import TMDb, Movie, TV +from US_date import convert_US_date +TMDB_KEY, DOMAIN = load_env() + +def get_info(tmbda,ismovie): + tmdb = TMDb() + tmdb.api_key = f'{TMDB_KEY}' + tmdb.language = 'it' + if ismovie == 0: + tv = TV() + show= tv.details(tmbda) + showname = show.name + date= show.first_air_date + else: + movie = Movie() + show= movie.details(tmbda) + showname= show.title + #Get all release dates + date = show.release_dates + #GET US RELEASE DATE because filmpertutti somewhy uses US release date + date = convert_US_date(date) + if ismovie==0: + return showname,date + else: + return showname,date \ No newline at end of file diff --git a/loadenv.py b/loadenv.py new file mode 100644 index 0000000..c609f84 --- /dev/null +++ b/loadenv.py @@ -0,0 +1,7 @@ +import os +from dotenv import load_dotenv +load_dotenv(".env") +def load_env(): + TMDB_KEY = os.getenv('TMDB_KEY') + DOMAIN = os.getenv('DOMAIN') + return TMDB_KEY, DOMAIN \ No newline at end of file