408 Commits

Author SHA1 Message Date
f129d57f30 workflow
All checks were successful
Update channel domains / update (push) Successful in 17s
2025-01-17 21:50:02 +01:00
607f3c8128 workflow edit
Some checks failed
Update channel domains / update (push) Failing after 53s
2025-01-17 21:46:53 +01:00
75e0f8bfa0 Merge pull request 'test-latest' (#1) from test-latest into master
Reviewed-on: #1
2025-01-17 20:44:30 +00:00
50954f50ec add workflow gitea 2025-01-17 21:41:09 +01:00
59ad6be60e update channels 2025-01-16 00:43:17 +01:00
b22139ba2c Tlatest 2025-01-16 00:40:27 +01:00
bde83602d6 latest version 2025-01-16 00:40:16 +01:00
github-actions[bot]
84a6d7ec93 Aggiornamento domini 2024-09-07 17:35:47 +00:00
Timmy89
3ffa260525 Disattivato Tantifilm 2024-09-04 13:08:56 +02:00
Timmy89
edb24c906f Disattivato AniPlay 2024-09-04 13:00:28 +02:00
github-actions[bot]
8d6ef2aebd Aggiornamento domini 2024-09-03 17:36:37 +00:00
github-actions[bot]
df6b7c70d8 Aggiornamento domini 2024-08-26 17:38:12 +00:00
ilmich
e0cc7d9edb cineblog: fix scraper 2024-08-24 17:00:33 +02:00
github-actions[bot]
e93b58895c Aggiornamento domini 2024-08-19 17:37:41 +00:00
github-actions[bot]
ae13adb02f Aggiornamento domini 2024-08-11 17:39:39 +00:00
ilmich
bcbb42b4c0 lordchannel: new channel 2024-08-02 16:33:33 +02:00
ilmich
771d2d571a updated scws 2024-07-29 08:18:41 +02:00
ilmich
bbdb4375c5 Aggiornamento domini 2024-07-25 17:04:56 +02:00
github-actions[bot]
88cdae47ff Aggiornamento domini 2024-07-24 17:39:07 +00:00
ilmich
f1d055d4fa toonitalia: fix scraper and voe server 2024-07-21 09:44:04 +02:00
github-actions[bot]
7d641bf83f Aggiornamento domini 2024-07-20 17:38:38 +00:00
github-actions[bot]
eb14c3c0ac Aggiornamento domini 2024-07-19 17:38:35 +00:00
ilmich
bb4e63471e channels: fix raiplay e filmpertutti 2024-07-19 19:01:58 +02:00
github-actions[bot]
73c5b73b64 Aggiornamento domini 2024-07-16 17:40:05 +00:00
ilmich
ffffcf691d filmpertutti: fix channel 2024-07-13 21:56:47 +02:00
github-actions[bot]
cc8353ddca Aggiornamento domini 2024-07-11 17:39:49 +00:00
github-actions[bot]
b100f758af Aggiornamento domini 2024-07-07 17:36:16 +00:00
ilmich
43b173c7a2 dinostreaming: updated with some categories 2024-07-07 12:08:06 +02:00
ilmich
2c901fdbf1 dinostreaming: new channel (work in progress) 2024-07-07 11:25:44 +02:00
ilmich
d378d31677 altadefinizione: channel refactored 2024-07-05 14:59:41 +02:00
ilmich
3d25d8d098 altadefinizione: fix resume on some tv series 2024-06-28 18:15:47 +02:00
ilmich
1818994ded altadefinizione: fix for not working stream 2024-06-28 17:38:53 +02:00
ilmich
da7d766531 altadefinizione: fix player resume 2024-06-28 17:09:52 +02:00
ilmich
7d46b74bee altadefinizione: fix for speed 2024-06-28 16:36:29 +02:00
ilmich
bc90ba67be altadefiniziona: fix scraper 2024-06-28 08:58:34 +02:00
github-actions[bot]
4bd441bf4d Aggiornamento domini 2024-06-17 17:36:11 +00:00
ilmich
d049be14e0 vvvvid: disabled 2024-06-16 21:19:00 +02:00
ilmich
5e4cf944b1 discoveryplus: fix live channels 2024-06-16 09:47:15 +02:00
ilmich
2a150f7978 altadefinizione: fixed episode scraper 2024-06-15 11:47:14 +02:00
ilmich
125e62e763 supervideo: fix url 2024-06-07 17:50:30 +02:00
github-actions[bot]
b8a2ea0dc4 Aggiornamento domini 2024-05-31 17:39:13 +00:00
github-actions[bot]
2f6c6cf453 Aggiornamento domini 2024-05-27 17:36:27 +00:00
Timmy89
6bc86936b2 Aggiornamento domini 2024-05-26 22:47:01 +02:00
ilmich
404c9558eb altadefinizione: fix scraper 2024-05-25 08:53:01 +02:00
ilmich
7ce8acd5eb fix SC pagination 2024-05-23 19:50:09 +02:00
ilmich
2f4edf4d79 Fix SWCS 2024-05-23 10:06:47 +02:00
ilmich
6c5746a2ad Fix SCWS 2024-05-23 09:54:17 +02:00
Alhaziel01
521f168ab9 Fix AnimeUnity e SCWS 2024-05-16 19:26:44 +02:00
github-actions[bot]
26e5fb068e Aggiornamento domini 2024-05-10 17:37:11 +00:00
ilmich
895b81edb7 hd4me: fix channel 2024-05-10 09:57:22 +02:00
github-actions[bot]
412025c514 Aggiornamento domini 2024-05-06 17:37:23 +00:00
marco
29915fa6e4 altadefinizione: episodios con scrape 2024-04-28 17:26:56 +02:00
ilmich
48fd712f81 downloads: fix when autoplay is enabled 2024-04-27 20:41:54 +02:00
ilmich
c8ffa002a3 support: set movie icon for saghe 2024-04-27 12:16:58 +02:00
ilmich
430b7174bf altadefinizione: fix channel 2024-04-27 09:15:44 +02:00
ilmich
251d7f2687 mediasetplay: revised channel menu 2024-04-26 08:09:07 +02:00
ilmich
c8047932e2 mediasetplay: fix channel 2024-04-24 17:31:46 +02:00
ilmich
f6e2410a2d supervideo: fix url 2024-04-24 14:34:13 +02:00
ilmich
f84527c700 altadefinizione01: channel fix 2024-04-24 11:17:21 +02:00
ilmich
f7e467c23a voe: fix media url 2024-04-24 08:08:07 +02:00
github-actions[bot]
1f160b96f9 Aggiornamento domini 2024-04-22 17:36:13 +00:00
ilmich
6c08f820e6 raiplay: fix drm contents 2024-04-18 07:24:14 +02:00
Timmy89
cc07517afb Disabilitato filmstreaming 2024-04-16 08:57:22 +02:00
github-actions[bot]
72f850ef3b Aggiornamento domini 2024-04-11 17:37:36 +00:00
ilmich
26c8122500 fix domain 2024-04-06 17:40:57 +02:00
ilmich
1b7fc47781 updated servers 2024-04-06 00:05:16 +02:00
ilmich
db0802f5bc discoveryplus: fix for some programs 2024-04-05 23:30:35 +02:00
github-actions[bot]
3ce79ced23 Aggiornamento domini 2024-03-22 17:36:33 +00:00
Timmy89
8f98b6486a Update maxstream.json 2024-03-22 13:42:56 +01:00
TheHacker66
ef1c9a7736 Fix maxstream su cineblog01 (#485) 2024-03-21 19:39:49 +01:00
marco
8150bace6c Rimosso anonfiles dai provider per i file di log 2024-03-21 19:25:21 +01:00
ilmich
987755c058 added lulustream server 2024-03-19 19:27:22 +01:00
marco
a44c567ad7 Header di httptools al lettore di kodi 2024-03-18 20:38:42 +01:00
github-actions[bot]
74c43e5755 Aggiornamento domini 2024-03-18 17:37:53 +00:00
ilmich
cc5619d7b2 fix toonitalia and uprot 2024-03-17 19:30:03 +01:00
Alhaziel01
58c402bcc6 Poster di default 2024-03-17 11:21:03 +01:00
ilmich
575629a3ac toonitalia: fix content type 2024-03-17 08:35:15 +01:00
github-actions[bot]
8d72b692a4 Aggiornamento domini 2024-03-16 17:36:32 +00:00
ilmich
41e6e87115 toonitalia: fix menu 2024-03-16 17:53:33 +01:00
ilmich
75b3db40c4 toonitalia: fix menu and icons 2024-03-16 17:04:27 +01:00
marco
28e811b576 Nuovi proxy CF 2024-03-16 13:40:02 +01:00
TheHacker66
3f1351e11b Fix maxstream & uprot.net (#482) 2024-03-16 11:22:16 +01:00
ilmich
913b8d7bed mixdrop: fix redirection 2024-03-15 18:34:13 +01:00
ilmich
72de374f9e toonitalia: added serie tv 2024-03-14 12:49:43 +01:00
ilmich
272f0b68e7 toonitalia: fix channel 2024-03-14 12:34:00 +01:00
ilmich
8b8105adef italiafilm: fix year for tmdb 2024-03-13 18:34:07 +01:00
ilmich
a9992b9ea6 platformcode: fix some warning and populate also manifest_headers 2024-03-11 12:26:46 +01:00
ilmich
1ca9c7031c italiafilm: fix channel search 2024-03-09 08:19:05 +01:00
ilmich
68937da460 fix eurostreaming channel and small updates 2024-03-08 17:17:26 +01:00
github-actions[bot]
afe008ea89 Aggiornamento domini 2024-03-06 17:37:41 +00:00
ilmich
3a183b82f8 fix mixdrop and supervideo 2024-03-05 21:06:35 +01:00
github-actions[bot]
a172fe86f3 Aggiornamento domini 2024-03-05 17:36:34 +00:00
Timmy89
d484a64fb2 Aggiornamento domini 2024-03-05 07:49:57 +01:00
github-actions[bot]
299327d47f Aggiornamento domini 2024-02-29 17:36:24 +00:00
Timmy89
bf2e80dbcd Merge pull request #479 from ilmich/fix-altadefinizione01
altadefinizione01: fix dominio
2024-02-29 00:26:52 +01:00
Timmy89
79efa0a193 Merge pull request #480 from ilmich/fix-altadefinzione-redirection
altadefizione: fix url redirection
2024-02-29 00:24:31 +01:00
ilmich
cea5feb59d altadefizione: fix url redirection 2024-02-28 22:05:20 +01:00
ilmich
9d28622ce8 altadefinizione01: fix dominio 2024-02-28 21:24:09 +01:00
Timmy89
be05eb6ec3 Fix trakt 2024-02-28 14:14:35 +01:00
Timmy89
ae00b017a8 Merge pull request #478 from ilmich/select-dns-provider
resolverdns: added select dns provider option
2024-02-27 10:24:00 +01:00
github-actions[bot]
b5e2b26f9f Aggiornamento domini 2024-02-26 17:36:33 +00:00
ilmich
86768ed294 resolverdns: added select dns provider option 2024-02-25 19:41:35 +01:00
Timmy89
ca3fb3e7ff Aggiornamento domini 2024-02-25 19:27:55 +01:00
Timmy89
d5c22b2043 Aggiornamento domini 2024-02-25 19:05:01 +01:00
Timmy89
1c6069eba5 Merge pull request #475 from ilmich/fix-eurostreaming
eurostreaming: fix scraper and re-enable channel
2024-02-25 18:54:43 +01:00
Timmy89
d24eced956 Merge pull request #476 from ilmich/urlshortenit
unshortenit: fix clicca.cc and added safego.cc
2024-02-25 18:54:33 +01:00
Timmy89
e3cf5c6e5d Merge pull request #477 from ilmich/another-mixdrop-path
mixdrop: include another path
2024-02-25 18:54:22 +01:00
ilmich
ca1159e163 mixdrop: include another path 2024-02-25 14:17:37 +01:00
ilmich
f1f8330419 unshortenit: fix clicca.cc and added safego.cc 2024-02-25 14:07:47 +01:00
ilmich
22159f5f28 eurostreaming: fix scraper and re-enable channel 2024-02-25 13:56:43 +01:00
ilmich
cd15000d71 resolverdns: better exception handling (#472)
* resolverdns: better exception handling
2024-02-22 20:22:14 +01:00
Timmy89
aa501e2f7d Merge pull request #474 from ilmich/fix-mediasetplay-episodes
mediasetplay: fixed TV series episode list
2024-02-21 16:15:19 +01:00
ilmich
9bed2d29c9 mediasetplay: fixed TV series episode list 2024-02-21 13:00:57 +01:00
github-actions[bot]
ec5a56f91e Aggiornamento domini 2024-02-20 17:38:14 +00:00
Timmy89
2c8dd243a6 Aggiornamento domini 2024-02-20 17:39:43 +01:00
Timmy89
7e5964d840 FIx correzioni per kodi su raspberry pi 2024-02-20 16:47:16 +01:00
Timmy89
b9aed889af Aggiornamento domini 2024-02-20 16:39:18 +01:00
Timmy89
511f95298d FIx correzioni per kodi su raspberry pi 2024-02-20 16:26:05 +01:00
Timmy89
b6c81c8b4e FIx correzioni per kodi su raspberry pi 2024-02-20 16:23:39 +01:00
marco
559ae1edd2 correzioni per kodi su raspberry pi 2024-02-19 20:26:32 +01:00
ilmich
bdc025b87d altadefinizione: added saga section (#467) 2024-02-12 20:06:43 +01:00
ilmich
2acd018503 httptools: resolverdns refactored (#466) 2024-02-05 20:52:34 +01:00
Timmy89
dfff40552d Merge pull request #462 from ilmich/fix-doodstream
fix doodstream
2024-01-31 17:39:33 +01:00
ilmich
09036d4d59 raiplay: switch to inputstream adaptive (#463) 2024-01-29 20:13:50 +01:00
ilmich
32f6781af5 fix useragent (#459) 2024-01-29 20:12:44 +01:00
ilmich
b96b63448c Update request urllib3 (#464)
* requests: updated to version 2.27.1

* urllib3: updated to version 1.26.18
2024-01-29 20:12:20 +01:00
ilmich
803b77b9b7 cloudscraper: disable tls1.2 2024-01-28 09:03:14 +01:00
ilmich
6de3ae422c fix doodstream 2024-01-27 09:29:02 +01:00
ilmich
349752a380 mixdrop: add another domain (#458) 2024-01-22 19:14:59 +01:00
Timmy89
6421ba1229 disattivato casacinema 2024-01-20 09:36:13 +01:00
Timmy89
529c6f3669 Disattivato cinemalibero 2024-01-20 09:26:44 +01:00
Michele Zuccalà
ae34d43429 altadefinizione: fix title, lang and others (#456) 2024-01-18 19:55:00 +01:00
Michele Zuccalà
03a332eb75 service: fix ua updater (#457) 2024-01-17 20:13:36 +01:00
Timmy89
9b25357d46 Aggiornata versione ua 2024-01-16 20:59:03 +01:00
github-actions[bot]
111a5a58d5 Aggiornamento domini 2024-01-16 17:37:12 +00:00
Michele Zuccalà
3e233c0658 platformtools: fix user agent for hls playlist and hls key (#454) 2024-01-13 15:19:33 +01:00
github-actions[bot]
8d7867d084 Aggiornamento domini 2024-01-10 17:36:54 +00:00
Timmy89
4328677965 Aggiornamento domini 2024-01-10 03:32:10 +01:00
Timmy89
018062037b Revert DoodStream 2024-01-10 00:47:38 +01:00
github-actions[bot]
1f3eea05ef Aggiornamento domini 2024-01-08 17:36:44 +00:00
Timmy89
d1d991b887 Fix DoodStream 2024-01-07 18:30:49 +01:00
github-actions[bot]
95251821f1 Aggiornamento domini 2024-01-06 17:36:32 +00:00
Timmy89
44109843af Aggiornamento domini 2024-01-06 17:08:15 +01:00
Timmy89
3ba2b28ef7 Aggiornamento domini 2024-01-06 16:52:29 +01:00
Pasquale Pizzuti
f1e7263a07 Update streamingcommunity.py old python compatibility (#450) 2024-01-05 13:59:17 +01:00
Michele Zuccalà
2191660bac fix altadefinizione (#452) 2024-01-05 12:08:23 +01:00
Michele Zuccalà
6ddec976b9 optimize html_uniform (#449) 2024-01-05 11:54:38 +01:00
github-actions[bot]
a3999d2746 Aggiornamento domini 2023-12-15 17:36:34 +00:00
github-actions[bot]
2fe75c1470 Aggiornamento domini 2023-12-01 17:36:46 +00:00
marco
e4edd5872d Fix animeunity 2023-11-25 19:18:51 +01:00
marco
7ab21e01c5 Fix auto SC 2023-11-23 20:07:07 +01:00
github-actions[bot]
c3fa9f22aa Aggiornamento domini 2023-11-22 17:36:16 +00:00
Michele Zuccalà
2a1394767c Fix altadefinizione01 (#445) 2023-11-17 20:35:26 +01:00
github-actions[bot]
647406ea5b Aggiornamento domini 2023-11-17 17:36:21 +00:00
Michele Zuccalà
43f343555d Add another mixdrop domain regexp (#443) 2023-11-14 20:30:34 +01:00
Timmy89
5b04e52af4 Fix streamingcommunity @ilmich 2023-11-08 19:28:45 +01:00
Timmy89
880b228dee Aggiornamento dominio Mixdrop 2023-11-03 20:44:11 +01:00
github-actions[bot]
f4f0dbfe97 Aggiornamento domini 2023-10-27 17:36:30 +00:00
github-actions[bot]
d6c0efaba2 Aggiornamento domini 2023-10-25 17:37:00 +00:00
marco
bbcc6e126e Fix altadefinizione, film in videoteca 2023-10-24 19:45:38 +02:00
github-actions[bot]
280dc6f217 Aggiornamento domini 2023-10-23 17:38:10 +00:00
marco
7ae3f7e30e Fix altadefinizione (tranne sez. agg.), aggiunto wolfstream 2023-10-22 15:01:58 +02:00
github-actions[bot]
956526affc Aggiornamento domini 2023-10-20 17:37:51 +00:00
github-actions[bot]
f44ab32bab Aggiornamento domini 2023-10-19 17:36:34 +00:00
github-actions[bot]
1ab05e540c Aggiornamento domini 2023-10-15 17:36:05 +00:00
github-actions[bot]
27d06bf875 Aggiornamento domini 2023-10-02 17:36:21 +00:00
github-actions[bot]
a415644995 Aggiornamento domini 2023-09-29 17:36:25 +00:00
github-actions[bot]
3d480a9b15 Aggiornamento domini 2023-09-28 17:36:23 +00:00
Timmy89
682e9e8b91 Riabilitato Streamingita 2023-09-27 20:56:09 +02:00
Timmy89
3b7f277270 Aggiornamento domini 2023-09-27 20:54:54 +02:00
marco
e14f01ec80 Fix parziale altadefinizione, corretto catastrophic backtraking su guardaseriecam (in alcuni casi) 2023-09-26 20:49:45 +02:00
enricodarodda
08eb178410 Fix Resume Playback Function
Updated platformtools.py fixing "resume_playback" function when the Skin Resume Menu is set. In particular, the function now matches correctly the selected option of the dialog with the corresponding action triggered.
2023-09-25 21:59:16 +02:00
github-actions[bot]
46c191c725 Aggiornamento domini 2023-09-14 17:36:53 +00:00
github-actions[bot]
3dbf1ee755 Aggiornamento domini 2023-09-12 17:36:39 +00:00
github-actions[bot]
7faf8c726a Aggiornamento domini 2023-09-09 17:36:25 +00:00
Timmy89
604896083c Disattivato StreamingITA 2023-08-21 01:43:25 +02:00
Timmy89
afcd204167 CB01 Aggiunta sezione film Italiani 2023-08-21 00:35:42 +02:00
github-actions[bot]
14b7d8fefa Aggiornamento domini 2023-08-15 17:33:59 +00:00
marco
4d2968a308 decoratore scrape, aggiunto parametro flags e flagsBlock per modifica flag regex 2023-08-10 13:19:29 +02:00
github-actions[bot]
074adf7e73 Aggiornamento domini 2023-07-28 17:34:22 +00:00
marco
95f28f0187 Fix ilcorsaronero 2023-07-28 11:13:31 +02:00
github-actions[bot]
5b55e3c9f2 Aggiornamento domini 2023-07-21 17:40:08 +00:00
github-actions[bot]
036252990f Aggiornamento domini 2023-07-17 17:35:12 +00:00
marco
9aed9468d7 Fix menu 1337x 2023-07-17 12:51:17 +02:00
marco
75b8e42fd8 StreamSB nuovi domini 2023-07-17 12:14:37 +02:00
Pasquale Pizzuti
29c483618f Aggiornamento domini (#430) 2023-07-17 11:51:31 +02:00
github-actions[bot]
fb74d5ccb3 Aggiornamento domini 2023-07-14 17:38:57 +00:00
Timmy89
d4bbb01b9c Prova dipendenze opzionali 2023-07-13 22:10:10 +02:00
github-actions[bot]
14872314b6 Aggiornamento domini 2023-07-13 17:40:48 +00:00
github-actions[bot]
b38631d19b Aggiornamento domini 2023-07-08 17:43:04 +00:00
github-actions[bot]
34e0cde285 Aggiornamento domini 2023-07-07 17:43:46 +00:00
github-actions[bot]
7c09dba22a Aggiornamento domini 2023-07-06 17:45:15 +00:00
github-actions[bot]
6314317766 Aggiornamento domini 2023-07-05 17:42:51 +00:00
github-actions[bot]
0d218b592e Aggiornamento domini 2023-07-01 17:38:21 +00:00
marco
57d2aaadb3 KoD 1.7.7 2023-06-30 19:38:58 +02:00
Alhaziel01
c97c70a00e Revert Youtube 2023-06-26 16:37:23 +02:00
Alhaziel01
141e24e8fa Fix Metalivideo 2023-06-26 11:52:58 +02:00
Alhaziel01
c1c2aa6f0c Test Fix Ricerca globale 2023-06-26 11:31:30 +02:00
Alhaziel01
b3ebe95278 Fix Tunein 2023-06-26 11:31:16 +02:00
Timmy89
f913513d47 Disattivato AnimeForce 2023-06-23 20:33:27 +02:00
Alhaziel01
03166d3226 Italia Film icona Sub ITA 2023-06-23 19:53:48 +02:00
Alhaziel01
b2288673dc Selezione Tipologia Visualizzazione Riprendi da (Impostazioni/Riproduzione) 2023-06-23 19:44:35 +02:00
Alhaziel01
7431f78b58 Fix ToonItalia 2023-06-23 18:56:36 +02:00
Alhaziel01
58ca87ce64 Fix AnimeWorld 2023-06-23 18:26:15 +02:00
Alhaziel01
60807b637b Fix Httptools 2023-06-23 18:16:14 +02:00
Alhaziel01
93f8386df6 Fix AnimeWorld 2023-06-23 18:06:45 +02:00
Alhaziel01
96acd612d6 Fix LA7 2023-06-23 17:40:21 +02:00
Alhaziel01
8400b15c60 Merge branch 'master' of https://github.com/kodiondemand/addon 2023-06-23 11:44:49 +02:00
Alhaziel01
e5bb7fbca9 Fix DooD Stream 2023-06-23 11:44:43 +02:00
github-actions[bot]
c85f0e28be Aggiornamento domini 2023-06-22 17:38:46 +00:00
Alhaziel01
68048f1d61 Fix Metalvideo e Youtube (Necessarie API personali) 2023-06-22 18:30:18 +02:00
Alhaziel01
d42310a1ac Fix Cinemalibero 2023-06-22 17:38:17 +02:00
Alhaziel01
1ca2b1e981 Merge branch 'master' of https://github.com/kodiondemand/addon 2023-06-22 17:16:14 +02:00
Alhaziel01
76550bcebb Fix StreamSB 2023-06-22 17:16:00 +02:00
Alhaziel01
e1ce48e859 aggiunto server StreamHide 2023-06-22 17:15:50 +02:00
Alhaziel01
8cc7cd3ae6 hls per Filemoon 2023-06-22 17:15:30 +02:00
Alhaziel01
db36530e97 Fix Animeunity 2023-06-22 17:14:52 +02:00
marco
84b7e9e5f2 guardaseriecam: aggiunto dropload 2023-06-21 19:51:47 +02:00
github-actions[bot]
f66c75a0e0 Aggiornamento domini 2023-06-20 17:43:10 +00:00
Timmy89
b4b2c4aa43 Disattivato Animealtadefinizione 2023-06-19 23:18:51 +02:00
Alhaziel01
7d92a9bc41 RAi Play Nuove Sezioni 2023-06-19 18:30:37 +02:00
Alhaziel01
a01a097b88 SCWS always displays the resolution 2023-06-19 09:05:20 +02:00
Alhaziel01
18ee7b3c17 Fix Risoluzioni SCWS 2023-06-18 21:58:21 +02:00
Alhaziel01
62d63483d4 Fix SCWS 2023-06-18 19:25:44 +02:00
github-actions[bot]
5d611224c6 Aggiornamento domini 2023-06-17 17:38:55 +00:00
Alhaziel01
17d4615015 Fix Aggiunta alla Videoteca anime 2023-06-17 17:59:56 +02:00
Alhaziel01
f3127f54f5 Fix SCWS 2023-06-17 17:26:33 +02:00
Alhaziel01
b7e28501a7 StreamingCommunity WS - Sottotitoli e banner "Prossimamente" 2023-06-17 16:41:49 +02:00
marco
58e01dc49d Merge remote-tracking branch 'origin/master' 2023-06-17 11:44:12 +02:00
marco
769306faa3 Streamingcommunity nuovo player 2023-06-17 11:44:03 +02:00
Timmy89
14660b5aaa CB01 aggiunto tutti i film popolari e distinzione tra popolari per genere. 2023-06-15 23:05:31 +02:00
Timmy89
a7dbe4f287 Popolari per Generi, Tutti i film popolari. 2023-06-15 22:52:51 +02:00
github-actions[bot]
839885c5c7 Aggiornamento domini 2023-06-09 17:38:50 +00:00
marco
14488c4c54 Fix streamingcommunity 2023-05-30 20:17:47 +02:00
marco
0cfe48cc74 Fix supervideo 2023-05-17 20:57:01 +02:00
marco
9055e2ac02 Merge remote-tracking branch 'origin/master' 2023-05-17 20:46:29 +02:00
marco
b46cec8041 Fix ilcorsaronero 2023-05-17 20:46:14 +02:00
github-actions[bot]
aabaa8d78c Aggiornamento domini 2023-05-13 17:34:24 +00:00
Timmy89
0333e1262d Aggiornamento domini 2023-05-13 18:57:38 +02:00
github-actions[bot]
d628d9108d Aggiornamento domini 2023-05-11 17:34:38 +00:00
Timmy89
66a79e4e21 Aggiornamento domini 2023-05-10 02:29:26 +02:00
github-actions[bot]
0a25af3aba Aggiornamento domini 2023-05-06 17:34:23 +00:00
Timmy89
c59bb0da6f Aggiornamento domini 2023-05-06 17:06:09 +02:00
truemich
f65d05b52f resume_playback: use kodi api for context menu for consistency with the skin in use (#422) 2023-05-04 20:32:38 +02:00
github-actions[bot]
9af9a564f9 Aggiornamento domini 2023-05-04 17:34:21 +00:00
github-actions[bot]
a88e915d0f Aggiornamento domini 2023-05-01 17:36:41 +00:00
Timmy89
2a2e0d8c60 Aggiornamento domini 2023-05-01 16:27:54 +02:00
Timmy89
36be150ad4 Aggiornamento domini 2023-04-30 22:02:01 +02:00
Timmy89
a6f9413ee1 Aggiornamento domini 2023-04-30 21:47:02 +02:00
marco
ff4b428e1b Fix streamSB 2023-04-29 17:19:43 +02:00
marco
e19b5245d8 Fix stagioni mancanti filmpertutti 2023-04-26 21:58:10 +02:00
marco
29e27940d5 Fix sottosezioni CB01 2023-04-26 21:33:04 +02:00
marco
2717037824 Fix download da menu contestuale con canali singolo server 2023-04-26 21:23:48 +02:00
github-actions[bot]
cfc7ee7855 Aggiornamento domini 2023-04-23 17:34:34 +00:00
Timmy89
a507fa3143 Aggiornamento domini 2023-04-23 13:05:11 +02:00
github-actions[bot]
9d0fe1fdf7 Aggiornamento domini 2023-04-21 17:34:32 +00:00
Timmy89
f6bc183fba Aggiornamento domini 2023-04-21 12:38:13 +02:00
marco
bd61acb55f Refresh all'abilitazione del download 2023-04-11 21:17:22 +02:00
marco
6bf5f01442 Prova streamtape 2023-04-11 20:55:12 +02:00
marco
d5af2723b7 Downloader: sistemata finestra selezione, fix riproduzione da sezione videoteca e ottimizzazione 2023-04-11 20:51:58 +02:00
Timmy89
4ab3f80e05 Update italiafilm.py 2023-04-10 20:29:31 +02:00
Timmy89
4364ae20be Aggiunta sezione Film 2023-04-10 20:22:30 +02:00
github-actions[bot]
647abfc5b0 Aggiornamento domini 2023-04-10 17:34:38 +00:00
Timmy89
f20f223da0 Aggiornamento domini 2023-04-10 04:14:18 +02:00
Timmy89
5f12bdf049 Aggiornamento domini 2023-04-10 04:11:58 +02:00
Timmy89
f528dd9556 Aggiornamento domini 2023-04-10 04:08:10 +02:00
Timmy89
b611c4ca3a Piccolo aggiustamento CB01 2023-04-02 15:34:12 +02:00
Timmy89
990017a533 Fix novità CB01 2023-04-02 13:29:51 +02:00
Timmy89
1cdc11d84e Ripristinata sezione ultimi 100 film aggiunti CB01 2023-04-01 21:23:29 +02:00
github-actions[bot]
e40145fae2 Aggiornamento domini 2023-03-31 17:34:43 +00:00
github-actions[bot]
44903392e1 Aggiornamento domini 2023-03-28 17:34:56 +00:00
marco
89a5513852 Piccoli aggiustamenti italiafilm 2023-03-27 20:21:13 +02:00
syscallkill
184d497aec add italiafilm channel (#414) 2023-03-27 20:17:05 +02:00
github-actions[bot]
b1983b754b Aggiornamento domini 2023-03-27 17:35:40 +00:00
Timmy89
36665f517b Aggiornamento domini 2023-03-26 22:54:03 +02:00
marco
43526800bb Merge remote-tracking branch 'origin/master' 2023-03-25 10:35:50 +01:00
marco
e1c9cd232f Fix CF 2023-03-25 10:35:39 +01:00
github-actions[bot]
4263b76650 Aggiornamento domini 2023-03-24 17:34:52 +00:00
marco
24443db5ee Merge remote-tracking branch 'origin/master' 2023-03-23 20:35:18 +01:00
marco
fcb1ecfde7 Fix YT, sezione serietv raiplay 2023-03-23 20:35:09 +01:00
github-actions[bot]
49e22dbe3b Aggiornamento domini 2023-03-23 17:35:09 +00:00
github-actions[bot]
1433ee2a32 Aggiornamento domini 2023-03-21 17:34:52 +00:00
Timmy89
3b7beb6daf Ops 2023-03-21 13:14:21 +01:00
Timmy89
09be82638d Aggiornamento domini 2023-03-21 12:45:13 +01:00
marco
52aadb2352 Fix goodstream 2023-03-20 20:29:32 +01:00
marco
92aa849d16 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	channels.json
2023-03-20 19:52:40 +01:00
marco
fdfa364943 Fix Altadefinizione, casacinema e filmpertutti, streamsb. Nuovo dominio toonitalia.xyz (non ha sottosezioni) 2023-03-20 19:52:06 +01:00
github-actions[bot]
c1832406c3 Aggiornamento domini 2023-03-17 17:34:47 +00:00
Timmy89
a511eaa355 Aggiornamento domini 2023-03-17 09:33:05 +01:00
Timmy89
1bedea3214 Aggiornamento domini 2023-03-17 09:31:27 +01:00
github-actions[bot]
14c77d2d8d Aggiornamento domini 2023-03-15 17:35:58 +00:00
Timmy89
5ed63ea2ed Aggiornamento domini 2023-03-15 18:03:48 +01:00
marco
8a048464a4 CB01: rimosse sezioni non più esistenti 2023-03-13 21:15:37 +01:00
github-actions[bot]
14ce21a646 Aggiornamento domini 2023-03-07 17:36:13 +00:00
github-actions[bot]
39dbbc655e Aggiornamento domini 2023-03-03 17:34:43 +00:00
marco
9a821de508 Merge remote-tracking branch 'origin/master' 2023-03-02 20:47:19 +01:00
marco
14ee433eb5 Fix VVVVID, streamsb e nuovo server filemoon. Miglior passaggio info a trakt (se attivo) 2023-03-02 20:47:05 +01:00
github-actions[bot]
605b74e8f8 Aggiornamento domini 2023-03-01 17:36:58 +00:00
Timmy89
fc96554986 Aggiornamento domini 2023-02-28 21:10:27 +01:00
github-actions[bot]
24580fec0b Aggiornamento domini 2023-02-28 17:36:15 +00:00
marco
c1ce1abcae Fix casacinema 2023-02-20 20:07:47 +01:00
github-actions[bot]
2c294785da Aggiornamento domini 2023-02-17 17:34:34 +00:00
marco
9fb3b3c261 Merge remote-tracking branch 'origin/master' 2023-02-16 20:20:43 +01:00
marco
dc04b19ce7 Fix casacinema 2023-02-16 20:20:34 +01:00
Timmy89
c0f14dbe4f Fix SC 2023-02-16 19:17:52 +01:00
github-actions[bot]
1dfc394565 Aggiornamento domini 2023-02-16 17:35:03 +00:00
github-actions[bot]
11b6e8bc75 Aggiornamento domini 2023-02-12 17:34:54 +00:00
github-actions[bot]
1bf4acac39 Aggiornamento domini 2023-02-11 17:34:45 +00:00
marco
3e9a5813af Fix StreamSB 2023-02-11 13:39:10 +01:00
marco
74de895999 Prova tempdir per js2py 2023-02-07 20:03:53 +01:00
marco
a846c17e79 Log per streamtape 2023-02-07 19:31:03 +01:00
github-actions[bot]
5bf69c93b9 Aggiornamento domini 2023-02-01 17:35:11 +00:00
Timmy89
4fd7b80203 Update channels.json
Fix SC
2023-02-01 16:44:16 +01:00
marco
b1e46658f0 TMDb Python default su Kodi 20 2023-01-30 19:55:37 +01:00
marco
fcf3f8cba3 Fix vvvvid, rimosso animeuniverse(chiuso) 2023-01-28 11:20:56 +01:00
marco
09a5a07923 Fix vvvvid 2023-01-24 20:36:33 +01:00
marco
726e524c1f Merge remote-tracking branch 'origin/master' 2023-01-23 20:45:32 +01:00
marco
0eaada8ba4 Fix doodstream e opzioni di KoD (kodi 20) 2023-01-23 20:45:23 +01:00
github-actions[bot]
41e4a9f02d Aggiornamento domini 2023-01-21 17:34:36 +00:00
Timmy89
295d6560cc Update channels.json 2023-01-21 14:13:37 +01:00
Timmy89
9ec6f09ca3 Update channels.json 2023-01-21 14:13:15 +01:00
marco
36042ac2bc Merge remote-tracking branch 'origin/master' 2023-01-21 14:03:48 +01:00
marco
00c9a72966 Fix cinemalibero e SC 2023-01-21 14:03:41 +01:00
github-actions[bot]
13a14dd3e5 Aggiornamento domini 2023-01-20 17:34:22 +00:00
marco
2787c980db Fix animeunity, cinemalibero sezione anime 2023-01-19 20:27:23 +01:00
github-actions[bot]
ef018fce11 Aggiornamento domini 2023-01-19 17:34:53 +00:00
marco
f18aab9fa8 HexUpload download come streaming, aggiustamenti per cinemalibero 2022-12-30 13:37:27 +01:00
marco
f0ab97a6fd cinemalibero: niente link di download 2022-12-29 17:48:21 +01:00
marco
043f12afe8 Nuovo dominio streamingita 2022-12-29 16:47:15 +01:00
marco
f5a6384653 Migliorie cinemalibero e nuovo server HexUpload. Disattivato streamingita 2022-12-29 15:50:57 +01:00
marco
8982993835 Fix altadefinizione01 - alcuni server mancanti 2022-12-27 20:07:02 +01:00
marco
84e22ca681 Merge remote-tracking branch 'origin/master' 2022-12-20 20:05:47 +01:00
marco
54816418b3 Fix VVVVID 2022-12-20 20:05:40 +01:00
github-actions[bot]
8748cd39e9 Aggiornamento domini 2022-12-16 17:34:53 +00:00
github-actions[bot]
c77e6105ec Aggiornamento domini 2022-12-15 17:37:26 +00:00
Alhaziel01
66f562b5f6 Fix Riproduzione AniPlay 2022-12-15 15:47:15 +01:00
Alhaziel01
2f37557f97 Fix Videoteca Aniplay 2022-12-15 12:14:47 +01:00
github-actions[bot]
265f00c20d Aggiornamento domini 2022-12-14 17:35:29 +00:00
Alhaziel01
7cacbf1b22 Fix Casacinema 2022-12-14 11:13:07 +01:00
Alhaziel01
7bf554d333 Fix AniPlay 2022-12-14 10:44:52 +01:00
mac12m99
e13b8fc202 aggiornamento domini 2022-12-13 19:58:47 +01:00
marco
e91e29b95d Aggiornata libreria js2py 2022-12-04 14:33:39 +01:00
marco
d7ab122d31 Riattivato filmstreaming, fix minori 2022-12-04 14:33:15 +01:00
marco
17f8cab8d7 Fix dropload, filmpertutti (sezione aggiornamenti), disattivato filmstreaming (da errore anche da browser) 2022-12-03 14:58:49 +01:00
marco
5c56c5e1ec Fix vvvvid 2022-12-03 11:29:24 +01:00
Alhaziel01
bb49bf1405 Fix VOE 2022-12-02 12:45:51 +01:00
Alhaziel01
b98ac40d66 Fix Cinemalibero 2022-12-02 11:00:15 +01:00
Alhaziel01
d44f23497e Merge branch 'master' of https://github.com/kodiondemand/addon 2022-12-02 10:52:54 +01:00
Alhaziel01
0536c4dfde Fix Cinemalibero 2022-12-02 10:52:51 +01:00
Alhaziel01
237a8cad77 Fix Cinemalibero 2022-12-02 10:43:01 +01:00
Alhaziel01
e78e0006b0 Fix Ricerca in Altadefinizione 2022-12-02 10:17:51 +01:00
Alhaziel01
e94885cedc Eurostreaming - Momentaneamente Disabilitato 2022-12-02 10:07:11 +01:00
Alhaziel01
75b2937c41 Fix Tmdb - Aggiunta alla videoteca di Film in Collezione 2022-12-02 09:52:05 +01:00
marco
75fd8e04c7 Merge remote-tracking branch 'origin/master' 2022-11-24 20:37:35 +01:00
marco
9ca822fb7b Proxy anti CF 2022-11-24 20:37:28 +01:00
github-actions[bot]
b625462cbc Aggiornamento domini 2022-11-24 17:35:59 +00:00
marco
09d29418b9 Merge remote-tracking branch 'origin/master' 2022-11-21 18:54:47 +01:00
marco
340f202c6d Nuovo dominio altadefinizione01 2022-11-21 18:54:38 +01:00
github-actions[bot]
3fe8478a00 Aggiornamento domini 2022-11-17 17:39:21 +00:00
github-actions[bot]
4a37dc5207 Aggiornamento domini 2022-11-16 17:38:34 +00:00
Alhaziel01
43fc32c5cd - Fix Finestra selezione Qualità
- Fix Redirect StreamingCommunity
2022-11-16 16:59:15 +01:00
Alhaziel01
1f1bf35493 StreamingCommunity Ripristinato Messaggio "Prossimamente" 2022-11-15 19:14:17 +01:00
marco
2968299354 Streamingcommunity: non riprodurre ultimo contenuto quando il selezionato uscirà prossimamente 2022-11-14 20:59:32 +01:00
github-actions[bot]
136782b5fc Aggiornamento domini 2022-11-13 17:39:19 +00:00
marco
5d5080ca7f Prova test-suite 2022-11-10 20:53:13 +01:00
marco
1c322fc604 Prova test-suite 2022-11-09 20:39:28 +01:00
marco
fba9e0f007 Prova test-suite 2022-11-09 20:37:58 +01:00
marco
f78a60d612 Prova test-suite 2022-11-09 20:19:23 +01:00
marco
43d43543b7 Prova test-suite 2022-11-09 20:12:13 +01:00
marco
7e1769bfe5 Prova test-suite 2022-11-08 18:55:32 +01:00
marco
9c07dceab7 Prova test-suite 2022-11-07 20:21:40 +01:00
marco
54bab829b5 Merge remote-tracking branch 'origin/master' 2022-11-07 20:12:41 +01:00
marco
204ae57e2b Fix ricerca casacinema 2022-11-07 20:12:35 +01:00
github-actions[bot]
770e819ad6 Aggiornamento domini 2022-11-07 17:47:11 +00:00
marco
b2ec377d56 Fix filmpertutti serietv, server VUP chiuso 2022-11-06 17:26:11 +01:00
marco
e2f195ebd3 animeuniverse è ora AnimeHDitalia, nascosti gli episodi non ancora caricati 2022-11-05 14:22:00 +01:00
Alhaziel01
c94b32da26 VVVVID Fix contenuti con DRM 2022-11-03 18:18:16 +01:00
Alhaziel01
5ff98c23ce Fix Rinumerazione Toonitalia 2022-10-31 10:57:59 +01:00
Alhaziel01
707d8c7fd1 Discovery + [free] - Aggiunto Warner TV 2022-10-31 09:49:26 +01:00
Alhaziel01
6abf9d0d09 Fix Ripresa punto di visione 2022-10-28 18:52:58 +02:00
Alhaziel01
88ccec0b15 Test chiusura globalsearch 2022-10-25 20:06:59 +02:00
Alhaziel01
0a4cba7489 traceback alla chiusura di globalsearch 2022-10-25 19:36:46 +02:00
Alhaziel01
b11fb3dec3 Fix Chiusura Globalsearch 2022-10-25 19:15:50 +02:00
Alhaziel01
84951a6801 Fix Autoplay e Altadefinizione 2022-10-25 15:49:20 +02:00
Alhaziel01
84bc6f6135 Fix Play in ricerca con un unico server 2022-10-25 15:11:47 +02:00
Alhaziel01
94e107e17c Fix Autoplay e Altadefinizione 2022-10-25 09:05:49 +02:00
Alhaziel01
8ae182536c Animeunity, rimosso server secondario 2022-10-24 10:27:56 +02:00
Alhaziel01
f545d74a75 Fix gestione finestra server 2022-10-24 10:27:32 +02:00
Alhaziel01
b23480664b Fix voe, streamsb 2022-10-24 10:27:13 +02:00
marco
8648014368 Fix streamlare, streamsb, toonitalia e modifiche interne 2022-10-23 20:42:43 +02:00
github-actions[bot]
3da43a418b Aggiornamento domini 2022-10-22 17:52:59 +00:00
github-actions[bot]
bb9ec6dcdc Aggiornamento domini 2022-10-20 18:07:11 +00:00
Alhaziel01
d78abb98ee Fix AccuRadio 2022-10-20 19:24:46 +02:00
Alhaziel01
2ef54dd4be Fix Navigazione in Ricerca globale se un video è in riproduzione 2022-10-20 19:16:40 +02:00
marco
c30e1311d6 Nuovo server: dropload e fix puntate sfasate eurostreaming_actor 2022-10-16 17:16:14 +02:00
marco
61dac80edd Nuovo dominio shotener 2022-10-13 21:07:32 +02:00
marco
e059f6e4c6 Aggiornamento domino eurostreaming 2022-10-13 20:39:24 +02:00
Alhaziel01
cd7ecd2c48 Fix download Elementum 2022-10-13 10:50:48 +02:00
Alhaziel01
9128f26657 Fix SetreamSB 2022-10-13 10:11:23 +02:00
Alhaziel01
183c285b6f Fix Pluto TV 2022-10-12 20:32:46 +02:00
Alhaziel01
6a0a46dcff Aggiornamento StreamingCommunity 2022-10-05 18:24:35 +02:00
Alhaziel01
3e019573c9 Fix SC 2022-10-03 09:23:01 +02:00
github-actions[bot]
22bfc53eaa Aggiornamento domini 2022-10-02 17:50:15 +00:00
Alhaziel01
04639802d5 Fix SC 2022-10-01 19:27:27 +02:00
Alhaziel01
46658a2595 Fix SC 2022-10-01 19:12:46 +02:00
Alhaziel01
650489ac46 Fix Aggiunta in Videoteca Film o Serie TV che cominciano con il punto 2022-10-01 16:16:26 +02:00
Alhaziel01
abdfd25011 Fix SC e AU 2022-10-01 15:57:16 +02:00
Alhaziel01
ee837ace97 Fix SC 2022-10-01 12:25:17 +02:00
1250 changed files with 6849 additions and 2979 deletions

View File

@@ -0,0 +1,34 @@
name: Update channel domains
on:
workflow_dispatch:
schedule:
- cron: '30 17 * * *'
push:
branches:
- master
jobs:
update:
runs-on: ubuntu-latest
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: '3.7'
architecture: 'x64'
- name: Install dependencies
run: pip install requests
- name: Update domains
run: python tools/updateDomains.py
- name: Commit & Push changes
uses: actions-js/push@master
with:
message: "Aggiornamento domini"
branch: "master"
github_token: ${{ secrets.API_TOKEN_GITHUB }}

0
.github/ISSUE_TEMPLATE/canale-non-funzionante.md vendored Normal file → Executable file
View File

0
.github/ISSUE_TEMPLATE/server-non-funzionante.md vendored Normal file → Executable file
View File

0
.github/ISSUE_TEMPLATE/test-canale.md vendored Normal file → Executable file
View File

13
.github/workflows/tests.yml vendored Normal file → Executable file
View File

@@ -1,28 +1,25 @@
name: Test Suite name: Test Suite
on: on:
workflow_dispatch: workflow_dispatch:
schedule:
- cron: '00 15 * * *'
jobs: jobs:
tests: tests:
runs-on: ubuntu-latest runs-on: macos-latest
steps: steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }} - name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1 uses: actions/setup-python@v4.3.0
with: with:
python-version: 3.8 python-version: 3.9
- name: Run tests - name: Run tests
run: | run: |
export KODI_INTERACTIVE=0
./tests/run.sh ./tests/run.sh
- name: Commit & Push changes - name: Commit & Push changes
uses: dmnemec/copy_file_to_another_repo_action@v1.0.4 uses: dmnemec/copy_file_to_another_repo_action@main
env: env:
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }} API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }}
with: with:

0
.github/workflows/updateDomains.yml vendored Normal file → Executable file
View File

0
.github/workflows/updateDomainsStable.yml vendored Normal file → Executable file
View File

2
.gitignore vendored Normal file → Executable file
View File

@@ -9,3 +9,5 @@ __pycache__/
.vscode/settings.json .vscode/settings.json
bin/ bin/
lib/abi lib/abi
tests/home/
reports/

0
CONTRIBUTING.md Normal file → Executable file
View File

0
LICENSE Normal file → Executable file
View File

0
README.md Normal file → Executable file
View File

0
__init__.py Normal file → Executable file
View File

12
addon.xml Normal file → Executable file
View File

@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="plugin.video.kod" name="Kodi on Demand" version="1.7.7" provider-name="KoD Team">
<addon id="plugin.video.kod" name="Kodi on Demand BETA" version="1.7.6" provider-name="KoD Team">
<requires> <requires>
<!-- <import addon="script.module.libtorrent" optional="true"/> --> <!-- <import addon="script.module.libtorrent" optional="true"/> -->
<import addon="metadata.themoviedb.org"/> <import addon="metadata.themoviedb.org" optional="true"/>
<import addon="metadata.tvshows.themoviedb.org"/> <import addon="metadata.tvshows.themoviedb.org" optional="true"/>
<!-- <import addon="metadata.tvdb.com"/> --> <!-- <import addon="metadata.tvdb.com"/> -->
<import addon="script.module.web-pdb" />
</requires> </requires>
<extension point="xbmc.python.pluginsource" library="default.py"> <extension point="xbmc.python.pluginsource" library="default.py">
<provides>video</provides> <provides>video</provides>
@@ -29,9 +28,6 @@
<screenshot>resources/media/screenshot-3.png</screenshot> <screenshot>resources/media/screenshot-3.png</screenshot>
</assets> </assets>
<news>- fix di routine ai canali/server <news>- fix di routine ai canali/server
- disabilitati cb01anime e tantifilm
- aggiunta opzione "mostra server" nel menu contestuale della libreria
- più opzioni per quanto riguarda l'aggiornamento della videoteca
</news> </news>
<description lang="it">Naviga velocemente sul web e guarda i contenuti presenti</description> <description lang="it">Naviga velocemente sul web e guarda i contenuti presenti</description>
<disclaimer>[COLOR red]The owners and submitters to this addon do not host or distribute any of the content displayed by these addons nor do they have any affiliation with the content providers.[/COLOR] <disclaimer>[COLOR red]The owners and submitters to this addon do not host or distribute any of the content displayed by these addons nor do they have any affiliation with the content providers.[/COLOR]

44
channels.json Normal file → Executable file
View File

@@ -1,38 +1,38 @@
{ {
"direct": { "direct": {
"altadefinizione01": "https://www.altadefinizione01.sbs", "altadefinizione01": "https://altadefinizione01.pet",
"animealtadefinizione": "https://www.animealtadefinizione.it", "animealtadefinizione": "http://ww38.animealtadefinizione.it",
"animeforce": "https://www.animeforce.it", "animeforce": "https://www.animeforce.it",
"animesaturn": "https://www.animesaturn.in", "animesaturn": "https://www.animesaturn.cx",
"animeunity": "https://www.animeunity.tv", "animeunity": "https://www.animeunity.tv",
"animeuniverse": "https://www.animeuniverse.it", "animeworld": "https://www.animeworld.so",
"animeworld": "https://www.animeworld.tv", "aniplay": "https://aniplay.co",
"aniplay": "https://aniplay.it", "casacinema": "https://casacinema.media",
"casacinema": "https://www.casacinema.lol", "cb01anime": "https://cb01new.one",
"cb01anime": "https://www.cineblog01.red",
"cinemalibero": "https://cinemalibero.cafe", "cinemalibero": "https://cinemalibero.cafe",
"cinetecadibologna": "http://cinestore.cinetecadibologna.it", "cinetecadibologna": "http://cinestore.cinetecadibologna.it",
"dinostreaming": "https://dinostreaming.it",
"discoveryplus": "https://www.discoveryplus.com", "discoveryplus": "https://www.discoveryplus.com",
"dreamsub": "https://www.animeworld.tv", "dreamsub": "https://www.animeworld.so",
"eurostreaming": "https://eurostreaming.party", "eurostreaming": "https://eurostreaming.lifestyle",
"eurostreaming_actor": "https://eurostreaming.actor", "eurostreaming_actor": "https://eurostreaming.my",
"filmstreaming": "https://filmstreaming.media", "filmstreaming": "https://film-streaming-ita.cam",
"guardaseriecam": "https://guardaserie.cam", "guardaseriecam": "https://guardaserie.kitchen",
"hd4me": "https://hd4me.net", "hd4me": "https://hd4me.net",
"ilcorsaronero": "https://ilcorsaronero.link", "ilcorsaronero": "https://ilcorsaronero.link",
"ilgeniodellostreaming_cam": "https://ilgeniodellostreaming.sbs", "ilgeniodellostreaming_cam": "https://ilgeniodellostreaming.foo",
"italiafilm": "https://italia-film.biz",
"mediasetplay": "https://mediasetinfinity.mediaset.it", "mediasetplay": "https://mediasetinfinity.mediaset.it",
"mondoserietv": "https://mondoserietv.club", "mondoserietv": "http://ww25.mondoserietv.club/?subid1=20230304-0434-261c-9cb0-a0044930e0a9",
"paramount": "https://www.mtv.it", "paramount": "https://www.mtv.it",
"piratestreaming": "https://www.piratestreaming.design", "piratestreaming": "https://piratestreaming.design",
"plutotv": "https://pluto.tv", "plutotv": "https://pluto.tv",
"raiplay": "https://www.raiplay.it", "raiplay": "https://www.raiplay.it",
"serietvu": "https://www.serietvu.live", "serietvu": "http://ww1.serietvu.live/?sub1=47fb879a-5325-11ee-94a7-cc35006f53d1",
"streamingcommunity": "https://streamingcommunity.tech", "streamingcommunity": "https://streamingcommunity.ooo",
"streamingita": "https://www.streamingita.wtf", "streamingita": "https://streamingita.click",
"streamtime": "https://t.me/s/StreamTime", "tantifilm": "https://tantifilm.name",
"tantifilm": "https://www.tantifilm.yachts", "toonitalia": "https://toonitalia.xyz"
"toonitalia": "https://toonitalia.co"
}, },
"findhost": { "findhost": {
"altadefinizione": "https://altadefinizione.nuovo.live", "altadefinizione": "https://altadefinizione.nuovo.live",

0
channels/0example.json.txt Normal file → Executable file
View File

0
channels/0example.py.txt Normal file → Executable file
View File

1
channels/1337x.json Normal file → Executable file
View File

@@ -6,6 +6,7 @@
"thumbnail": "1337x.png", "thumbnail": "1337x.png",
"banner": "1337x.png", "banner": "1337x.png",
"categories": ["movie", "tvshow", "torrent"], "categories": ["movie", "tvshow", "torrent"],
"not_active": ["include_in_newest"],
"settings": [ "settings": [
{ {
"id": "itaSearch", "id": "itaSearch",

4
channels/1337x.py Normal file → Executable file
View File

@@ -103,13 +103,13 @@ def peliculas(item):
data = ' ' data = ' '
else: else:
data = support.match(item).data data = support.match(item).data
# debug = True
if item.args == 'search': if item.args == 'search':
sceneTitle = 'undefined' sceneTitle = 'undefined'
patron = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)<(?:[^>]+>){3,7}(?P<seed>[^<]+)<(?:[^>]+>){6}(?P<size>[^<]+)<span' patron = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)<(?:[^>]+>){3,7}(?P<seed>[^<]+)<(?:[^>]+>){6}(?P<size>[^<]+)<span'
patronNext = r'"([^"]+)">&gt;&gt;' patronNext = r'"([^"]+)">&gt;&gt;'
elif item.contentType == 'movie': elif item.contentType == 'movie':
patron = r'<img alt="[^"]*" data-original="(?P<thumb>[^"]+)(?:[^>]+>){15}(?P<title>[^<]+)(?:[^>]+>){18,23}\s*<a href="(?P<url>[^"]+)' patron = r'<img[^>]+data-original="(?P<thumb>[^"]+)(?:[^>]+>){15}(?P<title>[^<]+).*?<p>(?P<plot>[^<]+).*?<a href="(?P<url>[^"]+)'
patronNext = r'"([^"]+)">&gt;&gt;' patronNext = r'"([^"]+)">&gt;&gt;'
else: else:
action = 'seasons' action = 'seasons'

0
channels/__init__.py Normal file → Executable file
View File

0
channels/accuradio.json Normal file → Executable file
View File

3
channels/accuradio.py Normal file → Executable file
View File

@@ -35,8 +35,9 @@ def mainlist(item):
@support.scrape @support.scrape
def peliculas(item): def peliculas(item):
# debug=True
action = 'playradio' action = 'playradio'
patron = r'data-id="(?P<id>[^"]+)"\s*data-oldid="(?P<oldid>[^"]+)".*?data-name="(?P<title>[^"]+)(?:[^>]+>){5}<img class="[^"]+"\s*src="(?P<thumb>[^"]+)(?:[^>]+>){6}\s*(?P<plot>[^<]+)' patron = r'data-id="(?P<id>[^"]+)"\s*data-oldid="(?P<oldid>[^"]+)".*?data-name="(?P<title>[^"]+)(?:[^>]+>){2}<img src="(?P<thumb>[^"]+)(?:[^>]+>){16}\s*(?P<plot>[^<]+)'
return locals() return locals()

3
channels/altadefinizione.json Normal file → Executable file
View File

@@ -6,5 +6,6 @@
"thumbnail": "altadefinizione.png", "thumbnail": "altadefinizione.png",
"banner": "altadefinizione.png", "banner": "altadefinizione.png",
"categories": ["movie", "tvshow", "vos"], "categories": ["movie", "tvshow", "vos"],
"settings": [] "settings": [],
"not_active": ["include_in_newest"]
} }

116
channels/altadefinizione.py Normal file → Executable file
View File

@@ -4,53 +4,59 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
from core import httptools, support from core import httptools, support, tmdb, scrapertools
from platformcode import config, logger from platformcode import config, logger
import re
def findhost(url): def findhost(url):
host = support.match(url, patron=r'<h2[^>]+><a href="([^"]+)').match.rstrip('/') host = support.match(url, patron=r'<h2[^>]+><a href="([^"]+)').match.rstrip('/')
return host permUrl = httptools.downloadpage(host, follow_redirects=False, only_headers=True).headers
if 'location' in permUrl.keys(): # handle redirection
return permUrl['location']
return host
host = config.get_channel_url(findhost) host = config.get_channel_url(findhost)
headers = [['Referer', host]] headers = [['Referer', host]]
@support.menu @support.menu
def mainlist(item): def mainlist(item):
menu = [('Film',['/category/film/', 'peliculas', '', 'movie']),
film = ['/category/film/', ('Film al cinema {submenu}',['/category/ora-al-cinema/', 'peliculas', '', 'movie']),
('Al Cinema', ['/al-cinema/', 'peliculas']), ('Generi',['', 'genres', '', 'undefined']),
('Generi', ['', 'genres']), ('Saghe',['', 'genres', 'saghe', 'undefined']),
# ('Sub-ITA', ['/sub-ita/', 'peliculas']) ('Serie TV',['/category/serie-tv/', 'peliculas', '', 'tvshow']),
#('Aggiornamenti Serie TV', ['/aggiornamenti-serie-tv/', 'peliculas']) da fixare
] ]
tvshow = ['/category/serie-tv/',
('Aggiornamenti Serie TV', ['/aggiornamenti-serie-tv/', 'peliculas']),]
search = '' search = ''
return locals() return locals()
@support.scrape @support.scrape
def genres(item): def genres(item):
action = 'peliculas' action = 'peliculas'
blacklist = ['Scegli il Genere', 'Film', 'Serie TV', 'Sub-Ita', 'Anime'] blacklist = ['Scegli il Genere', 'Film', 'Serie Tv', 'Sub-Ita', 'Anime', "Non reperibile", 'Anime Sub-ITA', 'Prossimamente',]
patronMenu = r'<option value="(?P<url>[^"]+)">(?P<title>[^<]+)' wantSaga = True if item.args == 'saghe' else False
patronBlock = r'<div class=\"categories-buttons-container\"(?P<block>.*?)</div>'
if not wantSaga: # se non richiedo le sage carico le icone in automatico
patronMenu = r'<a href=\"(?P<url>https:\/\/.*?)\".*?>(?P<title>.*?)</a>'
else: # mantengo l'icona del padre
patron = r'<a href=\"(?P<url>https:\/\/.*?)\".*?>(?P<title>.*?)</a>'
def itemlistHook(itemlist): def itemlistHook(itemlist):
itl = [] itl = []
for item in itemlist: for item in itemlist:
isSaga = item.fulltitle.startswith('Saga')
if len(item.fulltitle) != 3: if len(item.fulltitle) != 3:
itl.append(item) if (isSaga and wantSaga) or (not isSaga and not wantSaga):
itl.append(item)
return itl return itl
return locals() return locals()
def search(item, text): def search(item, text):
logger.debug(text) item.url = "{}/?{}".format(host, support.urlencode({'s': text}))
item.url = "{}/search/{}/feed/rss2/".format(host, text)
item.args = 'search' item.args = 'search'
try: try:
@@ -62,33 +68,54 @@ def search(item, text):
logger.error("search except: %s" % line) logger.error("search except: %s" % line)
return [] return []
@support.scrape @support.scrape
def peliculas(item): def peliculas(item):
n = '22' if '/?s=' in item.url else '8' if not item.args == 'search': # pagination not works
item.contentType = "undefined" if not item.nextpage:
action = 'check' item.page = 1
patron = r'src="(?P<poster>http[^"]+)(?:[^>]+>){4}\s*<a href="(?P<url>[^"]+)[^>]+>\s*(?P<title>[^\[\(\<]+)(?:\[(?P<quality>[^\]]+)\])?\s*(?:\((?P<lang>[a-zA-z-]+)\))?\s*(?:\((?P<year>\d+)\))?\s*</a>\s*</h2>' else:
if item.args == 'search': item.page = item.nextpage
patron = r'<title>(?P<title>[^\[\(\<]+)(?:\[(?P<quality>[^\]]+)\])?\s*(?:\((?P<lang>[a-zA-z-]+)\))?\s*(?:\((?P<year>\d+)\))?\s*[^>]+>\s*<link>(?P<url>[^<]+)'
patronNext = r'href="([^"]+)[^>]+>Successivo' if not item.parent_url:
item.parent_url = item.url
item.nextpage = item.page + 1
nextPageUrl = "{}/page/{}".format(item.parent_url, item.nextpage)
resp = httptools.downloadpage(nextPageUrl, only_headers = True)
if (resp.code > 399): # no more elements
nextPageUrl = ''
else:
action = 'check'
patron= r'<article class=\"elementor-post.*?(<img .*?src=\"(?P<thumb>[^\"]+).*?)?<h1 class=\"elementor-post__title\".*?<a href=\"(?P<url>[^\"]+)\" >\s*(?P<title>[^<]+?)\s*(\((?P<lang>Sub-[a-zA-Z]+)*\))?\s*(\[(?P<quality>[A-Z]*)\])?\s*(\((?P<year>[0-9]{4})\))?\s+<'
return locals() return locals()
@support.scrape
def episodios(item): def episodios(item):
item.quality = '' item.quality = ''
data = item.data data = item.data if item.data else httptools.downloadpage(item.url).data
action='findvideos' itemlist = []
# debug=True
patronBlock = r'<span>\s*\w+\s*[Ss]tagione.*?(?P<lang>(?:[Ss][Uu][Bb][-]?)?[Ii][Tt][Aa])(?: in )?(?P<quality>[^<]*)?(?:[^>]+>){4}(?P<block>.*?)/p>'
patron = r'(?P<season>\d+)x(?P<episode>\d+)[^>]+>(?P<data>.*?)(?:</table)'
return locals()
for it in support.match(data, patron=[r'div class=\"single-season.*?(?P<id>season_[0-9]+).*?>Stagione:\s(?P<season>[0-9]+).*?(\s-\s(?P<lang>[a-zA-z]+?))?<']).matches:
block = support.match(data, patron = r'div id=\"'+ it[0] +'\".*?</div').match
for ep in support.match(block, patron=[r'<li><a href=\"(?P<url>[^\"]+).*?img\" src=\"(?P<thumb>[^\"]+).*?title\">(?P<episode>[0-9]+)\.\s+(?P<title>.*?)</span>']).matches:
itemlist.append(item.clone(contentType = 'episode',
action='findvideos',
thumb = ep[1],
title = support.format_longtitle(support.cleantitle(ep[3]), season = it[1], episode = ep[2], lang= it[3]),
url = ep[0], data = '')
)
support.check_trakt(itemlist)
support.videolibrary(itemlist, item)
if (config.get_setting('downloadenabled')):
support.download(itemlist, item)
return itemlist
def check(item): def check(item):
item.data = httptools.downloadpage(item.url).data item.data = httptools.downloadpage(item.url).data
if 'Stagione' in item.data: if 'season-details' in item.data.lower():
item.contentType = 'tvshow' item.contentType = 'tvshow'
return episodios(item) return episodios(item)
else: else:
@@ -96,7 +123,14 @@ def check(item):
def findvideos(item): def findvideos(item):
logger.debug() video_url = item.url
if item.contentType == 'movie' and isinstance(item.data, str):
item.data = support.match(item.data, patron=r'data-id="([^"]+)').matches if item.contentType == 'movie':
return support.server(item, item.data) video_url = support.match(item, patron=[r'<div class="video-wrapper">.*?<iframe src=\"(https://.*?)\"',
r'window.open\(\'([^\']+).*?_blank']).match
if (video_url == ''):
return []
itemlist = [item.clone(action="play", url=srv) for srv in support.match(video_url, patron='<div class="megaButton" meta-type="v" meta-link="([^"]+).*?(?=>)>').matches]
itemlist = support.server(item,itemlist=itemlist)
return itemlist

0
channels/altadefinizione01.json Normal file → Executable file
View File

14
channels/altadefinizione01.py Normal file → Executable file
View File

@@ -141,13 +141,17 @@ def newest(categoria):
return itemlist return itemlist
def findvideos(item): def findvideos(item):
support.info('findvideos', item) support.info('findvideos', item)
data = httptools.downloadpage(item.url).data data = httptools.downloadpage(item.url).data
iframe = support.match(data, patron='src="(http[^"]+)" frameborder').match iframe = support.match(data, patron='src="(http[^"]+)" frameborder=\"0\" allow=\"accelerometer; autoplay;').match
if iframe: if iframe:
item.url = iframe item.url = iframe
return support.server(item) return support.server(item)
else:
itemlist = [item.clone(action="play", url=srv[0], quality=srv[1]) for srv in support.match(item, patron='<a href="#" data-link="([^"]+).*?<span class="d">([^<]+)').matches] # TODO: verificare se si puo' reinsierire il trailer youtube
return support.server(item, itemlist=itemlist, headers=headers) #itemlist = [item.clone(action="play", url=srv[0], quality=srv[1]) for srv in support.match(item, patron='<a href="#" data-link="([^"]+).*?<span class="d">([^<]+)').matches]
#itemlist = support.server(item, itemlist=itemlist, headers=headers)
#return itemlist

0
channels/altadefinizioneclick.json Normal file → Executable file
View File

0
channels/altadefinizioneclick.py Normal file → Executable file
View File

0
channels/altadefinizionecommunity.json Normal file → Executable file
View File

0
channels/altadefinizionecommunity.py Normal file → Executable file
View File

2
channels/animealtadefinizione.json Normal file → Executable file
View File

@@ -1,7 +1,7 @@
{ {
"id": "animealtadefinizione", "id": "animealtadefinizione",
"name": "AnimealtAdefinizione", "name": "AnimealtAdefinizione",
"active": true, "active": false,
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"thumbnail": "animealtadefinizione.png", "thumbnail": "animealtadefinizione.png",
"banner": "animealtadefinizione.png", "banner": "animealtadefinizione.png",

0
channels/animealtadefinizione.py Normal file → Executable file
View File

2
channels/animeforce.json Normal file → Executable file
View File

@@ -2,7 +2,7 @@
"id": "animeforce", "id": "animeforce",
"name": "AnimeForce", "name": "AnimeForce",
"language": ["ita"], "language": ["ita"],
"active": true, "active": false,
"thumbnail": "animeforce.png", "thumbnail": "animeforce.png",
"banner": "animeforce.png", "banner": "animeforce.png",
"categories": ["anime"], "categories": ["anime"],

0
channels/animeforce.py Normal file → Executable file
View File

0
channels/animesaturn.json Normal file → Executable file
View File

5
channels/animesaturn.py Normal file → Executable file
View File

@@ -3,10 +3,7 @@
# Canale per AnimeSaturn # Canale per AnimeSaturn
# ---------------------------------------------------------- # ----------------------------------------------------------
from lib import js2py
from core import support from core import support
from platformcode import config
from platformcode.logger import debug
host = support.config.get_channel_url() host = support.config.get_channel_url()
__channel__ = 'animesaturn' __channel__ = 'animesaturn'
@@ -146,7 +143,7 @@ def peliculas(item):
return itemlist return itemlist
else: else:
pagination = '' # pagination = ''
if item.args == 'incorso': if item.args == 'incorso':
patron = r'<a href="(?P<url>[^"]+)"[^>]+>(?P<title>[^<(]+)(?:\s*\((?P<year>\d+)\))?(?:\s*\((?P<lang>[A-za-z-]+)\))?</a>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*<img width="[^"]+" height="[^"]+" src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<plot>[^<]+)<' patron = r'<a href="(?P<url>[^"]+)"[^>]+>(?P<title>[^<(]+)(?:\s*\((?P<year>\d+)\))?(?:\s*\((?P<lang>[A-za-z-]+)\))?</a>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*<img width="[^"]+" height="[^"]+" src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<plot>[^<]+)<'
else: else:

0
channels/animeunity.json Normal file → Executable file
View File

110
channels/animeunity.py Normal file → Executable file
View File

@@ -4,14 +4,13 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
import cloudscraper, json, copy, inspect import cloudscraper, json, copy, inspect
from core import support from core import jsontools, support, httptools, scrapertools
from platformcode import autorenumber, logger from platformcode import autorenumber
session = cloudscraper.create_scraper()
# support.dbg()
host = support.config.get_channel_url() host = support.config.get_channel_url()
response = session.get(host + '/archivio') response = httptools.downloadpage(host + '/archivio')
csrf_token = support.match(response.text, patron='name="csrf-token" content="([^"]+)"').match csrf_token = support.match(response.data, patron='name="csrf-token" content="([^"]+)"').match
headers = {'content-type': 'application/json;charset=UTF-8', headers = {'content-type': 'application/json;charset=UTF-8',
'x-csrf-token': csrf_token, 'x-csrf-token': csrf_token,
'Cookie' : '; '.join([x.name + '=' + x.value for x in response.cookies])} 'Cookie' : '; '.join([x.name + '=' + x.value for x in response.cookies])}
@@ -54,7 +53,7 @@ def genres(item):
# support.dbg() # support.dbg()
itemlist = [] itemlist = []
genres = json.loads(support.match(response.text, patron='genres="([^"]+)').match.replace('&quot;','"')) genres = json.loads(support.match(response.data, patron='genres="([^"]+)').match.replace('&quot;','"'))
for genre in genres: for genre in genres:
item.args['genres'] = [genre] item.args['genres'] = [genre]
@@ -66,10 +65,10 @@ def years(item):
itemlist = [] itemlist = []
from datetime import datetime from datetime import datetime
current_year = datetime.today().year next_year = datetime.today().year + 1
oldest_year = int(support.match(response.text, patron='anime_oldest_date="([^"]+)').match) oldest_year = int(support.match(response.data, patron='anime_oldest_date="([^"]+)').match)
for year in list(reversed(range(oldest_year, current_year + 1))): for year in list(reversed(range(oldest_year, next_year + 1))):
item.args['year']=year item.args['year']=year
itemlist.append(item.clone(title=support.typo(year,'bold'), action='peliculas')) itemlist.append(item.clone(title=support.typo(year,'bold'), action='peliculas'))
return itemlist return itemlist
@@ -117,23 +116,34 @@ def news(item):
support.info() support.info()
item.contentType = 'episode' item.contentType = 'episode'
itemlist = [] itemlist = []
import cloudscraper
session = cloudscraper.create_scraper()
fullJs = json.loads(support.match(session.get(item.url).text, headers=headers, patron=r'items-json="([^"]+)"').match.replace('&quot;','"')) fullJs = json.loads(support.match(httptools.downloadpage(item.url).data, headers=headers, patron=r'items-json="([^"]+)"').match.replace('&quot;','"'))
js = fullJs['data'] js = fullJs['data']
for it in js: for it in js:
itemlist.append( if it.get('anime', {}).get('title') or it.get('anime', {}).get('title_eng'):
item.clone(title= support.typo(it['anime']['title'] + ' - EP. ' + it['number'], 'bold'), title_name = it['anime']['title'] if it.get('anime', {}).get('title') else it['anime']['title_eng']
fulltitle=it['anime']['title'], pattern = r'[sS](?P<season>\d+)[eE](?P<episode>\d+)'
thumbnail=it['anime']['imageurl'], match = scrapertools.find_single_match(it['file_name'], pattern)
forcethumb = True, full_episode = ''
scws_id=it.get('scws_id', ''), if match:
video_url=it.get('link', ''), season, episode = match
plot=it['anime']['plot'], full_episode = ' - S' + season + ' E' + episode
action='findvideos') else:
) pattern = r'[._\s]Ep[._\s]*(?P<episode>\d+)'
episode = scrapertools.find_single_match(it['file_name'], pattern)
if episode:
full_episode = ' - E' + episode
itemlist.append(
item.clone(title = support.typo(title_name + full_episode, 'bold'),
fulltitle = it['anime']['title'],
thumbnail = it['anime']['imageurl'],
forcethumb = True,
scws_id = it.get('scws_id', ''),
url = '{}/anime/{}-{}'.format(item.url, it['anime']['id'],it['anime']['slug']),
plot = it['anime']['plot'],
action = 'findvideos')
)
if 'next_page_url' in fullJs: if 'next_page_url' in fullJs:
itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'),thumbnail=support.thumb(), url=fullJs['next_page_url'])) itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'),thumbnail=support.thumb(), url=fullJs['next_page_url']))
return itemlist return itemlist
@@ -152,21 +162,27 @@ def peliculas(item):
item.args['order'] = order_list[order] item.args['order'] = order_list[order]
payload = json.dumps(item.args) payload = json.dumps(item.args)
records = session.post(host + '/archivio/get-animes', headers=headers, data=payload).json()['records'] records = httptools.downloadpage(host + '/archivio/get-animes', headers=headers, post=payload).json['records']
# support.dbg()
for it in records: for it in records:
if not it['title']:
it['title'] = ''
lang = support.match(it['title'], patron=r'\(([It][Tt][Aa])\)').match lang = support.match(it['title'], patron=r'\(([It][Tt][Aa])\)').match
title = support.re.sub(r'\s*\([^\)]+\)', '', it['title']) title = support.re.sub(r'\s*\([^\)]+\)', '', it['title'])
if 'ita' in lang.lower(): language = 'ITA' if 'ita' in lang.lower(): language = 'ITA'
else: language = 'Sub-ITA' else: language = 'Sub-ITA'
itm = item.clone(title=support.typo(title,'bold') + support.typo(language,'_ [] color kod') + (support.typo(it['title_eng'],'_ ()') if it['title_eng'] else '')) if title:
itm = item.clone(title=support.typo(title,'bold') + support.typo(language,'_ [] color kod') + (support.typo(it['title_eng'],'_ ()') if it['title_eng'] else ''))
else:
itm = item.clone(title=support.typo(it['title_eng'],'bold') + support.typo(language,'_ [] color kod'))
itm.contentLanguage = language itm.contentLanguage = language
itm.type = it['type'] itm.type = it['type']
itm.thumbnail = it['imageurl'] itm.thumbnail = it['imageurl']
itm.plot = it['plot'] itm.plot = it['plot']
itm.url = item.url itm.url = '{}/anime/{}-{}'.format(item.url, it.get('id'), it.get('slug'))
if it['episodes_count'] == 1: if it['episodes_count'] == 1:
itm.contentType = 'movie' itm.contentType = 'movie'
@@ -174,7 +190,7 @@ def peliculas(item):
itm.contentSerieName = '' itm.contentSerieName = ''
itm.action = 'findvideos' itm.action = 'findvideos'
itm.scws_id = it['episodes'][0].get('scws_id', '') itm.scws_id = it['episodes'][0].get('scws_id', '')
itm.video_url = it['episodes'][0].get('link', '') # itm.video_url = it['episodes'][0].get('link', '')
else: else:
itm.contentType = 'tvshow' itm.contentType = 'tvshow'
@@ -194,11 +210,10 @@ def peliculas(item):
def episodios(item): def episodios(item):
support.info() support.info()
itemlist = [] itemlist = []
title = 'Parte ' if item.type.lower() == 'movie' else 'Episodio ' title = 'Parte' if item.type.lower() == 'movie' else 'Episodio'
for it in item.episodes: for it in item.episodes:
itemlist.append( itemlist.append(
item.clone(title=support.typo(title + it['number'], 'bold'), item.clone(title=support.typo('{}. {} {}'.format(it['number'], title, it['number']), 'bold'),
episode = it['number'], episode = it['number'],
fulltitle=item.title, fulltitle=item.title,
show=item.title, show=item.title,
@@ -208,8 +223,10 @@ def episodios(item):
plot=item.plot, plot=item.plot,
action='findvideos', action='findvideos',
contentType='episode', contentType='episode',
scws_id=it.get('scws_id', ''), url = '{}/{}'.format(item.url, it['id'])
video_url=it.get('link', ''))) )
# video_url=it.get('link', ''))
)
if inspect.stack(0)[1][3] not in ['find_episodes']: if inspect.stack(0)[1][3] not in ['find_episodes']:
autorenumber.start(itemlist, item) autorenumber.start(itemlist, item)
@@ -219,6 +236,33 @@ def episodios(item):
def findvideos(item): def findvideos(item):
itemlist = [item.clone(title=support.config.get_localized_string(30137), server='streamingcommunityws', url=str(item.scws_id))] # if item.scws_id:
# from time import time
# from base64 import b64encode
# from hashlib import md5
#
# client_ip = support.httptools.downloadpage('http://ip-api.com/json/').json.get('query')
#
# expires = int(time() + 172800)
# token = b64encode(md5('{}{} Yc8U6r8KjAKAepEA'.format(expires, client_ip).encode('utf-8')).digest()).decode('utf-8').replace('=', '').replace('+', '-').replace('/', '_')
#
# url = 'https://scws.work/master/{}?token={}&expires={}&n=1'.format(item.scws_id, token, expires)
#
# itemlist = [item.clone(title=support.config.get_localized_string(30137), url=url, server='directo', action='play')]
from core import channeltools
itemlist = [item.clone(title=channeltools.get_channel_parameters(item.channel)['title'],
url=item.url, server='streamingcommunityws')]
return support.server(item, itemlist=itemlist, referer=False) return support.server(item, itemlist=itemlist, referer=False)
# return support.server(item, itemlist=itemlist)
#
# def play(item):
# urls = list()
# info = support.match(item.url, patron=r'(http.*?rendition=(\d+)[^\s]+)').matches
#
# if info:
# for url, res in info:
# urls.append(['hls [{}]'.format(res), url])
# return urls

4
channels/animeuniverse.json Normal file → Executable file
View File

@@ -1,7 +1,7 @@
{ {
"id": "animeuniverse", "id": "animeuniverse",
"name": "AnimeUniverse", "name": "AnimeHDitalia",
"active": true, "active": false,
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"thumbnail": "animeuniverse.png", "thumbnail": "animeuniverse.png",
"banner": "animeuniverse.png", "banner": "animeuniverse.png",

3
channels/animeuniverse.py Normal file → Executable file
View File

@@ -10,7 +10,7 @@ headers = {}
perpage_list = ['20','30','40','50','60','70','80','90','100'] perpage_list = ['20','30','40','50','60','70','80','90','100']
perpage = perpage_list[support.config.get_setting('perpage' , 'animeuniverse')] perpage = perpage_list[support.config.get_setting('perpage' , 'animeuniverse')]
epPatron = r'<td>\s*(?P<title>[^<]+)[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"' epPatron = r'<td>\s*(?P<title>[^<]+)[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>\s*<img [^>]+Streaming'
@support.menu @support.menu
@@ -103,6 +103,7 @@ def episodios(item):
anime = True anime = True
pagination = int(perpage) pagination = int(perpage)
patron = epPatron patron = epPatron
# debug = True
return locals() return locals()

9
channels/animeworld.json Normal file → Executable file
View File

@@ -7,6 +7,15 @@
"banner": "animeworld.png", "banner": "animeworld.png",
"categories": ["anime", "vos"], "categories": ["anime", "vos"],
"settings": [ "settings": [
{
"id": "lang",
"type": "list",
"label": "Lingua di Ricerca",
"default": 0,
"enabled": true,
"visible": true,
"lvalues": [ "Tutte", "Ita", "Sub-Ita"]
},
{ {
"id": "order", "id": "order",
"type": "list", "type": "list",

29
channels/animeworld.py Normal file → Executable file
View File

@@ -4,7 +4,7 @@
# thanks to fatshotty # thanks to fatshotty
# ---------------------------------------------------------- # ----------------------------------------------------------
from core import httptools, support, jsontools from core import httptools, support, config, jsontools
host = support.config.get_channel_url() host = support.config.get_channel_url()
__channel__ = 'animeworld' __channel__ = 'animeworld'
@@ -23,7 +23,7 @@ def get_data(item):
# support.dbg() # support.dbg()
url = httptools.downloadpage(item.url, headers=headers, follow_redirects=True, only_headers=True).url url = httptools.downloadpage(item.url, headers=headers, follow_redirects=True, only_headers=True).url
data = support.match(url, headers=headers, follow_redirects=True).data data = support.match(url, headers=headers, follow_redirects=True).data
if 'AWCookieVerify' in data: if 'SecurityAW' in data:
get_cookie(data) get_cookie(data)
data = get_data(item) data = get_data(item)
return data return data
@@ -37,8 +37,8 @@ def order():
@support.menu @support.menu
def mainlist(item): def mainlist(item):
anime=['/filter?sort=', anime=['/filter?sort=',
('ITA',['/filter?dub=1&sort=', 'menu', '1']), ('ITA',['/filter?dub=1&sort=', 'menu', 'dub=1']),
('SUB-ITA',['/filter?dub=0&sort=', 'menu', '0']), ('SUB-ITA',['/filter?dub=0&sort=', 'menu', 'dub=0']),
('In Corso', ['/ongoing', 'peliculas','noorder']), ('In Corso', ['/ongoing', 'peliculas','noorder']),
('Ultimi Episodi', ['/updated', 'peliculas', 'updated']), ('Ultimi Episodi', ['/updated', 'peliculas', 'updated']),
('Nuove Aggiunte',['/newest', 'peliculas','noorder' ]), ('Nuove Aggiunte',['/newest', 'peliculas','noorder' ]),
@@ -50,6 +50,7 @@ def mainlist(item):
def genres(item): def genres(item):
action = 'peliculas' action = 'peliculas'
data = get_data(item) data = get_data(item)
patronBlock = r'dropdown[^>]*>\s*Generi\s*<span.[^>]+>(?P<block>.*?)</ul>' patronBlock = r'dropdown[^>]*>\s*Generi\s*<span.[^>]+>(?P<block>.*?)</ul>'
patronMenu = r'<input.*?name="(?P<name>[^"]+)" value="(?P<value>[^"]+)"\s*>[^>]+>(?P<title>[^<]+)</label>' patronMenu = r'<input.*?name="(?P<name>[^"]+)" value="(?P<value>[^"]+)"\s*>[^>]+>(?P<title>[^<]+)</label>'
@@ -75,9 +76,10 @@ def menu(item):
def submenu(item): def submenu(item):
action = 'peliculas' action = 'peliculas'
data = item.other data = item.other
# debug=True
patronMenu = r'<input.*?name="(?P<name>[^"]+)" value="(?P<value>[^"]+)"\s*>[^>]+>(?P<title>[^<]+)<\/label>' patronMenu = r'<input.*?name="(?P<name>[^"]+)" value="(?P<value>[^"]+)"\s*>[^>]+>(?P<title>[^<]+)<\/label>'
def itemHook(item): def itemHook(item):
item.url = host + '/filter?' + item.name + '=' + item.value + '&dub=' + item.args + ('&sort=' if item.name != 'sort' else '') item.url = '{}/filter?{}={}&{}{}'.format(host, item.name, item.value, item.args, ('&sort=' if item.name != 'sort' else ''))
return item return item
return locals() return locals()
@@ -85,9 +87,10 @@ def submenu(item):
def newest(categoria): def newest(categoria):
support.info(categoria) support.info(categoria)
item = support.Item() item = support.Item()
lang = config.get_setting('lang', channel=item.channel)
try: try:
if categoria == "anime": if categoria == "anime":
item.url = host + '/updated' item.url = host
item.args = "updated" item.args = "updated"
return peliculas(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
@@ -98,13 +101,13 @@ def newest(categoria):
return [] return []
def search(item, texto): def search(item, text):
support.info(texto) support.info(text)
if item.search: if item.search:
item.url = host + '/filter?dub=' + item.args + '&keyword=' + texto + '&sort=' item.url = '{}/filter?{}&keyword={}&sort='.format(host, item.args, text)
else: else:
item.args = 'noorder' lang = ['?', '?dub=1&', '?dub=0&'][config.get_setting('lang', channel=item.channel)]
item.url = host + '/search?keyword=' + texto item.url = '{}/filter{}&keyword={}&sort='.format(host, lang, text)
item.contentType = 'tvshow' item.contentType = 'tvshow'
try: try:
return peliculas(item) return peliculas(item)
@@ -118,8 +121,8 @@ def search(item, texto):
@support.scrape @support.scrape
def peliculas(item): def peliculas(item):
data = get_data(item)
anime = True anime = True
# debug = True
if item.args not in ['noorder', 'updated'] and not item.url[-1].isdigit(): item.url += order() # usa l'ordinamento di configura canale if item.args not in ['noorder', 'updated'] and not item.url[-1].isdigit(): item.url += order() # usa l'ordinamento di configura canale
data = get_data(item) data = get_data(item)
@@ -185,7 +188,9 @@ def findvideos(item):
else: else:
dataJson = support.match(host + '/api/episode/info?id=' + epID + '&alt=0', headers=headers).data dataJson = support.match(host + '/api/episode/info?id=' + epID + '&alt=0', headers=headers).data
json = jsontools.load(dataJson) json = jsontools.load(dataJson)
title = support.match(json['grabber'], patron=r'server\d+.([^.]+)', string=True).match title = support.match(json['grabber'], patron=r'server\d+.([^.]+)', string=True).match
if title: itemlist.append(item.clone(action="play", title=title, url=json['grabber'].split('=')[-1], server='directo')) if title: itemlist.append(item.clone(action="play", title=title, url=json['grabber'].split('=')[-1], server='directo'))
else: urls.append(json['grabber']) else: urls.append(json['grabber'])
# support.info(urls)
return support.server(item, urls, itemlist) return support.server(item, urls, itemlist)

2
channels/aniplay.json Normal file → Executable file
View File

@@ -1,7 +1,7 @@
{ {
"id": "aniplay", "id": "aniplay",
"name": "AniPlay", "name": "AniPlay",
"active": true, "active": false,
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"thumbnail": "aniplay.png", "thumbnail": "aniplay.png",
"banner": "aniplay.png", "banner": "aniplay.png",

70
channels/aniplay.py Normal file → Executable file
View File

@@ -1,5 +1,5 @@
from platformcode import config, logger, autorenumber from platformcode import config, logger, autorenumber
from core import httptools, scrapertools, support, tmdb from core import httptools, scrapertools, support, tmdb, jsontools
from inspect import stack from inspect import stack
import sys import sys
@@ -34,6 +34,7 @@ def submenu_az(item):
thumbnail=support.thumb('az'))) thumbnail=support.thumb('az')))
return itemlist return itemlist
def submenu_year(item): def submenu_year(item):
itemlist = [] itemlist = []
from datetime import date from datetime import date
@@ -46,6 +47,7 @@ def submenu_year(item):
thumbnail=support.thumb('year'))) thumbnail=support.thumb('year')))
return itemlist return itemlist
def submenu_top(item): def submenu_top(item):
itemlist = [] itemlist = []
links = {'Top del giorno':'daily-top', 'Top della settimana':'weekly-top', 'Top del mese':'monthly-top'} links = {'Top del giorno':'daily-top', 'Top della settimana':'weekly-top', 'Top del mese':'monthly-top'}
@@ -56,6 +58,7 @@ def submenu_top(item):
variable= link)) variable= link))
return itemlist return itemlist
def submenu_season(item): def submenu_season(item):
itemlist = [] itemlist = []
seasons = {'winter':'Inverno', 'spring':'Primavera', 'summer':'Estate', 'fall':'Autunno'} seasons = {'winter':'Inverno', 'spring':'Primavera', 'summer':'Estate', 'fall':'Autunno'}
@@ -65,12 +68,13 @@ def submenu_season(item):
s = season['season'].split('.')[-1] s = season['season'].split('.')[-1]
title = seasons[s] title = seasons[s]
itemlist.append(item.clone(title=title, itemlist.append(item.clone(title=title,
url = '{}/api/seasonal-view/{}-{}'.format(host, s, item.variable), url = '{}/api/seasonal-view/{}-{}'.format(host, s, item.variable),
thumbnail = support.thumb(s), thumbnail = support.thumb(s),
action = 'peliculas', action = 'peliculas',
variable='')) variable=''))
return itemlist return itemlist
def submenu_top_of(item): def submenu_top_of(item):
itemlist = [] itemlist = []
url= '{}/api/home/{}'.format(host, item.variable) url= '{}/api/home/{}'.format(host, item.variable)
@@ -83,15 +87,14 @@ def submenu_top_of(item):
long_title = support.typo(title, 'bold') + support.typo(lang, '_ [] color kod') long_title = support.typo(title, 'bold') + support.typo(lang, '_ [] color kod')
itemlist.append(item.clone(title=long_title, itemlist.append(item.clone(title=long_title,
id=anime['animeId'], url = '{}/anime/{}'.format(host, anime['animeId']),
url = '{}/api/anime/{}'.format(host, anime['animeId']), video_url = '{}/api/anime/{}'.format(host, anime['animeId']),
thumbnail = get_thumbnail(anime, 'animeHorizontalImages'), thumbnail = get_thumbnail(anime, 'animeHorizontalImages'),
action = 'episodios', action = 'episodios',
variable=anime['animeId'])) variable=anime['animeId']))
return itemlist return itemlist
def search(item, texto): def search(item, texto):
support.info(texto) support.info(texto)
item.url = host + '/api/anime/advanced-search' item.url = host + '/api/anime/advanced-search'
@@ -136,15 +139,14 @@ def latest_added(item):
itemlist.append(item.clone(title=long_title, itemlist.append(item.clone(title=long_title,
fulltitle=title, fulltitle=title,
animeId = episode['animeId'], url='{}/play/{}'.format(host, episode['id']),
id=episode['id'],
contentType = 'episode', contentType = 'episode',
contentTitle = title, contentTitle = title,
contentSerieName = animeTitle, contentSerieName = animeTitle,
contentLanguage = lang, contentLanguage = lang,
quality = quality, quality = quality,
contentEpisodeNumber = int(float(episode['episodeNumber'])), contentEpisodeNumber = int(float(episode['episodeNumber'])),
animeUrl = '{}/api/anime/{}'.format(host, episode['animeId']), video_url = '{}/api/episode/{}'.format(host, episode['id']),
thumbnail = image, thumbnail = image,
fanart = image, fanart = image,
action = 'findvideos')) action = 'findvideos'))
@@ -163,6 +165,7 @@ def peliculas(item):
js = httptools.downloadpage('{}?page={}&size={}{}&sort={},{}&sort=id'.format(item.url, page, perpage, item.variable, sort, order)).json js = httptools.downloadpage('{}?page={}&size={}{}&sort={},{}&sort=id'.format(item.url, page, perpage, item.variable, sort, order)).json
for it in js: for it in js:
logger.debug(jsontools.dump(js))
title, lang = get_lang(it['title']) title, lang = get_lang(it['title'])
long_title = support.typo(title, 'bold') + support.typo(lang, '_ [] color kod') long_title = support.typo(title, 'bold') + support.typo(lang, '_ [] color kod')
@@ -174,10 +177,10 @@ def peliculas(item):
contentType = 'movie' if it['type'] == 'Movie' else 'tvshow', contentType = 'movie' if it['type'] == 'Movie' else 'tvshow',
contentTitle = title, contentTitle = title,
contentSerieName = title if it['type'] == 'Serie' else '', contentSerieName = title if it['type'] == 'Serie' else '',
action ='findvideos' if it['type'] == 'Movie' else 'episodios',# '' if not active else 'findvideos' if it['type'] == 'Movie' else 'episodios', action ='findvideos' if it['type'] == 'Movie' else 'episodios',
plot = it['storyline'], plot = it['storyline'],
# year = it['startDate'].split('-')[0], url = '{}/anime/{}'.format(host, it['id']),
url = '{}/api/anime/{}'.format(host, it['id']), video_url = '{}/api/anime/{}'.format(host, it.get('animeId', it.get('id'))),
thumbnail = get_thumbnail(it), thumbnail = get_thumbnail(it),
fanart = get_thumbnail(it, 'horizontalImages'))) fanart = get_thumbnail(it, 'horizontalImages')))
@@ -192,9 +195,10 @@ def peliculas(item):
def episodios(item): def episodios(item):
logger.debug() logger.debug()
itemlist = [] itemlist = []
if not item.video_url:
item.video_url = item.url.replace('/anime/', '/api/anime/')
# url = '{}/api/anime/{}'.format(host, item.id) # url = '{}/api/anime/{}'.format(host, item.id)
json = httptools.downloadpage(item.url, CF=False ).json json = httptools.downloadpage(item.video_url, CF=False ).json
if type(json) == list: if type(json) == list:
item.show_renumber = False item.show_renumber = False
@@ -208,7 +212,7 @@ def episodios(item):
title = it['name'] title = it['name']
itemlist.append(item.clone(title = title, itemlist.append(item.clone(title = title,
id= '{}/season/{}'.format(it['animeId'], it['id']), video_url = '{}/api/anime/{}/season/{}'.format(host, it['animeId'], it['id']),
contentType = 'season', contentType = 'season',
action = 'list_episodes', action = 'list_episodes',
plot = json['storyline'], plot = json['storyline'],
@@ -245,8 +249,7 @@ def list_episodes(item, json=None):
itemlist = [] itemlist = []
if not json: if not json:
url = '{}/api/anime/{}'.format(host, item.id) json = httptools.downloadpage(item.video_url, CF=False ).json
json = httptools.downloadpage(url, CF=False ).json
episodes = json['episodes'] if 'episodes' in json else json episodes = json['episodes'] if 'episodes' in json else json
episodes.sort(key=lambda ep: int(ep['episodeNumber'].split('.')[0])) episodes.sort(key=lambda ep: int(ep['episodeNumber'].split('.')[0]))
@@ -263,8 +266,8 @@ def list_episodes(item, json=None):
image = get_thumbnail(it, 'episodeImages') image = get_thumbnail(it, 'episodeImages')
itemlist.append(item.clone(title = title, itemlist.append(item.clone(title = title,
id= it['id'], url= '{}/play/{}'.format(host, it['id']),
url= 'api/episode/{}'.format(it['id']), video_url= '{}/api/episode/{}'.format(host, it['id']),
contentType = 'episode', contentType = 'episode',
contentEpisodeNumber = int(it['episodeNumber'].split('.')[0]), contentEpisodeNumber = int(it['episodeNumber'].split('.')[0]),
contentSeason = item.contentSeason if item.contentSeason else '', contentSeason = item.contentSeason if item.contentSeason else '',
@@ -283,21 +286,18 @@ def list_episodes(item, json=None):
def findvideos(item): def findvideos(item):
logger.debug() logger.debug()
url = '{}/api/{}/{}'.format(host, 'episode' if item.contentType == 'episode' else 'anime', item.id) res = httptools.downloadpage(item.video_url, CF=False ).json
json = httptools.downloadpage(url, CF=False ).json if res.get('episodes', []):
res = httptools.downloadpage('{}/api/episode/{}'.format(host, res['episodes'][0]['id'])).json
if json.get('episodes', []): item.url = res['videoUrl']
json = httptools.downloadpage('{}/api/episode/{}'.format(host, json['episodes'][0]['id'])).json item.server = 'directo'
# logger.debug(json)
videourl = json['videoUrl'] if '.m3u' in item.url:
item.manifest = 'hls'
itemlist = [item.clone(title=config.get_localized_string(30137), return support.server(item, itemlist=[item])
url=videourl,
server='directo')]
return support.server(item, itemlist=itemlist)
def get_thumbnail(data, prop = 'verticalImages', key = 'full'): def get_thumbnail(data, prop = 'verticalImages', key = 'full'):

2
channels/casacinema.json Normal file → Executable file
View File

@@ -2,7 +2,7 @@
"id": "casacinema", "id": "casacinema",
"name": "Casacinema", "name": "Casacinema",
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"active": true, "active": false,
"thumbnail": "casacinema.png", "thumbnail": "casacinema.png",
"banner": "casacinema.png", "banner": "casacinema.png",
"categories": ["tvshow", "movie","vos"], "categories": ["tvshow", "movie","vos"],

33
channels/casacinema.py Normal file → Executable file
View File

@@ -36,20 +36,20 @@ def genres(item):
def check(item): def check(item):
item.data = support.match(item).data item.data = support.match(item).data
if 'continua con il video' in item.data.lower(): if 'episodi e stagioni' in item.data.lower():
support.info('select = ### è un film ###')
item.contentType = 'movie'
return findvideos(item)
else:
support.info('select = ### è una serie ###') support.info('select = ### è una serie ###')
item.contentType = 'tvshow' item.contentType = 'tvshow'
return episodios(item) return episodios(item)
else:
support.info('select = ### è un film ###')
item.contentType = 'movie'
return findvideos(item)
def search(item, text): def search(item, text):
support.info(text) support.info(text)
text = text.replace(' ', '+') text = text.replace(' ', '+')
item.url = host + '/?s=' + text item.url = host + '/?a=b&s=' + text
item.args = 'search' item.args = 'search'
try: try:
return peliculas(item) return peliculas(item)
@@ -93,7 +93,6 @@ def newest(categoria):
@support.scrape @support.scrape
def peliculas(item): def peliculas(item):
# debug = True
if item.contentType == 'movie': if item.contentType == 'movie':
action = 'findvideos' action = 'findvideos'
elif item.contentType == 'tvshow': elif item.contentType == 'tvshow':
@@ -105,11 +104,10 @@ def peliculas(item):
if item.args == 'newest': if item.args == 'newest':
patron = r'<li><a href="(?P<url>[^"]+)"[^=]+="(?P<thumb>[^"]+)"><div>\s*?<div[^>]+>(?P<title>[^\(\[<]+)(?:\[(?P<quality1>HD)\])?[ ]?(?:\(|\[)?(?P<lang>[sS]ub-[iI][tT][aA])?(?:\)|\])?[ ]?(?:\[(?P<quality>.+?)\])?[ ]?(?:\((?P<year>\d+)\))?<(?:[^>]+>.+?(?:title="Nuovi episodi">(?P<episode>\d+x\d+)[ ]?(?P<lang2>Sub-Ita)?|title="IMDb">(?P<rating>[^<]+)))?' patron = r'<li><a href="(?P<url>[^"]+)"[^=]+="(?P<thumb>[^"]+)"><div>\s*?<div[^>]+>(?P<title>[^\(\[<]+)(?:\[(?P<quality1>HD)\])?[ ]?(?:\(|\[)?(?P<lang>[sS]ub-[iI][tT][aA])?(?:\)|\])?[ ]?(?:\[(?P<quality>.+?)\])?[ ]?(?:\((?P<year>\d+)\))?<(?:[^>]+>.+?(?:title="Nuovi episodi">(?P<episode>\d+x\d+)[ ]?(?P<lang2>Sub-Ita)?|title="IMDb">(?P<rating>[^<]+)))?'
else: else:
# patron = r'<li><a href="(?P<url>[^"]+)"[^=]+="(?P<thumb>[^"]+)"><div>\s*?<div[^>]+>(?P<title>[^\(\[<]+)(?:\[(?P<quality1>HD)\])?\s?(?:[\(\[])?(?P<lang>[sS]ub-[iI][tT][aA])?(?:[\)\]])?\s?(?:\[(?P<quality>.+?)\])?\s?(?:\((?P<year>\d+)\))?<'
patron = r'<li><a href="(?P<url>[^"]+)"[^=]+="(?P<thumb>[^"]+)"><div>\s*?<div[^>]+>(?P<title>[^\(\[<]+)(?P<title2>\([\D*]+\))?(?:\[(?P<quality1>HD)\])?\s?(?:[\(\[])?(?P<lang>[sS]ub-[iI][tT][aA])?(?:[\)\]])?\s?(?:\[(?P<quality>.+?)\])?\s?(?:\((?P<year>\d+)\))?(?:\(\D{2}\s\d{4}\))?<' patron = r'<li><a href="(?P<url>[^"]+)"[^=]+="(?P<thumb>[^"]+)"><div>\s*?<div[^>]+>(?P<title>[^\(\[<]+)(?P<title2>\([\D*]+\))?(?:\[(?P<quality1>HD)\])?\s?(?:[\(\[])?(?P<lang>[sS]ub-[iI][tT][aA])?(?:[\)\]])?\s?(?:\[(?P<quality>.+?)\])?\s?(?:\((?P<year>\d+)\))?(?:\(\D{2}\s\d{4}\))?<'
patronNext = r'<a href="([^"]+)"\s*>Pagina' patronNext = r'<a href="([^"]+)"\s*>Pagina'
# debug = True
def itemHook(item): def itemHook(item):
if item.quality1: if item.quality1:
@@ -120,8 +118,7 @@ def peliculas(item):
item.title += support.typo(item.lang2, '_ [] color kod') item.title += support.typo(item.lang2, '_ [] color kod')
if item.args == 'novita': if item.args == 'novita':
item.title = item.title item.title = item.title
# if 'wp-content' in item.thumbnail and not item.infoLabels['year']:
# item.infoLabels['year'] = item.thumbnail.split('/')[5]
return item return item
return locals() return locals()
@@ -133,11 +130,8 @@ def episodios(item):
action = 'findvideos' action = 'findvideos'
item.contentType = 'tvshow' item.contentType = 'tvshow'
blacklist = [''] blacklist = ['']
# debug = True
patron = r'"season-no">(?P<season>\d+)x(?P<episode>\d+)(?:[^>]+>){5}\s*(?P<title>[^<]+)(?P<data>.*?)</table>' patron = r'"season-no">(?P<season>\d+)x(?P<episode>\d+)(?:[^>]+>){5}\s*(?P<title>[^<]+)(?P<data>.*?)</table>'
# patron = r'(?P<episode>\d+(?:&#215;|×)?\d+\-\d+|\d+(?:&#215;|×)\d+)[;]?(?:(?P<title>[^<]+)<(?P<data>.*?)|(\2[ ])(?:<(\3.*?)))(?:<br />|</p>)'
patronBlock = r'<span>(?:.+?Stagione*.+?(?P<lang>[Ii][Tt][Aa]|[Ss][Uu][Bb][\-]?[iI][tT][aA]))?.*?</span>.*?class="content(?P<block>.*?)(?:"accordion-item|<script>)' patronBlock = r'<span>(?:.+?Stagione*.+?(?P<lang>[Ii][Tt][Aa]|[Ss][Uu][Bb][\-]?[iI][tT][aA]))?.*?</span>.*?class="content(?P<block>.*?)(?:"accordion-item|<script>)'
# patronBlock = r'<strong>(?P<block>(?:.+?Stagione*.+?(?P<lang>[Ii][Tt][Aa]|[Ss][Uu][Bb][\-]?[iI][tT][aA]))?(?:.+?|</strong>)(/?:</span>)?</p>.*?</p>)'
return locals() return locals()
@@ -145,10 +139,7 @@ def findvideos(item):
if item.contentType != 'movie': if item.contentType != 'movie':
links = support.match(item.data, patron=r'href="([^"]+)"').matches links = support.match(item.data, patron=r'href="([^"]+)"').matches
else: else:
matchData = item.data if item.data else item matchData = item.data if item.data else support.match(item.url, headers=headers).data
links = support.match(matchData, patron=r'(?:SRC|href)="([^"]+)"', patronBlock=r'<div class="col-md-10">(.+?)<div class="ads">').matches links = support.match(matchData, patron=r'data-id="([^"]+)"').matches
data = ''
for link in links: return support.server(item, links)
support.info('URL=',link)
data += link + '\n'
return support.server(item, data)

0
channels/cb01anime.json Normal file → Executable file
View File

0
channels/cb01anime.py Normal file → Executable file
View File

0
channels/cineblog01.json Normal file → Executable file
View File

31
channels/cineblog01.py Normal file → Executable file
View File

@@ -2,7 +2,6 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
# Canale per cineblog01 # Canale per cineblog01
# ------------------------------------------------------------ # ------------------------------------------------------------
import datetime
import re import re
from core import scrapertools, httptools, servertools, support from core import scrapertools, httptools, servertools, support
@@ -24,17 +23,19 @@ headers = [['Referer', host]]
def mainlist(item): def mainlist(item):
film = [ film = [
('HD', ['', 'menu', 'Film HD Streaming']), ('HD', ['', 'menu', 'Film HD Streaming']),
('Generi', ['', 'menu', 'Film per Genere']), ('Genere', ['', 'menu', 'Film per Genere']),
('Anni', ['', 'menu', 'Film per Anno']), ('Anni', ['', 'menu', 'Film per Anno']),
('Paese', ['', 'menu', 'Film per Paese']), ('Popolari per Genere', ['', 'menu', 'Film Popolari']),
('Ultimi Aggiornati', ['/ultimi-100-film-aggiornati/', 'peliculas', 'newest']), ('Ultimi Aggiunti', ['/ultimi-100-film-aggiunti/', 'peliculas', 'newest']),
('Ultimi Aggiunti', ['/lista-film-ultimi-100-film-aggiunti/', 'peliculas', 'newest']) ('Popolari', ['/category/film-popolari/']),
('Italiani', ['/category/nazione/italia/'])
# ('Film in Lista', ['/lista-film/', 'peliculas', 'newest'])
] ]
tvshow = ['/serietv/', tvshow = ['/serietv/',
('Per Lettera', ['/serietv/', 'menu', 'Serie-Tv per Lettera']), ('Per Lettera', ['/serietv/', 'menu', 'Serie-TV x Lettera']),
('Per Genere', ['/serietv/', 'menu', 'Serie-Tv per Genere']), ('Per Genere', ['/serietv/', 'menu', 'Serie-TV x Genere']),
('Per anno', ['/serietv/', 'menu', 'Serie-Tv per Anno']), ('Per anno', ['/serietv/', 'menu', 'Serie-TV x Anno']),
('Ultime Aggiornate', ['/serietv/ultime-100-serie-tv-aggiornate/', 'peliculas', 'newest']) ('Ultime Aggiunte', ['/serietv/ultime-100-serie-tv-aggiunte/', 'peliculas', 'newest'])
] ]
docu = [('Documentari {bullet bold}', ['/category/documentario/', 'peliculas']), docu = [('Documentari {bullet bold}', ['/category/documentario/', 'peliculas']),
('HD {submenu} {documentari}', ['/category/hd-alta-definizione/documentario-hd/', 'peliculas']) ('HD {submenu} {documentari}', ['/category/hd-alta-definizione/documentario-hd/', 'peliculas'])
@@ -45,9 +46,9 @@ def mainlist(item):
@support.scrape @support.scrape
def menu(item): def menu(item):
# debug=True # debug = True
patronBlock = item.args + r'<span.*?><\/span>.*?<ul.*?>(?P<block>.*?)<\/ul>' patronBlock = item.args + r'<span.*?><\/span>.*?<ul.*?>(?P<block>.*?)<\/ul>'
patronMenu = r'href="?(?P<url>[^">]+)"?>(?P<title>[^<»]+)' patronMenu = r'href="?(?P<url>[^">]+)"?[^>]+>(?P<title>[^<»]+)'
action = 'peliculas' action = 'peliculas'
return locals() return locals()
@@ -63,7 +64,7 @@ def newest(categoria):
item.url = host + '/serietv/' # aggiornamento-quotidiano-serie-tv/' item.url = host + '/serietv/' # aggiornamento-quotidiano-serie-tv/'
else: else:
item.contentType = 'movie' item.contentType = 'movie'
item.url = host + '/lista-film-ultimi-100-film-aggiunti/' item.url = host + '/ultimi-100-film-aggiunti/'
item.args = "newest" item.args = "newest"
return peliculas(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
@@ -92,7 +93,7 @@ def search(item, text):
@support.scrape @support.scrape
def peliculas(item): def peliculas(item):
# debug = True #debug = True
# esclusione degli articoli 'di servizio' # esclusione degli articoli 'di servizio'
# curYear = datetime.date.today().year # curYear = datetime.date.today().year
# blacklist = ['BENVENUTI', 'Richieste Serie TV', 'CB01.UNO &#x25b6; TROVA L&#8217;INDIRIZZO UFFICIALE ', # blacklist = ['BENVENUTI', 'Richieste Serie TV', 'CB01.UNO &#x25b6; TROVA L&#8217;INDIRIZZO UFFICIALE ',
@@ -112,7 +113,7 @@ def peliculas(item):
action = 'episodios' action = 'episodios'
elif '/serietv/' not in item.url: elif '/serietv/' not in item.url:
patron = r'(?<!sticky )hentry.*?<div class="card-image">\s*<a[^>]+>\s*<img src="(?P<thumb>[^" ]+)" alt[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+><a href="?(?P<url>[^" >]+)(?:\/|"|\s+)>(?P<title>[^<[(]+)(?:\[(?P<quality>[a-zA-Z]+(?:[/]?3D)?)\]\s*)?(?:\[(?P<lang>Sub-ITA|ITA)\]\s*)?(?:\[(?P<quality2>[a-zA-Z/]+)\]\s*)? (?:\((?P<year>[0-9]{4})\))?[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<genre>[^<>&‖“]+)(?:[^ ]+\s*DURATA\s*(?P<duration>[0-9]+)[^>]+>[^>]+>[^>]+>(?P<plot>[^<>]+))?' patron = r'(?<!sticky )hentry.*?<div class="card-image">\s*<a[^>]+>\s*<img src="(?P<thumb>[^" ]+)" alt[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+><a href="?(?P<url>[^" >]+)(?:\/|"|\s+)>(?P<title>[^<[(]+)(?:\[(?P<quality>[a-zA-Z]+(?:[/]?3D)?)\]\s*)?(?:\[(?P<lang>Sub-ITA|ITA)\]\s*)?(?:\[(?P<quality2>[a-zA-Z/]+)\]\s*)? (?:\((?P<year>[0-9]{4})\))?[^>]+>[^>]+>[^>]+>[^>]+>(?P<genre>[^<>&‖“]+)(?:[^ ]+\s*DURATA\s*(?P<duration>[0-9]+)[^>]+>[^>]+>[^>]+>(?P<plot>[^<>]+))?'
action = 'findvideos' action = 'findvideos'
else: else:
@@ -144,7 +145,7 @@ def episodios(item):
addVideolibrary = False addVideolibrary = False
downloadEnabled = False downloadEnabled = False
patron = r'<td>(?P<title>[^<]+)<td><a [^>]+href="(?P<url>[^"]+)[^>]+>' patron = r'<tr><td>(?P<title>[^<]+)<td><span [^>].+?><a [^>]+href="(?P<url>[^"]+)[^>]+>'
sceneTitle = True sceneTitle = True
# debug = True # debug = True

2
channels/cinemalibero.json Normal file → Executable file
View File

@@ -2,7 +2,7 @@
"id": "cinemalibero", "id": "cinemalibero",
"name": "Cinemalibero", "name": "Cinemalibero",
"language": ["ita"], "language": ["ita"],
"active": true, "active": false,
"thumbnail": "cinemalibero.png", "thumbnail": "cinemalibero.png",
"banner": "cinemalibero.png", "banner": "cinemalibero.png",
"categories": ["movie","tvshow","anime"], "categories": ["movie","tvshow","anime"],

74
channels/cinemalibero.py Normal file → Executable file
View File

@@ -97,10 +97,11 @@ def peliculas(item):
@support.scrape @support.scrape
def episodios(item): def episodios(item):
data = item.data data = item.data
# debug=True
if item.args == 'anime': if item.args == 'anime':
logger.debug("Anime :", item) logger.debug("Anime :", item)
patron = r'<a target=(?P<url>[^>]+>(?P<title>Episodio\s(?P<episode>\d+))(?::)?(?:(?P<title2>[^<]+))?.*?(?:<br|</p))' patron = r'<a target=(?P<url>[^>]+>(?P<title>Episodio\s(?P<episode>\d+))(?::)?(?:(?P<title2>[^<]+))?.*?(?:<br|</p))|(?P<data>.+)'
patronBlock = r'(?:Stagione (?P<season>\d+))?(?:</span><br />|</span></p>|strong></p>)(?P<block>.*?)(?:<div style="margin-left|<span class="txt_dow">)' patronBlock = r'(?:Stagione (?P<season>\d+))?(?:</span><br />|</span></p>|strong></p>)(?P<block>.*?)(?:<div style="margin-left|<span class="txt_dow">)'
item.contentType = 'tvshow' item.contentType = 'tvshow'
elif item.args == 'sport': elif item.args == 'sport':
@@ -110,7 +111,6 @@ def episodios(item):
item.contentType = 'tvshow' item.contentType = 'tvshow'
elif item.args == 'serie' or item.contentType == 'tvshow': elif item.args == 'serie' or item.contentType == 'tvshow':
logger.debug("Serie :", item) logger.debug("Serie :", item)
# debug=True
patron = r'(?:/>|<p>)\s*(?:(?P<episode>\d+(?:x|×|&#215;)\d+|Puntata \d+)(?:-(?P<episode2>\d+))?[;]?[ ]?(?P<title>[^<-]+))?(?P<data>.*?)(?:<br|</p)' patron = r'(?:/>|<p>)\s*(?:(?P<episode>\d+(?:x|×|&#215;)\d+|Puntata \d+)(?:-(?P<episode2>\d+))?[;]?[ ]?(?P<title>[^<-]+))?(?P<data>.*?)(?:<br|</p)'
patronBlock = r'Stagione\s(?:[Uu]nica)?(?:(?P<lang>iTA|ITA|Sub-ITA|Sub-iTA))?.*?</strong>(?P<block>.+?)(?:strong>|<div class="at-below)' patronBlock = r'Stagione\s(?:[Uu]nica)?(?:(?P<lang>iTA|ITA|Sub-ITA|Sub-iTA))?.*?</strong>(?P<block>.+?)(?:strong>|<div class="at-below)'
item.contentType = 'tvshow' item.contentType = 'tvshow'
@@ -130,28 +130,38 @@ def episodios(item):
for it in itl: for it in itl:
ep = scrapertools.find_single_match(it.title, r'(\d+x\d+)') ep = scrapertools.find_single_match(it.title, r'(\d+x\d+)')
if not ep and 'http' in it.data: # stagione intera if not ep and 'http' in it.data: # stagione intera
from lib import unshortenit # from lib import unshortenit
data = unshortenit.findlinks(it.data) # data = unshortenit.findlinks(it.data)
episodes = {}
def get_ep(s): def get_ep(s):
srv_mod = __import__('servers.%s' % s.server, None, None, ["servers.%s" % s.server]) srv_mod = __import__('servers.%s' % s.server, None, None, ["servers.%s" % s.server])
if hasattr(srv_mod, 'get_filename'): if hasattr(srv_mod, 'get_filename'):
title = srv_mod.get_filename(s.url) title = srv_mod.get_filename(s.url)
ep = scrapertools.get_season_and_episode(title) if item.args == 'anime':
ep = title
else:
ep = scrapertools.get_season_and_episode(title)
if ep: if ep:
if ep not in episodes: if ep not in episodes:
episodes[ep] = [] episodes[ep] = []
episodes[ep].append(s) episodes[ep].append(s)
servers = support.server(item, data, CheckLinks=False, Download=False, Videolibrary=False) servers = support.server(item, it.data, CheckLinks=False, Download=False, Videolibrary=False)
episodes = {} # for s in servers:
for s in servers: # get_ep(s)
get_ep(s)
# ottengo l'episodio dal nome del file # ottengo l'episodio dal nome del file
# with futures.ThreadPoolExecutor() as executor: with futures.ThreadPoolExecutor() as executor:
# for s in servers: for s in servers:
# executor.submit(get_ep, s) executor.submit(get_ep, s)
# logger.debug(it.contentLanguage) # logger.debug(it.contentLanguage)
ret.extend([it.clone(title=typo(ep, 'bold')+typo(it.contentLanguage, '_ [] color kod bold'), contentSeason=int(ep.split('x')[0]), contentEpisodeNumber=int(ep.split('x')[1]), servers=[srv.tourl() for srv in episodes[ep]]) for ep in episodes]) if item.args != 'anime':
for ep in episodes:
ret.append(it.clone(title=typo(ep, 'bold') + typo(it.contentLanguage, '_ [] color kod bold'),
servers=[srv.tourl() for srv in episodes[ep]], contentSeason=int(ep.split('x')[0]), contentEpisodeNumber=int(ep.split('x')[1])))
else:
ret.extend([it.clone(title=typo(ep, 'bold') + typo(it.contentLanguage, '_ [] color kod bold'),
servers=[srv.tourl() for srv in episodes[ep]]) for ep in episodes])
elif ep: elif ep:
ret.append(it) ret.append(it)
return sorted(ret, key=lambda i: i.title) return sorted(ret, key=lambda i: i.title)
@@ -206,16 +216,15 @@ def newest(categoria):
def check(item): def check(item):
logger.debug()
data = support.match(item.url, headers=headers).data data = support.match(item.url, headers=headers).data
# support.dbg()
if data: if data:
ck = str(support.match(data, patronBlock=r'Genere:(.*?)</span>', patron=r'tag">([^<]+)').matches).lower() ck = str(support.match(data, patronBlock=r'Genere:(.*?)</span>', patron=r'tag">([^<]+)').matches).lower()
if 'serie tv' in ck or 'anime' in ck:# in ['serie tv', 'wrestling wwe', 'anime']: if 'serie tv' in ck or 'anime' in ck or 'wrestling wwe' in ck :# in ['serie tv', 'wrestling wwe', 'anime']:
if 'anime' in ck: if 'anime' in ck:
item.args = 'anime' item.args = 'anime'
elif 'sport' in ck: elif 'sport' in ck or 'wrestling' in ck:
item.args = 'sport' item.args = 'sport'
else: else:
item.args = 'serie' item.args = 'serie'
@@ -249,26 +258,25 @@ def findvideos(item):
return support.server(item, itemlist=[Item().fromurl(s) for s in item.servers]) return support.server(item, itemlist=[Item().fromurl(s) for s in item.servers])
if not item.data: if not item.data:
item.data = httptools.downloadpage(item.url) item.data = httptools.downloadpage(item.url)
data = scrapertools.find_single_match(item.data, '<div class="at-above-post addthis_tool"(.*?)<div class="at-below-post') data = scrapertools.find_single_match(item.data, '<div class="at-above-post addthis_tool"(.*?)(?:<div class="at-below-post|[dD][oO][wW][nN][lL][oO][aA][dD])')
if data: if data:
item.data = data item.data = data
servers = [] servers = []
if item.args == 'anime': # if item.args == 'anime':
if item.urls: # this is a episode # if item.urls: # this is a episode
return support.server(item, itemlist=[Item(url=support.unshortenit.FileCrypt().unshorten(u)) for u in item.urls]) # return support.server(item, itemlist=[Item(url=support.unshortenit.FileCrypt().unshorten(u)) for u in item.urls])
itemlist = [] # itemlist = []
episodes = {} # episodes = {}
# support.dbg() # for uri in support.unshortenit.FileCrypt().find(item.data):
for uri in support.unshortenit.FileCrypt().find(item.data): # for ep in support.unshortenit.FileCrypt(uri).list_files():
for ep in support.unshortenit.FileCrypt(uri).list_files(): # ep = ('.'.join(ep[0].split('.')[:-1]), ep[1]) # remove extension
ep = ('.'.join(ep[0].split('.')[:-1]), ep[1]) # remove extension # if not ep[0] in episodes:
if not ep[0] in episodes: # episodes[ep[0]] = []
episodes[ep[0]] = [] # episodes[ep[0]].append(ep[1])
episodes[ep[0]].append(ep[1]) # for ep in episodes.keys():
for ep in episodes.keys(): # itemlist.append(item.clone(title=ep, urls=episodes[ep], action='findvideos', data=''))
itemlist.append(item.clone(title=ep, urls=episodes[ep], action='findvideos', data='')) # return itemlist
return itemlist
total_servers = support.server(item, data=item.data) total_servers = support.server(item, data=item.data)
if item.contentType == 'episode' and len(set([srv.server for srv in total_servers])) < len([srv.server for srv in total_servers]): if item.contentType == 'episode' and len(set([srv.server for srv in total_servers])) < len([srv.server for srv in total_servers]):

0
channels/cinetecadibologna.json Normal file → Executable file
View File

0
channels/cinetecadibologna.py Normal file → Executable file
View File

11
channels/dinostreaming.json Executable file
View File

@@ -0,0 +1,11 @@
{
"id": "dinostreaming",
"name": "DinoStreaming",
"language": ["ita"],
"active": true,
"thumbnail": "dinostreaming.png",
"banner": "dinostreaming.png",
"categories": ["movie"],
"settings": [],
"not_active": ["include_in_newest"]
}

77
channels/dinostreaming.py Executable file
View File

@@ -0,0 +1,77 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per Dinostreaming
# by ilmich
# ------------------------------------------------------------
from core import httptools, support
from core.item import Item
from platformcode import logger
host = support.config.get_channel_url()
headers = [['Referer', host]]
@support.menu
def mainlist(item):
film = [('Film al cinema',['/film-category/al-cinema/', 'peliculas']),
('Generi',['', 'genres']),
]
search = ''
return locals()
@support.scrape
def genres(item):
action = 'peliculas'
blacklist = ['Seguici su Telegram',]
patronMenu = r'<li class="elementor-icon-list-item">.*?href="(?P<url>.*?)".*?text">(?P<title>.*?)</span>'
return locals()
@support.scrape
def peliculas(item):
if not item.args == 'search': # pagination not works
if not item.nextpage:
item.page = 1
else:
item.page = item.nextpage
if not item.parent_url:
item.parent_url = item.url
item.nextpage = item.page + 1
nextPageUrl = "{}/page/{}".format(item.parent_url, item.nextpage)
resp = httptools.downloadpage(nextPageUrl, only_headers = True)
if (resp.code > 399): # no more elements
nextPageUrl = ''
patron = r'<div data-elementor-type="loop-item".*?<a.*?url="(?P<thumb>[^"]+).*?<a href=\"(?P<url>[^"]+)\">(?P<title>.*?)</a>.*?<span class="elementor-heading-title elementor-size-default">(?P<year>.*?)</span>'
def itemlistHook(itemlist):
return itemlist[:-1:]
return locals()
def search(item, text):
item.url = "{}/?{}".format(host, support.urlencode({'s': text}))
item.args = 'search'
try:
return peliculas(item)
except:
import sys
for line in sys.exc_info():
logger.error("search except: %s" % line)
return []
def findvideos(item):
support.info()
data = httptools.downloadpage(item.url).data
video_url = support.match(data, patron=r'<a href="([^"]+)" rel="nofollow" title="Guarda il film in streaming">' ).match
if (video_url == ''):
return []
item.url = video_url
itemlist = support.server(item)
return itemlist

0
channels/discoveryplus.json Normal file → Executable file
View File

75
channels/discoveryplus.py Normal file → Executable file
View File

@@ -6,7 +6,7 @@ import functools
import requests, uuid import requests, uuid
from core import jsontools, support, httptools from core import jsontools, support, httptools
from platformcode import logger from platformcode import logger, config
typo = support.typo typo = support.typo
@@ -18,11 +18,12 @@ deviceId = uuid.uuid4().hex
# domain = 'https://eu1-prod-direct.discoveryplus.com' # domain = 'https://eu1-prod-direct.discoveryplus.com'
domain = 'https://' + session.get("https://prod-realmservice.mercury.dnitv.com/realm-config/www.discoveryplus.com%2Fit%2Fepg").json()["domain"] domain = 'https://' + session.get("https://prod-realmservice.mercury.dnitv.com/realm-config/www.discoveryplus.com%2Fit%2Fepg").json()["domain"]
token = session.get('{}/token?deviceId={}&realm=dplay&shortlived=true'.format(domain, deviceId)).json()['data']['attributes']['token'] token = session.get('{}/token?deviceId={}&realm=dplay&shortlived=true'.format(domain, deviceId)).json()['data']['attributes']['token']
session.headers = {'User-Agent': 'Mozilla/50.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0', session.headers = {'User-Agent': httptools.get_user_agent(), #'Mozilla/50.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0',
'Referer': host, 'Referer': host,
'Origin': host, 'Origin': host,
'Cookie': 'st={}'.format(token), 'Cookie': 'st={}'.format(token),
'content-type': 'application/json', 'content-type': 'application/json',
'x-disco-client': 'WEB:UNKNOWN:dplus_us:2.46.0',
'x-disco-params': 'realm=dplay,siteLookupKey=dplus_it'} 'x-disco-params': 'realm=dplay,siteLookupKey=dplus_it'}
@support.menu @support.menu
@@ -54,7 +55,8 @@ def live(item):
logger.debug() logger.debug()
itemlist =[] itemlist =[]
data = session.get(domain + '/cms/routes/epg?include=default').json()['included'] # data = session.get(domain + '/cms/routes/epg?include=default').json()['included']
data = session.get(domain + '/cms/routes/home?include=default&decorators=playbackAllowed').json()['included']
for key in data: for key in data:
@@ -166,7 +168,7 @@ def seasons(item):
data = session.get('{}/cms/routes/show/{}?include=default'.format(domain, item.programid)).json()['included'] data = session.get('{}/cms/routes/show/{}?include=default'.format(domain, item.programid)).json()['included']
for key in data: for key in data:
if key['type'] == 'collection': if key['type'] == 'collection' and 'filters' in key['attributes']['component']:
for option in key['attributes']['component']['filters'][0]['options']: for option in key['attributes']['component']['filters'][0]['options']:
itemlist.append(item.clone(title="Stagione {}".format(option['value']), itemlist.append(item.clone(title="Stagione {}".format(option['value']),
season=int(option['value']), season=int(option['value']),
@@ -177,6 +179,15 @@ def seasons(item):
action='episodios')) action='episodios'))
break break
if key['type'] == 'collection' and 'title' in key['attributes']:
itemlist.append(
item.clone(title=typo(key['attributes']['title'],'bold'),
plot=key['attributes'].get('description',''),
programid=key['attributes']['alias'],
id=key['id'],
action='episodios',
contentType='season'))
return itemlist return itemlist
@@ -189,13 +200,21 @@ def episodios(item):
for key in data: for key in data:
if key['type'] == 'video' and 'Free' in str(key.get('relationships',{}).get('contentPackages',{}).get('data',[])): if key['type'] == 'video' and 'Free' in str(key.get('relationships',{}).get('contentPackages',{}).get('data',[])):
itemlist.append(item.clone(title = "{}x{:02d} - {}".format(item.season, key['attributes']['episodeNumber'], key['attributes']['name']), if item.season:
itemlist.append(item.clone(title = "{}x{:02d} - {}".format(item.season, key['attributes']['episodeNumber'], key['attributes']['name']),
plot = key['attributes']['description'], plot = key['attributes']['description'],
episode = key['attributes']['episodeNumber'], episode = key['attributes']['episodeNumber'],
contentType = 'episode', contentType = 'episode',
action = 'findvideos', action = 'findvideos',
thumbnail = images[key['relationships']['images']['data'][0]['id']], thumbnail = images[key['relationships']['images']['data'][0]['id']],
id=key['id'])) id=key['id']))
else:
itemlist.append(item.clone(title = key['attributes']['name'],
plot = key['attributes']['longDescription'],
contentType = 'episode',
action = 'findvideos',
thumbnail = images[key['relationships']['images']['data'][0]['id']],
id=key['id']))
itemlist.sort(key=lambda it: it.episode) itemlist.sort(key=lambda it: it.episode)
@@ -210,14 +229,50 @@ def findvideos(item):
logger.debug() logger.debug()
content = 'video' if item.contentType == 'episode' else 'channel' content = 'video' if item.contentType == 'episode' else 'channel'
post = {content + 'Id': item.id, 'deviceInfo': {'adBlocker': False,'drmSupported': True}}
post = {content + 'Id': item.id,
'deviceInfo': {
'adBlocker': 'true',
'drmSupported': 'true',
'hwDecodingCapabilities': [],
'screen':{
'width':1920,
'height':1080
},
'player':{
'width':1920,
'height':1080
}
},
'wisteriaProperties':{
'advertiser': {
'firstPlay': 0,
'fwIsLat': 0
},
'device':{
'browser':{
'name': 'chrome',
'version': config.get_setting("chrome_ua_version")
},
'type': 'desktop'
},
'platform': 'desktop',
'product': 'dplus_emea',
'sessionId': deviceId,
'streamProvider': {
'suspendBeaconing': 0,
'hlsVersion': 6,
'pingConfig': 1
}
}
}
data = session.post('{}/playback/v3/{}PlaybackInfo'.format(domain, content), json=post).json().get('data',{}).get('attributes',{}) data = session.post('{}/playback/v3/{}PlaybackInfo'.format(domain, content), json=post).json().get('data',{}).get('attributes',{})
if data.get('streaming', [{}])[0].get('protection', {}).get('drmEnabled',False):
if data.get('protection', {}).get('drmEnabled',False): item.url = data['streaming'][0]['url']
item.url = data['streaming']['dash']['url']
item.drm = 'com.widevine.alpha' item.drm = 'com.widevine.alpha'
item.license ="{}|PreAuthorization={}|R{{SSM}}|".format(data['protection']['schemes']['widevine']['licenseUrl'], data['protection']['drmToken']) item.license ="{}|PreAuthorization={}|R{{SSM}}|".format(data['streaming'][0]['protection']['schemes']['widevine']['licenseUrl'],
data['streaming'][0]['protection']['drmToken'])
else: else:
item.url = data['streaming'][0]['url'] item.url = data['streaming'][0]['url']
item.manifest = 'hls' item.manifest = 'hls'

0
channels/dreamsub.json Normal file → Executable file
View File

0
channels/dreamsub.py Normal file → Executable file
View File

6
channels/eurostreaming.json Normal file → Executable file
View File

@@ -1,10 +1,10 @@
{ {
"id": "eurostreaming", "id": "eurostreaming",
"name": "Eurostreaming", "name": "Eurostreaming",
"active": true, "active": false,
"language": ["ita","sub-ita"], "language": ["ita", "sub-ita"],
"thumbnail": "eurostreaming.png", "thumbnail": "eurostreaming.png",
"banner": "eurostreaming.png", "banner": "eurostreaming.png",
"categories": ["tvshow","anime","vos"], "categories": ["tvshow", "anime", "vos"],
"settings": [] "settings": []
} }

5
channels/eurostreaming.py Normal file → Executable file
View File

@@ -49,8 +49,9 @@ def episodios(item):
data = support.match(item, headers=headers).data data = support.match(item, headers=headers).data
if 'clicca qui per aprire' in data.lower(): data = support.match(support.match(data, patron=r'"go_to":"([^"]+)"').match.replace('\\',''), headers=headers).data if 'clicca qui per aprire' in data.lower(): data = support.match(support.match(data, patron=r'"go_to":"([^"]+)"').match.replace('\\',''), headers=headers).data
elif 'clicca qui</span>' in data.lower(): data = support.match(support.match(data, patron=r'<h2 style="text-align: center;"><a href="([^"]+)">').match, headers=headers).data elif 'clicca qui</span>' in data.lower(): data = support.match(support.match(data, patron=r'<h2 style="text-align: center;"><a href="([^"]+)">').match, headers=headers).data
patronBlock = r'</span>(?P<block>[a-zA-Z\s]+\d+(.+?)?(?:\()?(?P<lang>ITA|SUB ITA)(?:\))?.*?)</div></div>' patronBlock = r'</span>(?P<block>[a-zA-Z\s]+\d+(.+?)?(?:\()?(?P<lang>ITA|SUB ITA)(?:\))?.*?)</div></div>'
patron = r'(?P<season>\d+)&#\d+;(?P<episode>\d+(?:-\d+)?)\s*(?:</strong>|<em>)?\s*(?P<title>.*?)(?:–|-.+?-|–.+?–|–|em|.)?(?:/em.*?)?(?:<a (?P<other>.*?))?<br />' patron = r'(?P<season>\d+)&#215;(?P<episode>\d+)(</strong>)*(?P<title>.*?)<(?P<other>.*?br/>)'
def itemHook(i): def itemHook(i):
i.url = item.url i.url = item.url
@@ -84,7 +85,7 @@ def newest(categoria):
item.contentType = 'tvshow' item.contentType = 'tvshow'
item.args = 'newest' item.args = 'newest'
try: try:
item.url = "%s/aggiornamento-nuovi-episodi/" % host item.url = "%s/aggiornamento-episodi-nuovi/" % host
item.action = "peliculas" item.action = "peliculas"
itemlist = peliculas(item) itemlist = peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore

0
channels/eurostreaming_actor.json Normal file → Executable file
View File

6
channels/eurostreaming_actor.py Normal file → Executable file
View File

@@ -31,9 +31,9 @@ def peliculas(item):
patronNext = r'class="next".*?"(.+?)"' patronNext = r'class="next".*?"(.+?)"'
else: else:
patron = r'<div class="post-thumb">.*?<img src="(?P<thumb>[^"]+)".*?><a href="(?P<url>[^"]+)"[^>]+>(?P<title>.+?)[\<]?[/(](?P<year>.*?)[\)|a]' patron = r'<div class="post-thumb">.*?<img src="(?P<thumb>[^"]+)".*?><a href="(?P<url>[^"]+)"[^>]+>(?P<title>.+?)[\<]'
patronNext = r'next.*?href="(.*?)"' patronNext = r'next.*?href="(.*?)"'
# debug = True
return locals() return locals()
@@ -48,7 +48,7 @@ def episodios(item):
data = support.match(support.match(data, patron=r'<h2 style="text-align: center;"><a href="([^"]+)">').match, headers=headers).data data = support.match(support.match(data, patron=r'<h2 style="text-align: center;"><a href="([^"]+)">').match, headers=headers).data
patronBlock = r'tab-content(?P<block>.*?)serie-player' patronBlock = r'tab-content(?P<block>.*?)serie-player'
patron = r'data-link="(?P<url>http.*?)".*?data.num..(?P<season>\d+)x(?P<episode>\d+)" data-title="(?P<title>[^"]+)' patron = r'data.num..(?P<season>\d+)x(?P<episode>\d+)" data-title="(?P<title>[^"]+).*?data-link="(?P<url>http.*?)</li>'
return locals() return locals()

2
channels/filmpertutti.json Normal file → Executable file
View File

@@ -5,6 +5,6 @@
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"thumbnail": "filmpertutti.png", "thumbnail": "filmpertutti.png",
"banner": "filmpertutti.png", "banner": "filmpertutti.png",
"categories": ["tvshow","movie"], "categories": ["anime", "tvshow","movie"],
"settings": [] "settings": []
} }

168
channels/filmpertutti.py Normal file → Executable file
View File

@@ -3,9 +3,9 @@
# Canale per filmpertutti.py # Canale per filmpertutti.py
# ------------------------------------------------------------ # ------------------------------------------------------------
from core import httptools, support from core import httptools, support, scrapertools
from core.item import Item from core.item import Item
from platformcode import config from platformcode import config, logger
def findhost(url): def findhost(url):
page = httptools.downloadpage(url).data page = httptools.downloadpage(url).data
@@ -15,17 +15,20 @@ def findhost(url):
host = config.get_channel_url(findhost) host = config.get_channel_url(findhost)
headers = [['Referer', host]] headers = [['Referer', host]]
@support.menu @support.menu
def mainlist(item): def mainlist(item):
film = ['/category/film/', film = ['/category/film/feed/',
('Generi', ['/category/film/', 'genres', 'lettersF']) ('Film al cinema', ['/category/ora-al-cinema/feed/', 'peliculas']),
('Generi', ['/', 'genres']),
('Saghe', ['/', 'genres', 'saghe']),
] ]
tvshow = ['/category/serie-tv/', tvshow = ['/category/serie-tv/feed/',
('Aggiornamenti', ['/aggiornamenti-serie-tv/', 'peliculas', 'newest']), ]
('Per Lettera', ['/category/serie-tv/', 'genres', 'lettersS'])
anime = ['/category/anime/feed/',
('SUB-ITA',['/category/anime-sub-ita/feed/', 'peliculas']),
] ]
search = '' search = ''
@@ -34,94 +37,107 @@ def mainlist(item):
@support.scrape @support.scrape
def peliculas(item): def peliculas(item):
support.info() if not item.args == 'search': # pagination not works
# debug = True if not item.nextpage:
#debugBlock = True item.page = 1
# support.dbg() else:
item.page = item.nextpage
if item.args != 'newest': if not item.parent_url:
patronBlock = r'<ul class="posts">(?P<block>.*)<\/ul>' item.parent_url = item.url
patron = r'<li><a href="(?P<url>[^"]+)" data-thumbnail="(?P<thumb>[^"]+)">.*?<div class="title[^"]*">(?P<title>.+?)(?:\[(?P<lang>Sub-ITA)\])?(?:[ ]\[?(?P<quality>[HD]+)?\])?(?:[ ]\((?P<year>\d+)\)?)?<\/div>'
patronNext = r'<a href="([^"]+)[^>]+>Pagina'
else:
patronBlock = r'<ul class="posts">(?P<block>.*)<div class="clear[^"]*">'
patron = r'<li>\s?<a href="(?P<url>[^"]+)" data-thumbnail="(?P<thumb>[^"]+)">.*?<div class="title[^"]*">(?P<title>.+?)(?:\s\[(?P<quality>HD)\])?<\/div>\s*<div class="episode[^"]*"[^>]+>(?P<episode>[^<(]+)(?:\((?P<lang>[a-zA-Z\-]+)\))?'
if item.args == 'search': if item.args == 'genres':
action = 'check' action = 'check'
elif item.contentType == 'tvshow':
action = 'episodios' item.nextpage = item.page + 1
elif item.contentType == 'movie': nextPageUrl = "{}/?paged={}".format(item.parent_url, item.nextpage)
action ='findvideos' patron= r'<item>\s<title>(?P<title>[^<]+?)\s*(\((?P<lang>Sub-[a-zA-Z]+)*\))?\s*(\[(?P<quality>[A-Z]*)\])?\s*(\((?P<year>[0-9]{4})\))?</title>.*?<link>(?P<url>.*?)</link>'
def fullItemlistHook(itemlist):
if len(itemlist) < 10:
return itemlist[:-1:]
else:
return itemlist
else: else:
action = 'check' action = 'check'
patron= r'<article class=\"elementor-post.*?(<img .*?src=\"(?P<thumb>[^\"]+).*?)?<h3 class=\"elementor-post__title\".*?<a href=\"(?P<url>[^\"]+)\" >\s*(?P<title>[^<]+?)\s*(\((?P<lang>Sub-[a-zA-Z]+)*\))?\s*(\[(?P<quality>[A-Z]*)\])?\s*(\((?P<year>[0-9]{4})\))?\s+<'
def itemHook(item):
item.title = item.title.replace(' - La Serie', '')
return item
return locals() return locals()
@support.scrape
def episodios(item): def episodios(item):
# debug = True item.quality = ''
data = support.match(item.url, headers=headers).data data = item.data if item.data else httptools.downloadpage(item.url).data
if 'accordion-item' in data: itemlist = []
patronBlock = r'<span class="season[^>]*>\d+[^>]+>[^>]+>[^>]+>[^>]+>\D*(?:STAGIONE|Stagione)[ -]+(?P<lang>[a-zA-Z\- ]+)[^<]*</span>(?P<block>.*?)<div id="(?:season|disqus)'
patron = r'<img src="(?P<thumb>[^"]+)"(?:[^>]*>){4}\s*<li class="season-no">(?P<season>\d+)(?:&#215;|×|x)(?P<episode>\d+)[^<0-9]*<\/li>(?P<data>.*?javascript:;">(?P<title>[^<]+).*?</tbody>)'
else:
patronBlock = r'(?:STAGIONE|Stagione)(?:<[^>]+>)?\s*(?:(?P<lang>[A-Za-z- ]+))?(?P<block>.*?)(?:&nbsp;|<strong>|<div class="addtoany)'
patron = r'(?:/>|p>)\s*(?P<season>\d+)(?:&#215;|×|x)(?P<episode>\d+)[^<]+(?P<data>.*?)(?:<br|</p)'
def itemHook(i): for it in support.match(data, patron=[r'div class=\"single-season.*?(?P<id>season_[0-9]+).*?>Stagione:\s(?P<season>[0-9]+).*?(\s-\s(?P<lang>[a-zA-z]+?))?<']).matches:
i.url = item.url block = support.match(data, patron = r'div id=\"'+ it[0] +'\".*?</div').match
i.title.replace('&#215;','x') for ep in support.match(block, patron=[r'<li><a href=\"(?P<url>[^\"]+).*?img\" src=\"(?P<thumb>[^\"]+).*?title\">(?P<episode>[0-9]+)\.\s+(?P<title>.*?)</span>']).matches:
if not i.contentLanguage: itemlist.append(item.clone(contentType = 'episode',
i.contentLanguage = 'ITA' action='findvideos',
return i thumb=ep[1],
return locals() episode=ep[2],
season=it[1],
contentSeason=it[1],
contentEpisodeNumber=ep[2],
title = support.format_longtitle(support.cleantitle(ep[3]), season = it[1], episode = ep[2], lang= it[3]),
url = scrapertools.unescape(ep[0]), data = '')
)
if config.get_setting('episode_info') and not support.stackCheck(['add_tvshow', 'get_newest']):
support.tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
support.check_trakt(itemlist)
support.videolibrary(itemlist, item)
if (config.get_setting('downloadenabled')):
support.download(itemlist, item)
return itemlist
@support.scrape @support.scrape
def genres(item): def genres(item):
if item.args == 'lettersF':
item.contentType = 'movie'
else:
item.contentType = 'tvshow'
action = 'peliculas' action = 'peliculas'
patronBlock = r'<select class="cats">(?P<block>.*?)<\/select>' blacklist = ['Tutti i film',]
patronMenu = r'<option data-src="(?P<url>[^"]+)">(?P<title>[^<]+)<\/option>' wantSaga = True if item.args == 'saghe' else False
item.args = 'genres'
patronBlock = r'<nav class="elementor-nav-menu--main (?P<block>.*?)</nav>'
patronMenu = r'<li class="menu-item.*?<a href="(?P<url>https:\/\/.*?)".*?>(?P<title>.*?)</a></li>'
def itemHook(item):
item.url = "{}/feed/".format(item.url)
return item
def itemlistHook(itemlist):
itl = []
for item in itemlist:
isSaga = item.fulltitle.startswith('Saga')
if len(item.fulltitle) != 3:
if (isSaga and wantSaga) or (not isSaga and not wantSaga):
itl.append(item)
return itl
return locals() return locals()
def check(item): def check(item):
support.info() item.data = httptools.downloadpage(item.url).data
patron=r'class="taxonomy category"\s*><span property="name">([^>]+)</span></a><meta property="position" content="2">' if 'season-details' in item.data.lower():
block = support.match(item.url, patron=patron,headers=headers).match item.contentType = 'tvshow'
if block.lower() != 'film':
support.info('select = ### è una serie ###')
item.contentType='tvshow'
return episodios(item) return episodios(item)
else: else:
support.info('select = ### è un movie ###') item.contentType = 'movie'
item.contentType='movie'
return findvideos(item) return findvideos(item)
def search(item, texto): def search(item, text):
support.info() item.url = "{}/?{}".format(host, support.urlencode({'s': text}))
item.url = host + "/search/" + texto
item.args = 'search' item.args = 'search'
try: try:
return peliculas(item) return peliculas(item)
# Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
support.info("%s" % line) logger.error("search except: %s" % line)
return [] return []
@@ -131,13 +147,13 @@ def newest(categoria):
item = Item() item = Item()
try: try:
if categoria == "peliculas": if categoria == "peliculas":
item.url = host + "/category/film/" item.url = host + "/category/film/feed/"
item.action = "peliculas" item.action = "peliculas"
item.extra = "movie" item.extra = "movie"
item.contentType = 'movie' item.contentType = 'movie'
itemlist = peliculas(item) itemlist = peliculas(item)
else: else:
item.url = host + "/aggiornamenti-serie-tv/" item.url = host + "/category/serie-tv/feed/"
item.action = "peliculas" item.action = "peliculas"
item.args = "newest" item.args = "newest"
item.contentType = 'tvshow' item.contentType = 'tvshow'
@@ -154,8 +170,16 @@ def newest(categoria):
def findvideos(item): def findvideos(item):
video_url = item.url
if item.contentType == 'movie': if item.contentType == 'movie':
data = support.match(item.url, patron=r'<a target="_blank" rel="nofollow" href="([^"]+)">').matches video_url = support.match(item.url, patron=r'<a href="([^"]+)" rel="nofollow">').match
return support.server(item, data=data, patronTag='Versione: <[^>]+>([^<]+)')
else: video_url = support.match(video_url, patron=r'<iframe src=\"(https://.*?)\"').match
return support.server(item, item.data)
if (video_url == ''):
return []
itemlist = [item.clone(action="play", url=srv) for srv in support.match(video_url, patron='<div class=\"megaButton\" meta-type=\"v\" meta-link=\"([^\"]+).*?(?=>)>').matches]
itemlist = support.server(item,itemlist=itemlist)
return itemlist

2
channels/filmstreaming.json Normal file → Executable file
View File

@@ -2,7 +2,7 @@
"id": "filmstreaming", "id": "filmstreaming",
"name": "Film Streaming", "name": "Film Streaming",
"language": ["ita"], "language": ["ita"],
"active": true, "active": false,
"thumbnail": "filmstreaming.png", "thumbnail": "filmstreaming.png",
"banner": "filmstreaming.png", "banner": "filmstreaming.png",
"categories": ["movie"], "categories": ["movie"],

0
channels/filmstreaming.py Normal file → Executable file
View File

0
channels/guardaseriecam.json Normal file → Executable file
View File

8
channels/guardaseriecam.py Normal file → Executable file
View File

@@ -36,7 +36,7 @@ def list(item):
@support.scrape @support.scrape
def peliculas(item): def peliculas(item):
# debug = True # debug = True
patron = r'<div class="mlnh-thumb"><a href="(?P<url>[^"]+).*?title="(?P<title>[^"]+).*?src="(?P<thumb>[^"]+).*?hdn">(?P<year>[0-9]{4})' patron = r'<div class="mlnh-thumb"><a href="(?P<url>[^"]+)[^>]+title="(?P<title>[^"]+).*?<img src="(?P<thumb>[^"]+).*?hdn">[^<]*(?P<year>[0-9]{4})'
patronNext = 'pagenavi.*?<a href="([^"]+)">\d+' patronNext = 'pagenavi.*?<a href="([^"]+)">\d+'
action = 'episodios' action = 'episodios'
return locals() return locals()
@@ -45,9 +45,9 @@ def peliculas(item):
@support.scrape @support.scrape
def episodios(item): def episodios(item):
patronBlock = r'<div class="tab-pane fade" id="season-(?P<season>.)"(?P<block>.*?)</ul>\s*</div>' patronBlock = r'<div class="tab-pane fade" id="season-(?P<season>.)"(?P<block>.*?)</ul>\s*</div>'
patron = r'<a href="#" allowfullscreen data-link="(?P<url>[^"]+).*?title="(?P<title>[^"]+)(?P<lang>[sS][uU][bB]-?[iI][tT][aA])?\s*">(?P<episode>[^<]+)' patron = r'(?P<data><a href="#" allowfullscreen data-link="[^"]+.*?title="(?P<title>[^"]+)(?P<lang>[sS][uU][bB]-?[iI][tT][aA])?\s*">(?P<episode>[^<]+).*?</li>)'
action = 'findvideos' action = 'findvideos'
# debugBlock = True # debug = True
return locals() return locals()
@@ -68,4 +68,4 @@ def search(item, text):
def findvideos(item): def findvideos(item):
logger.debug() logger.debug()
return support.server(item, item.url) return support.server(item, item.data)

0
channels/guardaserieclick.json Normal file → Executable file
View File

0
channels/guardaserieclick.py Normal file → Executable file
View File

0
channels/guardaserieicu.json Normal file → Executable file
View File

0
channels/guardaserieicu.py Normal file → Executable file
View File

0
channels/hd4me.json Normal file → Executable file
View File

2
channels/hd4me.py Normal file → Executable file
View File

@@ -57,5 +57,7 @@ def search(item, text):
def findvideos(item): def findvideos(item):
url = support.match(item, patron=r'<a class=["]?bot1["]? href="([^"]+)"').match url = support.match(item, patron=r'<a class=["]?bot1["]? href="([^"]+)"').match
if not url.startswith('http'):
url = host + url
url = support.httptools.downloadpage(url, followredirect=True).url url = support.httptools.downloadpage(url, followredirect=True).url
return support.server(item, url) return support.server(item, url)

0
channels/ilcorsaronero.json Normal file → Executable file
View File

69
channels/ilcorsaronero.py Normal file → Executable file
View File

@@ -3,90 +3,59 @@
# Canale per ilcorsaronero # Canale per ilcorsaronero
# ------------------------------------------------------------ # ------------------------------------------------------------
from core import support from core import support, httptools
# def findhost(url):
# data = support.httptools.downloadpage(url).data
# url = support.scrapertools.find_single_match(data, '<li><a href="([^"]+)')
# return url[:-1] if url.endswith('/') else url
host = support.config.get_channel_url() host = support.config.get_channel_url()
support.info('HOST',host) support.info('HOST',host)
# host = 'https://ilcorsaronero.xyz'
headers = [['Referer', host]] headers = [['Referer', host]]
@support.menu @support.menu
def mainlist(item): def mainlist(item):
menu = [ menu = [
('BDRiP {film}', ['/categoria.php?active=0&category=1&order=data&by=DESC&page=', 'peliculas', [0, 'movie', True], 'undefined']), ('Film {film}', ['/cat/film', 'peliculas', [0, 'movie', True], 'undefined']),
('Cerca BDRiP... {submenu} {film}', ['/torrent-ita/1/', 'search', ['search', 'movie', True], 'movie']), ('Serie TV', ['/cat/serie-tv', 'peliculas', [0 , 'tvshow', True], 'undefined']),
('DVD {film}', ['/categoria.php?active=0&category=20&order=data&by=DESC&page=', 'peliculas', [0, 'movie', True], 'undefined']), ('Animazione', ['/cat/animazione', 'peliculas', [0 , 'anime', True], 'undefined']),
('Cerca DVD... {submenu} {film}', ['/torrent-ita/20/', 'search', ['search', 'movie', True], 'movie']), ('Documentari', ['/cat/altro/documentari', 'peliculas', [0 , 'documentary', True], 'undefined']),
('Screener {film}', ['/categoria.php?active=0&category=19&order=data&by=DESC&page=', 'peliculas', [0, 'movie', True], 'undefined']), ('Programmi TV', ['/cat/altro/programmi-tv', 'peliculas', [0 , 'tvshow', True], 'tvshow']),
('Cerca Screener.. {submenu} {film}', ['/torrent-ita/19/', 'search', ['search', 'movie', True], 'movie']), ('Video Musica', ['/cat/musica/video-musicali', 'peliculas', [0 , 'music', False], 'undefined']),
('Serie TV', ['/categoria.php?active=0&category=15&order=data&by=DES&page=', 'peliculas', [0 , 'tvshow', True], 'tvshow']), ('Videocorsi', ['/cat/altro/videocorsi', 'peliculas', [0 , 'music', False], 'undefined'])
('Cerca Serie TV.. {submenu}', ['/torrent-ita/15/', 'search', ['search', 'tvshow',True], 'tvshow']),
('Anime', ['/categoria.php?active=0&category=5&order=data&by=DESC&page=', 'peliculas', [0, 'anime', True], 'tvshow']),
('Cerca Anime.. {submenu}', ['/torrent-ita/5/', 'search', ['search', 'anime', True], 'tvshow']),
('Musica', ['/categoria.php?active=0&category=2&order=data&by=DESC&page=', 'peliculas', [0, 'music', False], 'music']),
('Cerca Musica.. {submenu}', ['/torrent-ita/2/', 'search', ['search', 'music', False], 'music']),
('Audiolibri {musica}', ['/categoria.php?active=0&category=18&order=data&by=DESC&page=', 'peliculas', [0, 'music', False], 'music']),
('Cerca Audiolibri.. {submenu}', ['/torrent-ita/18/', 'search', ['search', 'music', False], 'music']),
# mostrerebbe anche risultati non "multimediali" e allungherebbero inutilmente la ricerca globale
# ('Altro {film}', ['/categoria.php?active=0&category=4&order=data&by=DESC&page=', 'peliculas', [0, 'other', False]]),
# ('Cerca altro.. {submenu}', ['/torrent-ita/4/', 'search', ['search', 'other', False]]),
# ('Cerca Tutto... {color kod bold}', ['/argh.php?search=', 'search', ['search', 'all', False]])
] ]
search = ''
return locals() return locals()
@support.scrape @support.scrape
def peliculas(item): def peliculas(item):
# debug = True debug = False
action = 'findvideos' action = 'findvideos'
sceneTitle = item.args[2] sceneTitle = item.args[2]
if item.args[1] in ['tvshow', 'anime', 'music', 'other']:
patron = r'>[^"<]+'
else:
patron = r'>(?P<quality>[^"<]+)'
patron += '<TD[^>]+><A class="tab" HREF="(?P<url>[^"]+)"\s*>[^<]+<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<size>[^<]+)<[^>]+>[^>]+>[^>]+><form action="[^"]+/\d+/(?P<title>[^"]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<seed>[^<]+)'
def itemHook(item): def itemHook(item):
if not sceneTitle: if not sceneTitle:
item.title = item.title.replace('_', ' ') item.title = item.title.replace('_', ' ')
item.fulltitle = item.fulltitle.replace('_', ' ')
item.title = support.scrapertools.decodeHtmlentities(support.urlparse.unquote(item.title)) item.title = support.scrapertools.decodeHtmlentities(support.urlparse.unquote(item.title))
return item return item
if 'search' not in item.args: patron = r'<a class="hover:underline line-clamp-1.*?href="(?P<url>[^"]+)"\s*>(?P<title>.*?)</a>[^>]+>[^>]+>[^>]+>(?P<seed>.*?)<'
item.url += str(item.args[0]) patronNext = r'<a href="(?P<url>[^"]+)".*?Next</span>'
def itemlistHook(itemlist):
args = item.args
args[0] += 1
support.nextPage(itemlist, item, next_page=item.url, function_or_level="peliculas")
# itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'), args=args, thumbnail=support.thumb()))
return itemlist
return locals() return locals()
def search(item, text): def search(item, text):
support.info(item, text) item.url = "{}/search?{}".format(host, support.urlencode({'q': text}))
if 'all' in item.args: item.args = 'search'
item.url += text
else:
item.url += text + '.html'
try: try:
return peliculas(item) return peliculas(item)
# Cattura la eccezione così non interrompe la ricerca globle se il canale si rompe!
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
support.logger.error("search except: %s" % line) logger.error("search except: %s" % line)
return [] return []
def findvideos(item): def findvideos(item):
if item.contentType == 'tvshow': item.contentType = 'episode' if item.contentType == 'tvshow': item.contentType = 'episode'
Videolibrary = True if 'movie' in item.args else False Videolibrary = True if 'movie' in item.args else False

0
channels/ilgeniodellostreaming.json Normal file → Executable file
View File

0
channels/ilgeniodellostreaming.py Normal file → Executable file
View File

0
channels/ilgeniodellostreaming_cam.json Normal file → Executable file
View File

0
channels/ilgeniodellostreaming_cam.py Normal file → Executable file
View File

11
channels/italiafilm.json Executable file
View File

@@ -0,0 +1,11 @@
{
"id": "italiafilm",
"name": "ItaliaFilm",
"language": ["ita", "sub-ita"],
"active": true,
"thumbnail": "italiafilm.png",
"banner": "",
"categories": ["movie"],
"not_active": ["include_in_newest"],
"settings": []
}

90
channels/italiafilm.py Executable file
View File

@@ -0,0 +1,90 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per 'italifilm'
# ------------------------------------------------------------
from core import support, httptools, scrapertools, tmdb
from platformcode import config, logger
host = config.get_channel_url()
headers = [['Referer', host]]
@support.menu
def mainlist(item):
menu = [
('Film', ['/film/', 'list', 'film']),
('Per Genere', ['', 'list', 'genere']),
('Al Cinema', ['/cinema/', 'list', 'film']),
('Sub-ITA', ['/sub-ita/', 'list', 'film']),
('Top del Mese', ['/top-del-mese.html', 'list', 'film'])
]
search = ''
return locals()
@support.scrape
def list(item):
actLike = 'peliculas'
if item.args == 'genere':
patronBlock = r'<ul class="sub-menu">(?P<block>.*?)</ul>'
patronMenu = r'<li><a href="(?P<url>[^"]+)">(?P<title>[^<]+)'
action = 'peliculas'
elif item.args == 'film':
patron = r'<div class="entry-summary.*?<a href="(?P<url>[^"]+)" title="(?P<title>[^\("]+)(?:\((?P<year>\d+)\))" class="[^"]+"><img class="lazyload" data-src="(?P<thumb>[^"]+)" alt="[^"]+".*?></a>'
patronNext = r'<a href="([^"]+)">(?:&rarr|→)'
return locals()
def peliculas(item):
data = httptools.downloadpage(item.url).data
itemlist = []
for it in support.match(data, patron=[r'<div class="entry-summary.*?<a href="(?P<url>[^"]+)" title="(?P<title>[^"]+)(?:\((?P<year>\d+)\))" class="[^"]+"><img class="lazyload" data-src="(?P<thumb>[^"]+)" alt="[^"]+".*?></a>']).matches:
infoLabels = dict()
infoLabels['title'] = it[1]
infoLabels['mediatype'] = 'movie'
infoLabels['year'] = it[2]
itemlist.append(item.clone(action='findvideos', thumbnail = host + it[3].replace(' ','%20'), title = support.cleantitle(it[1]), url= it[0], infoLabels=infoLabels))
tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
if item.args == 'search':
next = support.match(data, patron=['<a name="nextlink".*list_submit\((\d+)\);.*(?:&rarr|→)']).matches
else:
next = support.match(data, patron=['<a href="([^"]+)">(?:&rarr|→)']).matches
if next:
if item.args == 'search':
item.url = "{}/?{}".format(host, support.urlencode({"story": item.search_text,"do": "search","subaction": "search", "search_start": next[0]}))
else:
item.url = next[0]
support.nextPage(itemlist = itemlist, item = item, next_page=item.url)
return itemlist
def search(item, text):
item.args = 'search'
item.url = "{}/?{}".format(host, support.urlencode({"story": text,"do": "search","subaction": "search", "search_start": item.page}))
item.search_text = text
try:
return peliculas(item)
except:
import sys
for line in sys.exc_info():
logger.error("search except: %s" % line)
return []
#action di default
def findvideos(item):
support.info('findvideos')
urls = []
data = support.match(item).data
matches = support.match(data, patron=r'<iframe.*?src="([^"]+)').matches
for m in matches:
if 'youtube' not in m and not m.endswith('.js'):
urls += support.match(m, patron=r'data-link="([^"]+)').matches
return support.server(item, urls)

0
channels/italiaserie.json Normal file → Executable file
View File

0
channels/italiaserie.py Normal file → Executable file
View File

0
channels/la7.json Normal file → Executable file
View File

45
channels/la7.py Normal file → Executable file
View File

@@ -4,7 +4,8 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
import requests import requests
from core import support from core import support, httptools
from platformcode import logger
DRM = 'com.widevine.alpha' DRM = 'com.widevine.alpha'
key_widevine = "https://la7.prod.conax.cloud/widevine/license" key_widevine = "https://la7.prod.conax.cloud/widevine/license"
@@ -27,7 +28,7 @@ def mainlist(item):
('Replay {bold}', ['', 'replay_channels'])] ('Replay {bold}', ['', 'replay_channels'])]
menu = [('Programmi TV {bullet bold}', ['/tutti-i-programmi', 'peliculas', '', 'tvshow']), menu = [('Programmi TV {bullet bold}', ['/tutti-i-programmi', 'peliculas', '', 'tvshow']),
('Teche La7 {bullet bold}', ['/i-protagonisti', 'peliculas', '', 'tvshow'])] ('Teche La7 {bullet bold}', ['/la7teche', 'peliculas', '', 'tvshow'])]
search = '' search = ''
return locals() return locals()
@@ -83,13 +84,18 @@ def search(item, text):
@support.scrape @support.scrape
def peliculas(item): def peliculas(item):
search = item.search search = item.search
action = 'episodios'
pagination = 20
disabletmdb = True disabletmdb = True
addVideolibrary = False addVideolibrary = False
downloadEnabled = False downloadEnabled = False
action = 'episodios'
patron = r'<a href="(?P<url>[^"]+)"[^>]+><div class="[^"]+" data-background-image="(?P<t>[^"]+)"></div><div class="titolo">\s*(?P<title>[^<]+)<' patron = r'<a href="(?P<url>[^"]+)"[^>]+><div class="[^"]+" data-background-image="(?P<t>[^"]+)"></div><div class="titolo">\s*(?P<title>[^<]+)<'
if 'la7teche' in item.url:
patron = r'<a href="(?P<url>[^"]+)" title="(?P<title>[^"]+)" class="teche-i-img".*?url\(\'(?P<thumb>[^\']+)'
def itemHook(item): def itemHook(item):
item.thumbnail = 'http:' + item.t if item.t.startswith('//') else item.t if item.t else item.thumbnail
item.fanart = item.thumb item.fanart = item.thumb
return item return item
return locals() return locals()
@@ -97,33 +103,18 @@ def peliculas(item):
@support.scrape @support.scrape
def episodios(item): def episodios(item):
data = support.match(item).data
# debug = True
action = 'findvideos' action = 'findvideos'
if '>puntate<' in data:
patronBlock = r'>puntate<(?P<block>.*?)home-block-outbrain'
url = support.match(data, patron=r'>puntate<[^>]+>[^>]+>[^>]+><a href="([^"]+)"').match
data += support.match(host + url).data
else:
item.url += '/video'
data = support.match(item).data
patron = r'(?:<a href="(?P<url>[^"]+)">[^>]+><div class="[^"]+" data-background-image="(?P<t>[^"]*)">[^>]+>[^>]+>[^>]+>(?:[^>]+>)?(?:[^>]+>){6}?)\s*(?P<title>[^<]+)<(?:[^>]+>[^>]+>[^>]+><div class="data">(?P<date>[^<]+))?|class="heading">[^>]+>(?P<Title>[^<]+).*?window.shareUrl = "(?P<Url>[^"]+)".*?poster:\s*"(?P<Thumb>[^"]+)", title: "(?P<desc>[^"]+)"'
patronNext = r'<a href="([^"]+)">'
addVideolibrary = False addVideolibrary = False
downloadEnabled = False downloadEnabled = False
def itemHook(item): if 'la7teche' in item.url:
if item.Thumb: item.t = item.Thumb patron = r'<a href="(?P<url>[^"]+)">\s*<div class="holder-bg">.*?data-background-image="(?P<thumb>[^"]+)(?:[^>]+>){4}\s*(?P<title>[^<]+)(?:(?:[^>]+>){2}\s*(?P<plot>[^<]+))?'
item.thumbnail = 'http:' + item.t if item.t.startswith('//') else item.t if item.t else item.thumbnail else:
if item.Title: item.title = support.typo(item.Title, 'bold') data = str(support.match(item.url, patron=r'"home-block home-block--oggi(.*?)</section>').matches)
if item.date: data += httptools.downloadpage(item.url + '/video').data
item.title = support.re.sub(r'[Pp]untata (?:del )?\d+/\d+/\d+', '', item.title)
item.title += support.typo(item.date, '_ [] bold') patron = r'item[^>]+>\s*<a href="(?P<url>[^"]+)">.*?image="(?P<thumb>[^"]+)(?:[^>]+>){4,5}\s*(?P<title>[\d\w][^<]+)(?:(?:[^>]+>){7}\s*(?P<title2>[\d\w][^<]+))?'
if item.desc: item.plot = item.desc patronNext = r'<a href="([^"]+)">'
item.forcethumb = True
item.fanart = item.thumbnail
return item
return locals() return locals()

0
channels/mediasetplay.json Normal file → Executable file
View File

29
channels/mediasetplay.py Normal file → Executable file
View File

@@ -38,8 +38,8 @@ sid = res.json()['response']['sid']
session.headers.update({'authorization': 'Bearer ' + Token}) session.headers.update({'authorization': 'Bearer ' + Token})
# sessione # sessione
sessionKey = session.get(sessionUrl.format(uuid=str(uuid.uuid4())), verify=False).json()['sessionKey'] #sessionKey = session.get(sessionUrl.format(uuid=str(uuid.uuid4())), verify=False).json()['sessionKey']
session.headers.update({'x-session': sessionKey}) #session.headers.update({'x-session': sessionKey})
pagination = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100][config.get_setting('pagination', 'mediasetplay')] pagination = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100][config.get_setting('pagination', 'mediasetplay')]
@@ -48,11 +48,20 @@ pagination = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100][config.get_setting('pagin
def mainlist(item): def mainlist(item):
top = [('Dirette {bold}', ['', 'live'])] top = [('Dirette {bold}', ['', 'live'])]
menu = [('Film {bullet bold}', ['/cinema', 'peliculas', {'uxReference':'filmUltimiArrivi'}, 'movie']), menu = [('Film Più Visti {submenu}', ['/cinema', 'peliculas', {'uxReference':'filmPiuVisti24H'}, 'movie']),
('Fiction / Serie TV {bullet bold}', ['/fiction', 'menu', '5acfcb3c23eec6000d64a6a4', 'tvshow']), ('Film ultimi arrivi {submenu}', ['/cinema', 'peliculas', {'uxReference':'filmUltimiArrivi'}, 'movie']),
('Programmi TV{ bullet bold}', ['/programmitv', 'menu', '5acfc8011de1c4000b6ec953', 'tvshow']), ('Film Da Non Perdere {submenu}', ['/cinema', 'peliculas', {'uxReference':'filmClustering'}, 'movie']),
('Documentari {bullet bold}', ['/documentari', 'menu', '5bfd17c423eec6001aec49f9', 'undefined']), ('Fiction e Serie Tv del momento {submenu}', ['/fiction', 'peliculas', {'uxReference':'fictionSerieTvDelMomento'}, 'tvshow']),
('Kids {bullet bold}', ['/kids', 'menu', '5acfcb8323eec6000d64a6b3', 'undefined'])] ('Serie TV Piu Viste {submenu}', ['/fiction', 'peliculas', {'uxReference':'serieTvPiuViste24H'}, 'tvshow']),
('Soap del momento {submenu}', ['/cinema', 'peliculas', {'uxReference':'fictionSerieTvParamsGenre', 'params': 'genre≈Soap opera'}, 'tvshow']),
('Programmi TV Prima serata{ submenu}', ['/programmitv', 'peliculas', {'uxReference':'stagioniPrimaSerata'}, 'tvshow']),
('Programmi TV Daytime{ submenu}', ['/programmitv', 'peliculas', {'uxReference':'stagioniDaytime'}, 'tvshow']),
('Talent e reality {submenu}', ['/talent', 'peliculas', {'uxReference':'multipleBlockProgrammiTv', 'userContext' :'iwiAeyJwbGF0Zm9ybSI6IndlYiJ9Aw'}, 'tvshow']),
('Kids Evergreen {submenu}', ['/kids', 'peliculas', {'uxReference':'kidsMediaset' }, 'undefined']),
('Kids Boing {submenu}', ['/kids', 'peliculas', {'uxReference':'kidsBoing' }, 'undefined']),
('Kids Cartoonito {submenu}', ['/kids', 'peliculas', {'uxReference':'kidsCartoonito' }, 'undefined']),
('Documentari più visti {submenu}', ['/documentari', 'peliculas', {'uxReference': 'documentariPiuVisti24H'}, 'undefined']),
]
search = '' search = ''
return locals() return locals()
@@ -209,7 +218,7 @@ def episodios(item):
order = 'desc' if '/programmi-tv/' in item.url else 'asc' order = 'desc' if '/programmi-tv/' in item.url else 'asc'
itemlist = [] itemlist = []
res = requests.get('https://feed.entertainment.tv.theplatform.eu/f/PR1GhC/mediaset-prod-all-programs-v2?byCustomValue={subBrandId}{' + item.subbrand +'}&sort=:publishInfo_lastPublished|' + order + ',tvSeasonEpisodeNumber').json()['entries'] res = requests.get('https://feed.entertainment.tv.theplatform.eu/f/PR1GhC/mediaset-prod-all-programs-v2?byCustomValue={subBrandId}{' + item.subbrand +'}&range=0-10000&sort=:publishInfo_lastPublished|' + order + ',tvSeasonEpisodeNumber').json()['entries']
for it in res: for it in res:
thumb = '' thumb = ''
@@ -292,8 +301,8 @@ def findvideos(item):
def get_from_id(item): def get_from_id(item):
sessionKey = session.get(sessionUrl.format(uuid=str(uuid.uuid4())), verify=False).json()['sessionKey'] #sessionKey = session.get(sessionUrl.format(uuid=str(uuid.uuid4())), verify=False).json()['sessionKey']
session.headers.update({'x-session': sessionKey}) #session.headers.update({'x-session': sessionKey})
res = session.get(entry.format(id=item.args)).json() res = session.get(entry.format(id=item.args)).json()
if 'components' in res: if 'components' in res:
id = quote(",".join(res["components"])) id = quote(",".join(res["components"]))

0
channels/mediasetplay.py.old Normal file → Executable file
View File

2
channels/metalvideo.json Normal file → Executable file
View File

@@ -1,7 +1,7 @@
{ {
"id": "metalvideo", "id": "metalvideo",
"name": "Metal Video", "name": "Metal Video",
"active": true, "active": false,
"language": ["*"], "language": ["*"],
"thumbnail": "metalvideo.png", "thumbnail": "metalvideo.png",
"banner": "metalvideo.png", "banner": "metalvideo.png",

37
channels/metalvideo.py Normal file → Executable file
View File

@@ -9,37 +9,33 @@ host = 'https://metalvideo.com'
headers = {'X-Requested-With': 'XMLHttpRequest'} headers = {'X-Requested-With': 'XMLHttpRequest'}
@support.scrape @support.menu
def mainlist(item): def mainlist(item):
menu = [('Generi',['', 'genres']),
('Ultimi Video',['/videos/latest', 'peliculas']),
('Top Video',['/videos/top', 'peliculas']),
('Cerca...',['','search',])]
return locals()
@support.scrape
def genres(item):
item.url = host item.url = host
action = 'peliculas' action = 'peliculas'
patronBlock = r'<ul class="dropdown-menu(?P<block>.*?)</ul>\s*</div' patronBlock = r'<div class="swiper-slide">(?P<block>.*?)<button'
patron = r'<a href="(?P<url>[^"]+)"(?: class="")?>(?P<title>[^<]+)<' patron = r'class="" href="(?P<url>[^"]+)[^>]+>(?P<title>[^<]+)<'
def itemHook(item): def itemHook(item):
item.thumbnail = support.thumb('music') item.thumbnail = support.thumb('music')
item.contentType = 'music' item.contentType = 'music'
return item return item
def itemlistHook(itemlist):
itemlist.pop(0)
itemlist.append(
support.Item(
channel=item.channel,
title=support.typo('Cerca...', 'bold'),
contentType='music',
url=item.url,
action='search',
thumbnail=support.thumb('search')))
support.channel_config(item, itemlist)
return itemlist
return locals() return locals()
@support.scrape @support.scrape
def peliculas(item): def peliculas(item):
# debug=True # debug=True
action = 'findvideos' action = 'findvideos'
patron= r'<img src="[^"]+" alt="(?P<title>[^"]+)" data-echo="(?P<thumb>[^"]+)"(?:[^>]+>){7}<a href="(?P<url>[^"]+)"' patron= r'<a href="(?P<url>[^"]+)"[^>]+>\s*<img src="(?P<thumb>[^"]+)" alt="(?P<title>[^"]+)"[^>]*>'
patronNext = r'<a href="([^"]+)">(?:&raquo|»)' patronNext = r'<a href="([^"]+)" data-load="[^"]+" class="[^"]+" title="Next'
typeContentDict = {'': 'music'} typeContentDict = {'': 'music'}
def itemHook(item): def itemHook(item):
item.contentType = 'music' item.contentType = 'music'
@@ -49,12 +45,13 @@ def peliculas(item):
def findvideos(item): def findvideos(item):
return support.server(item, Videolibrary=False) data = support.match(item, patron=r'<source src="[^"]+').match
return support.server(item, Videolibrary=False, data=data)
def search(item, text): def search(item, text):
support.info(text) support.info(text)
item.url = host + '/search.php?keywords=' + text + '&video-id=' item.url = host + '/search?keyword=' + text
try: try:
return peliculas(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore

0
channels/mondoserietv.json Normal file → Executable file
View File

0
channels/mondoserietv.py Normal file → Executable file
View File

0
channels/paramount.json Normal file → Executable file
View File

0
channels/paramount.py Normal file → Executable file
View File

0
channels/piratestreaming.json Normal file → Executable file
View File

0
channels/piratestreaming.py Normal file → Executable file
View File

0
channels/plutotv.json Normal file → Executable file
View File

12
channels/plutotv.py Normal file → Executable file
View File

@@ -6,7 +6,7 @@
import uuid, datetime import uuid, datetime
from platformcode import logger, config from platformcode import logger, config
from core.item import Item from core.item import Item
from core import support, httptools from core import jsontools, support, httptools
host = support.config.get_channel_url() host = support.config.get_channel_url()
@@ -14,17 +14,20 @@ api = 'https://api.pluto.tv'
UUID = 'sid={}&deviceId={}'.format(uuid.uuid1().hex, uuid.uuid4().hex) UUID = 'sid={}&deviceId={}'.format(uuid.uuid1().hex, uuid.uuid4().hex)
vod_url = '{}/v3/vod/categories?includeItems=true&deviceType=web&'.format(api, UUID) vod_url = '{}/v3/vod/categories?includeItems=true&deviceType=web&'.format(api, UUID)
@support.menu @support.menu
def mainlist(item): def mainlist(item):
top = [('Dirette {bold}', ['/it/live-tv/', 'live'])] top = [('Dirette {bold}', ['/it/live-tv/', 'live'])]
menu = sorted([(it['name'], ['/it/on-demand', 'peliculas', it['items']]) for it in httptools.downloadpage(vod_url).json['categories'][1:]]) menu = [('Categorie', ['', 'category'])]
search = '' search = ''
return locals() return locals()
@support.menu
def category(item):
menu = sorted([(it['name'], ['/it/on-demand', 'peliculas', it['items']]) for it in httptools.downloadpage(vod_url).json['categories'][1:]])
return locals()
def live(item): def live(item):
logger.debug() logger.debug()
@@ -75,6 +78,7 @@ def peliculas(item):
logger.debug() logger.debug()
itemlist = [] itemlist = []
recordlist = [] recordlist = []
for i, it in enumerate(item.args): for i, it in enumerate(item.args):
if item.search in it['name'].lower(): if item.search in it['name'].lower():
itm = Item(channel=item.channel, itm = Item(channel=item.channel,
@@ -88,7 +92,7 @@ def peliculas(item):
thumbnail= it['covers'][0]['url'], thumbnail= it['covers'][0]['url'],
fanart= it['covers'][2]['url'] if len(it['covers']) > 2 else '', fanart= it['covers'][2]['url'] if len(it['covers']) > 2 else '',
id= it['_id'], id= it['_id'],
videourl= it['stitched']['urls'][0]['url'].split('?')[0]) videourl= it.get('stitched', {}).get('urls', [{}])[0].get('url','').split('?')[0])
if i < 20 or item.search: if i < 20 or item.search:
itemlist.append(itm) itemlist.append(itm)

Some files were not shown because too many files have changed in this diff Show More