943 Commits

Author SHA1 Message Date
22b61234a9 update updater config
All checks were successful
Update channel domains / update (push) Successful in 17s
2025-01-17 22:17:29 +01:00
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
Alhaziel01
6c43f5101b Fix certifi per Kodi 18 (potrebbe richiedere reinstallazione) 2022-09-29 18:34:38 +02:00
Alhaziel01
9109d6ec55 Aggiornamento certifi (Fix Mediaset) 2022-09-28 18:59:53 +02:00
Alhaziel01
f6a10e1eda Fix SC 2022-09-28 08:23:36 +02:00
Alhaziel01
1542f6493a Fix AU 2022-09-27 10:44:32 +02:00
Alhaziel01
10f0899e81 StreamingCommunityWS 2022-09-27 09:26:40 +02:00
marco
d5ec41e305 Prova riattivazione tantifilm 2022-09-26 20:57:02 +02:00
marco
0be70c79b1 Merge remote-tracking branch 'origin/master' 2022-09-26 20:56:50 +02:00
marco
36b8912a18 Fix eurostreaming_actor 2022-09-26 20:56:42 +02:00
Alhaziel01
b66d292ff2 Fix SC 2022-09-26 19:50:28 +02:00
Alhaziel01
d723f0552b Fix SC e AU 2022-09-26 19:44:46 +02:00
Alhaziel01
4cfb971475 Fix streamingcommunity e animeunity 2022-09-26 18:16:41 +02:00
Alhaziel01
b0f3e4022c Fix streamingcommunity e animeunity 2022-09-26 09:15:56 +02:00
marco
7e2c5a6b4b Cambio dominio SCWS -> fix streamingcommunity e animeunity 2022-09-25 14:16:30 +02:00
github-actions[bot]
a832a90dfa Aggiornamento domini 2022-09-23 17:55:37 +00:00
marco
be782638d1 completato inspect.stack senza contesto + prova ricerca globale 2022-09-22 21:03:38 +02:00
marco
d3e6779ea5 Merge remote-tracking branch 'origin/master' 2022-09-21 20:27:51 +02:00
marco
c3ba3a1be6 Prova inspect.stack senza contesto 2022-09-21 20:27:44 +02:00
github-actions[bot]
7feac8a061 Aggiornamento domini 2022-09-21 17:54:23 +00:00
marco
e937b70a65 Sostituito parzialmente inspect.stack 2022-09-20 19:51:54 +02:00
marco
51042bf9df Fix ricerca discoveryplus e filmpertutti, aggiornamento episodi eurostreaming 2022-09-18 14:52:57 +02:00
marco
ef6e3eecb4 KoD 1.7.6 2022-09-15 19:15:48 +02:00
Dexter Morgan
518d99893a Update Streamlare and Streamsb (#394) 2022-09-15 18:45:59 +02:00
Alhaziel01
56869b48d0 Correzione refuso in selezione scraper serie tv 2022-09-15 16:06:43 +02:00
Alhaziel01
4a8b3fd1b6 Disabilitato CB Anime e Tantifilm 2022-09-15 15:58:49 +02:00
Alhaziel01
de8d6ff46d Aggiornato Cloudscraper 2022-09-15 15:42:27 +02:00
Alhaziel01
667f7f31ff Fix GuardaSerie Cam 2022-09-15 15:39:04 +02:00
Alhaziel01
1102ad2191 fix Mediaset Play 2022-09-15 08:59:33 +02:00
github-actions[bot]
88c011ec75 Aggiornamento domini 2022-09-13 17:53:05 +00:00
Alhaziel01
d83541b5cb Fix AnimeForce e AnimeSaturn 2022-09-08 18:39:56 +02:00
Alhaziel01
24c5489d2d Fix Casacinema 2022-09-07 19:22:47 +02:00
github-actions[bot]
50372763dc Aggiornamento domini 2022-09-03 17:41:39 +00:00
marco
a5c265ac40 Merge remote-tracking branch 'origin/master' 2022-08-26 20:45:00 +02:00
marco
77dc4168ff Ridotta scadenza cache DNS -> 1h 2022-08-26 20:44:54 +02:00
Alhaziel01
d20384c9cf Fix Film Streaming 2022-08-24 08:57:47 +02:00
Alhaziel01
fb80f47bc8 Fix Tmdb In caso non si conosca il mediatype e sia presente l'anno 2022-08-23 18:08:37 +02:00
Alhaziel01
f590067983 Migliorie contextmenu 2022-08-20 11:32:22 +02:00
Alhaziel01
5383448d44 Fix Menu Contestuale in Libreria 2022-08-20 11:07:44 +02:00
Alhaziel01
9e991c2d49 Fix Impostazioni aggiornamento videoteca 2022-08-20 10:57:44 +02:00
Alhaziel01
555c0491f2 Disabilitato DresmSub 2022-08-19 18:18:12 +02:00
marco
1fda900526 Prova scws 2022-08-19 15:26:24 +02:00
Alhaziel01
17d90cd906 Seleziona server in Libreria se autoplay è attivo 2022-08-19 12:19:35 +02:00
Alhaziel01
d4129b0da2 Test Aggiornamento Videoteca Ad ogni avvio di Kodi e giornaliero 2022-08-19 10:48:22 +02:00
Alhaziel01
80261ee7ce Fix Cinemalibero (Wrestling) 2022-08-19 10:08:02 +02:00
Alhaziel01
2f5cb8d959 IlGenioDelloStreaming CAM: Parziale fix ricerca 2022-08-18 19:30:11 +02:00
Alhaziel01
1bfc5841f8 Fix Altadefinizione 2022-08-18 19:06:59 +02:00
Alhaziel01
89e13e71f8 Fix Altadefinizione 2022-08-18 18:45:24 +02:00
Alhaziel01
2d67edd310 ilCorsroNero, Fix Serie TV 2022-08-18 15:17:56 +02:00
github-actions[bot]
352df6dea6 Aggiornamento domini 2022-08-11 17:42:04 +00:00
marco
636371b658 Prova IPv6 #3 2022-08-09 14:07:49 +02:00
marco
c190f9e3d7 Prova IPv6 # 2022-08-09 13:55:16 +02:00
marco
812b4a5b08 Prova IPv6 #2 2022-08-09 12:46:25 +02:00
marco
22337380aa Prova IPv6 2022-08-08 20:10:17 +02:00
marco
83aab2a115 Updater: fix notifica 2022-08-03 20:32:00 +02:00
marco
c9798071f3 Merge remote-tracking branch 'origin/master' 2022-08-02 19:26:59 +02:00
marco
1cc2790198 Fix lag ricerca su ATV quando avviata da sezioni TMDB 2022-08-02 19:26:36 +02:00
Alhaziel01
ed82c22823 Fix Canale Url 2022-08-02 19:01:20 +02:00
Alhaziel01
0042142878 Fix Ok.ru 2022-08-02 19:00:59 +02:00
marco
422d21d2a0 Riattivato HD4ME 2022-08-01 19:15:07 +02:00
marco
2c4e0330ba Disattivati canali offline da tempo (guardaserieclick, guardaserieicu, hd4me, italiaserie, piratestreaming, serietvu) 2022-07-31 20:05:33 +02:00
Alhaziel01
20b5a52d40 Fix Altadefinizione: Film in Videoteca 2022-07-30 15:26:07 +02:00
Alhaziel01
d300adbdb4 Aggiunta opzione per aggiornare la Videoteca ad ogni avvio di Kodi 2022-07-29 15:13:07 +02:00
Alhaziel01
aec6f6811e Fix Sottotitoli Community Channels 2022-07-28 18:49:47 +02:00
Alhaziel01
86bff2be1e Test: Sottotitoli nei Community Channels 2022-07-28 16:33:33 +02:00
github-actions[bot]
bfff10a459 Aggiornamento domini 2022-07-26 17:48:34 +00:00
github-actions[bot]
d93ac324ce Aggiornamento domini 2022-07-25 17:50:46 +00:00
github-actions[bot]
96b2a4dbfd Aggiornamento domini 2022-07-21 17:50:03 +00:00
github-actions[bot]
fa188aa719 Aggiornamento domini 2022-07-13 17:50:18 +00:00
Alhaziel01
65475409b6 Fix Cinemalibero (Wrestling) 2022-07-13 15:41:55 +02:00
Alhaziel01
16d3ad375f Fix per Kodi 18 2022-07-13 12:25:25 +02:00
Alhaziel01
50b8ac8c08 Fix rinumerazione Toonitalia 2022-07-12 14:56:23 +02:00
Alhaziel01
794828696b Fix CB01 2022-07-12 11:23:18 +02:00
Alhaziel01
26da64bceb Fix Community Channels 2022-07-11 09:43:05 +02:00
github-actions[bot]
20f9048225 Aggiornamento domini 2022-07-10 17:44:06 +00:00
github-actions[bot]
7d7f191f3c Aggiornamento domini 2022-07-09 17:43:17 +00:00
github-actions[bot]
89c577dc32 Aggiornamento domini 2022-07-08 17:52:03 +00:00
Alhaziel01
52ad47a924 Disable seep con launcher 2022-07-08 09:14:19 +02:00
Alhaziel01
bf9e875195 Selezione Scraper (TMDb TvSows come default) 2022-07-05 19:54:27 +02:00
Alhaziel01
eca909a5f8 Community Channels Fix Ordine alfabetico con paginazione 2022-07-05 12:00:10 +02:00
Alhaziel01
2198e6a8a8 Possibile Fix Episodio Successivo 2022-07-05 11:59:08 +02:00
Alhaziel01
005236f52e CB01 Fix voci sottomenu 2022-07-04 20:03:13 +02:00
Alhaziel01
4441f443b4 CB01 Aggiunto tag 3D se presente 2022-07-04 19:51:52 +02:00
Alhaziel01
fd4071bc36 Fix Toonitalia 2022-07-04 19:42:37 +02:00
Alhaziel01
f7639a7321 Disabilita changelog all'avvio se "Notifiche aggiornamenti" è disabilitato 2022-07-04 17:05:47 +02:00
Alhaziel01
44808ac042 Possibiltà di disattivare la ricerca informazioni da TMDB per la sezione novità 2022-07-04 17:02:44 +02:00
Alhaziel01
95ff7ddeea Ricerca Informazioni in sezione Novità 2022-07-04 16:32:33 +02:00
Alhaziel01
09df8697ea Fix VVVVID 2022-07-04 16:32:04 +02:00
github-actions[bot]
3b746a5fa1 Aggiornamento domini 2022-07-01 17:45:05 +00:00
github-actions[bot]
7c41d4a16f Aggiornamento domini 2022-06-29 18:06:54 +00:00
github-actions[bot]
68b126153b Aggiornamento domini 2022-06-24 17:49:35 +00:00
github-actions[bot]
bff9e65af6 Aggiornamento domini 2022-06-23 17:49:23 +00:00
marco
f7d661dabf Nuovi domini streamlare e streamsb, possibile fix streamsb 2022-06-22 20:08:46 +02:00
github-actions[bot]
336470cc96 Aggiornamento domini 2022-06-16 17:43:56 +00:00
github-actions[bot]
43da897cf3 Aggiornamento domini 2022-06-15 17:41:57 +00:00
github-actions[bot]
51da0d223d Aggiornamento domini 2022-06-14 17:42:59 +00:00
github-actions[bot]
a1236b244d Aggiornamento domini 2022-06-10 17:42:53 +00:00
github-actions[bot]
a33b455d85 Aggiornamento domini 2022-06-09 17:42:42 +00:00
Dexter Morgan
bf04f60efd Eurostreaming_Actor: fix per range anno 2022-06-07 21:06:01 +02:00
github-actions[bot]
0576e101d9 Aggiornamento domini 2022-06-04 17:38:32 +00:00
Dexter Morgan
47b1dca226 Eurostreaming_Actor (#383) 2022-06-04 19:02:52 +02:00
marco
f3bd94fd2b Merge remote-tracking branch 'origin/master' 2022-05-30 19:58:10 +02:00
marco
e0b99a5491 Reinserito settaggio per disattivare notifica trakt 2022-05-30 19:58:04 +02:00
github-actions[bot]
5fbf15b83b Aggiornamento domini 2022-05-28 17:41:53 +00:00
marco
4b71a0d708 Fix filmstreaming casi particolari, nuovo server goodstream 2022-05-28 16:26:51 +02:00
marco
1401d79879 Merge remote-tracking branch 'origin/master' 2022-05-28 12:04:36 +02:00
marco
7fc11153fd Fix filmstreaming 2022-05-28 12:04:26 +02:00
marco
d79e9f358c KoD 1.7.5 2022-05-28 11:48:52 +02:00
github-actions[bot]
aaab9b867d Aggiornamento domini 2022-05-27 17:47:05 +00:00
Alhaziel01
4ac8a7d863 Fix Altadefinizione01 2022-05-27 18:11:54 +02:00
marco
ebd3473750 Supporto 2 domini StreamSB, migliorie minori 2022-05-26 20:41:50 +02:00
Alhaziel01
074e7b9c79 Fix Nuovi Episodi in Videoteca (in caso di path completo) 2022-05-20 17:42:55 +02:00
github-actions[bot]
f85f8a94d5 Aggiornamento domini 2022-05-18 17:49:08 +00:00
github-actions[bot]
71b7f72f13 Aggiornamento domini 2022-05-13 17:49:58 +00:00
github-actions[bot]
ccf72d517b Aggiornamento domini 2022-05-08 17:42:51 +00:00
Alhaziel01
6f9a35ebbc Fix Discovery + 2022-05-05 16:07:45 +02:00
marco
7ab66fbb8a Fix alternativo a redirect 2022-05-04 19:57:21 +02:00
marco
5484fcc661 Merge remote-tracking branch 'origin/master' 2022-05-04 19:17:09 +02:00
github-actions[bot]
1a782fd8da Aggiornamento domini 2022-04-30 17:41:27 +00:00
github-actions[bot]
33ba9fea0d Aggiornamento domini 2022-04-29 17:44:23 +00:00
marco
4f4d4bc54f Revert "Fix Redirect Dominio"
This reverts commit 9e3f74f453.
2022-04-28 20:39:30 +02:00
marco
336e485f60 Revert "Fix Redirect Dominio"
This reverts commit 6aabebb232.
2022-04-28 20:39:25 +02:00
github-actions[bot]
6c3976424a Aggiornamento domini 2022-04-28 17:43:46 +00:00
marco
72ba8d6efd Merge remote-tracking branch 'origin/master' 2022-04-28 18:30:54 +02:00
marco
d39194384b Fix Cerca con KoD se si usa la vecchia ricerca 2022-04-28 18:30:45 +02:00
github-actions[bot]
58287a76ac Aggiornamento domini 2022-04-27 17:47:58 +00:00
github-actions[bot]
fc924e604d Aggiornamento domini 2022-04-22 17:48:58 +00:00
Alhaziel01
1398e96ed6 Fix Aniplay 2022-04-20 19:21:35 +02:00
Alhaziel01
6aabebb232 Fix Redirect Dominio 2022-04-20 19:16:08 +02:00
Alhaziel01
9e3f74f453 Fix Redirect Dominio 2022-04-16 17:07:38 +02:00
Alhaziel01
cc9445ae7c Fix Ricerca IMDB 2022-04-16 17:01:50 +02:00
Alhaziel01
61057ded3b Fix Altadefinizione 2022-04-16 17:01:38 +02:00
github-actions[bot]
b3a552e7ef Aggiornamento domini 2022-04-12 17:44:56 +00:00
github-actions[bot]
7b64e558e7 Aggiornamento domini 2022-04-11 17:43:13 +00:00
Alhaziel01
ee5bde91a5 Test: Fix Viste su skin di terze parti 2022-04-08 19:16:41 +02:00
Alhaziel01
e33e46570f Rimozione blocco plugin esterni 2022-04-08 16:03:00 +02:00
github-actions[bot]
94912089b7 Aggiornamento domini 2022-04-07 17:39:09 +00:00
marco
1135c9b96d Fix streamlare 2022-04-03 13:34:24 +02:00
Alhaziel01
82346899f1 Blocco addon-esterni 2022-04-02 16:51:02 +02:00
Alhaziel01
49e609b4e0 Fix Cinemalibero e StreamingCommunity 2022-04-02 10:17:27 +02:00
marco
75d83f423c Fix dirette mediaset 2022-03-30 21:05:10 +02:00
marco
6c6d10f35c Aggiornamento domini 2022-03-30 20:35:52 +02:00
github-actions[bot]
92d009ccd7 Aggiornamento domini 2022-03-26 17:37:39 +00:00
github-actions[bot]
70e3deaa31 Aggiornamento domini 2022-03-25 17:39:45 +00:00
github-actions[bot]
4eeb4f7627 Aggiornamento domini 2022-03-24 17:48:05 +00:00
marco
152633e912 Aggiornamento domini 2022-03-23 21:05:31 +01:00
Alhaziel01
1c07e53788 Test fix episodio successivo 2022-03-15 19:22:23 +01:00
Alhaziel01
ad2804a32c Fix *Tutte le stagioni 2022-03-15 18:24:13 +01:00
Alhaziel01
247630947f Merge branch 'master' of https://github.com/kodiondemand/addon 2022-03-15 16:33:28 +01:00
Alhaziel01
a2f03b5f55 Fix InfoWindow 2022-03-15 16:33:24 +01:00
marco
3f9ecc60eb 1337x -> fix doppio pulsante "successivo" 2022-03-14 20:46:32 +01:00
github-actions[bot]
4b5488b445 Aggiornamento domini 2022-03-13 17:38:47 +00:00
github-actions[bot]
51e19264f4 Aggiornamento domini 2022-03-12 17:37:04 +00:00
github-actions[bot]
4af7e668cc Aggiornamento domini 2022-03-11 17:40:04 +00:00
Alhaziel01
26cd6d4f24 Aggiunta voce seleziona server nel menu contestuale se autoplay è attivo 2022-03-09 19:10:24 +01:00
Alhaziel01
2d9413af9d Videoteca refresh dopo cancellazione canale 2022-03-09 18:43:30 +01:00
Alhaziel01
f3011b5b5d Fix 1337x e Film Streaming 2022-03-08 19:30:36 +01:00
Alhaziel01
2b8b1d42f2 Fix Episodio successivo 2022-03-08 19:08:31 +01:00
Alhaziel01
f92894e877 Fix Community Channels 2022-03-07 20:12:48 +01:00
github-actions[bot]
0fca66e7f4 Aggiornamento domini 2022-03-07 17:40:45 +00:00
Alhaziel01
5cc3290bef Completato 1337x 2022-03-05 16:23:35 +01:00
Alhaziel01
0e1c544add 1337x WIP 2022-03-04 19:58:26 +01:00
Alhaziel01
4805152a7d Nuovo Canale Film Streaming 2022-03-04 17:40:06 +01:00
Alhaziel01
4cea872956 Fix Discovery + 2022-03-04 16:15:41 +01:00
Alhaziel01
c7fad20777 Fix Tempo di Visione Episodi 2022-03-02 12:45:35 +01:00
Alhaziel01
7de34da0b8 Fix DoodStream 2022-02-28 19:04:39 +01:00
Matteo Sammarco
7c9da143a9 fix Mylinks-Movies does not open for concatenating a string and a dict (#379)
Co-authored-by: Matteo Sammarco <matteo.sammarco@axa-groupsolutions.com>
2022-02-28 18:14:30 +01:00
Alhaziel01
e3544248ee Fix doodstream 2022-02-26 17:27:20 +01:00
github-actions[bot]
87cfef27ea Aggiornamento domini 2022-02-25 17:38:18 +00:00
github-actions[bot]
8803f1a1dd Aggiornamento domini 2022-02-24 17:37:53 +00:00
marco
823b234549 Nuovo dominio streamingITA 2022-02-23 20:33:39 +01:00
Alhaziel01
06ea564dbf Fix Menu Film Altadefinizione 2022-02-23 16:50:31 +01:00
Alhaziel01
5923da3325 Fix riapertura finestra server in caso di video brevi 2022-02-23 16:50:14 +01:00
Alhaziel01
12943c26d9 Aggiunta alla videoteca da menu contestuale casacinema e filmpertutti 2022-02-23 16:03:23 +01:00
Alhaziel01
afa381d6ba Fix aggiungi a videoteca da ricerca globale 2022-02-23 15:46:30 +01:00
Alhaziel01
911d4b2a9d Fix Server bloccati 2022-02-23 10:45:26 +01:00
Alhaziel01
e8ad9c3c0f Fix impossibilità di usare tasto OK a fine riproduzione 2022-02-22 19:00:26 +01:00
Alhaziel01
46302a0f7f Test Fix Aggiungi alla videoteca da ricerca globale 2022-02-22 18:37:42 +01:00
Alhaziel01
77e9338661 Fix Server bloccati 2022-02-22 18:37:08 +01:00
Alhaziel01
647fdf9987 Autoplay spostato in serverWindow 2022-02-19 16:22:57 +01:00
Alhaziel01
4396e4ce15 Fix Finestra server 2022-02-18 10:22:33 +01:00
Alhaziel01
905e9aeafe Fix Lista episodi da ricerca globale 2022-02-17 17:51:13 +01:00
Alhaziel01
bbd10b5f76 Fix Riapertura finestra server in caso di errore 2022-02-17 17:34:11 +01:00
marco
ff5a009167 Fix pagina successiva da ricerga globale -> altre opzioni 2022-02-15 18:34:52 +01:00
marco
4ef558dd5b altadefinizione: aggiungi in videoteca, altadefinizione01: niente paginazione in ultimi aggiunti 2022-02-14 19:55:19 +01:00
Alhaziel01
3b89ecd157 Fix Altadefinizione 2022-02-12 15:18:03 +01:00
marco
fae18dd562 KoD 1.7.4 2022-02-12 12:54:46 +01:00
marco
a1e14e3f51 Disattivato temporaneamente altadefinizione 2022-02-12 12:53:27 +01:00
marco
d02891bb2b Fix streamsb 2022-02-12 11:29:49 +01:00
marco
7eec8ffbc0 Fix streamlare 2022-02-09 20:30:22 +01:00
Alhaziel01
84b5d77139 StreamingCommunity Fix copertine mancanti 2022-02-07 18:00:17 +01:00
Alhaziel01
5c072c8530 Fix Gestione Viste 2022-02-07 17:21:20 +01:00
Alhaziel01
41ed3c2210 Merge branch 'master' of https://github.com/kodiondemand/addon 2022-02-07 16:21:31 +01:00
Alhaziel01
88251e9f1a Test gestione viste via db 2022-02-07 16:21:21 +01:00
github-actions[bot]
cd7df20b9f Aggiornamento domini 2022-02-06 17:37:07 +00:00
github-actions[bot]
4e8c12ed50 Aggiornamento domini 2022-02-05 17:35:12 +00:00
Alhaziel01
49ad5154cf - Fix selezione viste e pop-up disabilitato
- Miglioria sottotitoli StreamingCommunity
 - Piccolo fix in launcher
2022-02-05 18:24:22 +01:00
Alhaziel01
9e06b9acb5 Fix Salva Link 2022-02-05 16:48:54 +01:00
Alhaziel01
1e2bd87b7e Merge branch 'master' of https://github.com/kodiondemand/addon 2022-02-05 15:55:41 +01:00
Alhaziel01
0cf74df051 Test workaround gestione viste 2022-02-05 15:55:38 +01:00
marco
9342bfaa06 Fix canali mancanti ricerca globale da sezioni tmdb 2022-02-05 14:07:00 +01:00
Alhaziel01
ff4e30dcd7 Aggiornato Nome e logo per Mediaset 2022-02-05 11:59:52 +01:00
Alhaziel01
d3240f4b78 Probabile fix gestione viste (cache attiva) 2022-02-05 11:39:44 +01:00
Alhaziel01
69d5088b85 Merge branch 'master' of https://github.com/kodiondemand/addon 2022-02-04 19:45:07 +01:00
Alhaziel01
566628b774 Fix Riproduzione CB01 2022-02-04 19:45:01 +01:00
github-actions[bot]
bf8417674e Aggiornamento domini 2022-02-04 17:35:24 +00:00
Alhaziel01
c829292cc3 Fix Play da Ricerca Globale 2022-02-04 18:29:24 +01:00
Alhaziel01
0d34139dea Fix riproduzione da ricerca globale 2022-02-03 20:00:31 +01:00
marco
788cfcff22 Rferer corretto per i link diretti (fix animesaturn) 2022-02-03 19:42:16 +01:00
marco
1d9b5c9dd1 Piccole migliorie cinemalibero e guardaseriecam 2022-02-02 20:57:38 +01:00
github-actions[bot]
30842961d2 Aggiornamento domini 2022-02-02 17:38:29 +00:00
github-actions[bot]
537668906f Aggiornamento domini 2022-01-31 17:37:19 +00:00
marco
69fa5e7bf4 updateDomains: evita di modificare findhost 2022-01-25 17:34:50 +01:00
github-actions[bot]
2de8b6c7e0 Aggiornamento domini 2022-01-23 17:38:21 +00:00
marco
6324d3124c ops 2022-01-23 16:00:55 +01:00
github-actions[bot]
a58129f03c Aggiornamento domini 2022-01-23 14:58:05 +00:00
marco
d7451c421d Fix updateDomains, pulizia 2022-01-23 15:55:29 +01:00
Alhaziel01
61b50ec301 Fix Altadefinizione 2022-01-21 18:24:28 +01:00
Alhaziel01
73247722da Fix Adesso in onda e Altadefinizione 2022-01-20 20:12:25 +01:00
github-actions[bot]
724e61820e Aggiornamento domini 2022-01-20 17:46:58 +00:00
Alhaziel01
cf41316ffc Fix Dirette Pluto TV 2022-01-19 20:09:35 +01:00
Alhaziel01
613b9abcc6 Aggiunto Altadefinizione (WIP) 2022-01-19 19:29:09 +01:00
github-actions[bot]
7e7c7e8654 Aggiornamento domini 2022-01-19 17:46:47 +00:00
Alhaziel01
3b3902cb29 Disattivato Paramount Network 2022-01-19 09:47:38 +01:00
Alhaziel01
9b65bb4291 Merge branch 'master' of https://github.com/kodiondemand/addon 2022-01-19 09:47:04 +01:00
Alhaziel01
104c2d4fd4 Fix Pluto TV 2022-01-19 09:47:01 +01:00
marco
0e915e591a Miglioria bot aggiornamento domini 2022-01-18 20:57:42 +01:00
Alhaziel01
8221e09825 Aggiunto Pluto TV 2022-01-18 20:22:43 +01:00
marco
71cb39ddc4 Fix streamingcommunity 2022-01-17 20:27:40 +01:00
Alhaziel01
aacdd5d749 Fix Mediaset 2022-01-17 16:39:02 +01:00
github-actions[bot]
db39d6bed9 Aggiornamento domini 2022-01-16 17:52:11 +00:00
marco
187b66fd7c Spostato import 2022-01-15 20:39:15 +01:00
Alhaziel01
c2625c9ba8 Merge branch 'master' of https://github.com/kodiondemand/addon 2022-01-15 19:40:57 +01:00
Alhaziel01
64fe224029 Gestione viste per "Adesso in Onda" 2022-01-15 19:40:23 +01:00
github-actions[bot]
471a7bb74b Aggiornamento domini 2022-01-15 17:49:52 +00:00
Alhaziel01
938b1b5c69 Fix Gestione Viste 2022-01-15 18:25:06 +01:00
Alhaziel01
8bad53bdd5 Fix MediasetPlay 2022-01-15 16:51:21 +01:00
Alhaziel01
e0eef19c78 Kodi 20 Nexus in get_platform 2022-01-15 16:14:00 +01:00
Alhaziel01
52abd760a4 Test Fix Viste (cacheToDisc=False) 2022-01-15 16:13:20 +01:00
Alhaziel01
888956b158 oops 2022-01-15 12:12:16 +01:00
Alhaziel01
e892af34bb Fix Streaming Community 2022-01-15 12:03:02 +01:00
Alhaziel01
621725d354 Test Fix Gestione Viste 2022-01-15 11:07:09 +01:00
Alhaziel01
caf4b83230 Fix Streaming Community 2022-01-15 11:06:32 +01:00
github-actions[bot]
872170d935 Aggiornamento domini 2022-01-14 17:51:04 +00:00
marco
71e29792d0 Fix ordinamento episodi tantifilm 2022-01-14 18:30:55 +01:00
Alhaziel01
de6d1eb0da riordino 2022-01-13 18:36:55 +01:00
Alhaziel01
6cb981d4f1 ops 2022-01-13 17:46:51 +01:00
Alhaziel01
21574b21db Disabilitato Maxstream 2022-01-13 15:21:30 +01:00
Alhaziel01
881f268079 Menu contestuale finestra server a schermo intero 2022-01-13 15:21:15 +01:00
Alhaziel01
29a5b2569e - Chiusura finestra server dopo standby
- Menu contestuale in finestra server
 - Piccoli fix deltabit e uqloads
 - Piccolo fix gestione viste
 - Fix gestione salva link
2022-01-13 13:02:01 +01:00
marco
a7a94eb20b ops 2022-01-12 20:23:36 +01:00
marco
f339fabffa Disattivato il genio, fix ilgenio_cam 2022-01-12 20:20:54 +01:00
marco
adfaa868c8 Fix referer in play_video 2022-01-10 20:00:37 +01:00
marco
06c7467e4a ops 2022-01-09 17:56:22 +01:00
marco
0129828c54 Fix streamingcommunity 2022-01-09 17:37:55 +01:00
marco
542cb33c03 Passaggio User-agent e referer al player di kodi e avviso contenuto non ancora disponibile su streamingcommunity 2022-01-07 18:24:24 +01:00
marco
c21ae8cf07 Opzioni menu contestuale aggiuntive nei miei link e nei preferiti 2022-01-02 14:54:00 +01:00
marco
c02050417d Fix riproduzione elementum 2021-12-29 14:52:25 +01:00
marco
edecfb8df4 Prova viste 2021-12-28 19:37:01 +01:00
marco
9cc3ab7f52 Salvataggio viste: check forzato sul primo item 2021-12-28 18:18:11 +01:00
marco
17a33a6ed9 cinemalibero: supporto filecrypt 2021-12-28 16:49:50 +01:00
marco
682eeddce6 Cambiato ordinamento menu contestuale 2021-12-25 19:10:52 +01:00
Alhaziel01
0505607b09 aggiunta possibilità di ricercare informazioni sugli episodi e migliorato render_items 2021-12-23 17:58:38 +01:00
Alhaziel01
de8a2388fd Fix Gestione Viste 2021-12-23 16:39:15 +01:00
Alhaziel01
297603f6cb Ultimo Test Gestione Viste 2021-12-23 16:12:28 +01:00
Alhaziel01
db33ccf61f Fix Visualizzazione estensione in server diretto 2021-12-23 12:14:49 +01:00
Alhaziel01
180c2d640a test gestione viste 2021-12-23 11:14:32 +01:00
Alhaziel01
ed94dedbc2 Nuova gestione salvataggio Viste (Senza Monitor) 2021-12-23 10:39:44 +01:00
Alhaziel01
8ce21e8e10 Fix successivo in novità 2021-12-22 19:04:37 +01:00
Alhaziel01
d682cd7886 - Aggiunta Visualizzazione musicvideo
- Doppio controllo cambio di visuale
2021-12-22 18:08:52 +01:00
Alhaziel01
519830bfea rimosso debug da unshortenit 2021-12-22 12:13:28 +01:00
Alhaziel01
a6c8a61a0b Guardaserie icu rimosso debug 2021-12-22 12:06:47 +01:00
Alhaziel01
03e8d7018f Fix Mediaset Play 2021-12-22 12:00:43 +01:00
Alhaziel01
91871c7846 Migliorie Ricerca Globale 2021-12-22 12:00:30 +01:00
Alhaziel01
92e8a3fcc4 Test Fix Gestion viste 2021-12-22 12:00:01 +01:00
Alhaziel01
791ac16674 Test Fix Viste 2021-12-20 19:26:24 +01:00
Alhaziel01
afd99db33f Fix dooplay_search 2021-12-20 19:15:24 +01:00
Alhaziel01
4caad5d27f Fix Community Channels 2021-12-20 19:14:44 +01:00
github-actions[bot]
a9ccecdd44 Aggiornamento domini 2021-12-18 17:48:37 +00:00
Alhaziel01
38585f5baa Fix Trakt 2021-12-18 18:28:24 +01:00
Alhaziel01
0dd880537c Piccole migliorie 2021-12-18 15:57:25 +01:00
Alhaziel01
84b30d3be6 Fix sort Community Channels 2021-12-18 12:29:09 +01:00
Alhaziel01
4a1735fbb4 ulteriore fix StreamingCommunity 2021-12-18 12:24:24 +01:00
Alhaziel01
2bfad01bd5 fix StreamingCommunity 2021-12-18 12:00:48 +01:00
Alhaziel01
3b52812f55 Merge branch 'master' of https://github.com/kodiondemand/addon 2021-12-17 19:39:08 +01:00
Alhaziel01
c92fbd38bb Fix Segna come già visto 2021-12-17 19:38:51 +01:00
github-actions[bot]
fe109622fa Aggiornamento domini 2021-12-17 17:48:14 +00:00
Alhaziel01
a3bfb3b184 Revert "Test StreamingCommunity"
This reverts commit 139a7fe588.
2021-12-17 18:14:58 +01:00
Alhaziel01
139a7fe588 Test StreamingCommunity 2021-12-17 17:40:05 +01:00
Alhaziel01
42b3bbf574 alcuni fix 2021-12-17 16:37:41 +01:00
Alhaziel01
867a0bf36b disabilitato inputsream adaptive in streamingcommunity 2021-12-17 10:35:26 +01:00
Alhaziel01
27634c3907 Extra info in server pop-up e fix link .torrent 2021-12-17 10:09:40 +01:00
Alhaziel01
d8388c44a4 Fix dailymotion 2021-12-17 09:37:59 +01:00
marco
dd2314153c Merge remote-tracking branch 'origin/master' 2021-12-16 19:44:40 +01:00
marco
a47103c056 Fix get_season_and_episode 2021-12-16 19:44:35 +01:00
github-actions[bot]
d17b46465c Aggiornamento domini 2021-12-16 17:48:48 +00:00
marco
a953280d4d Merge remote-tracking branch 'origin/master' 2021-12-15 20:21:23 +01:00
marco
b4ab8549ff Riattivati guardaseriecam e ilgeniodellostreaming_cam 2021-12-15 20:21:16 +01:00
github-actions[bot]
0338d248e0 Aggiornamento domini 2021-12-15 17:51:24 +00:00
marco
3fa58014f6 Miglioria commit precedente 2021-12-14 20:35:55 +01:00
marco
a038497d94 Fix parziale cinemalibero (SerieTV) 2021-12-14 19:45:15 +01:00
Alhaziel01
3bd5d636e1 Test Nuovo launcher 2021-12-11 19:55:18 +01:00
Alhaziel01
a588b44c9c Fix Tantifilm 2021-12-10 18:16:07 +01:00
Alhaziel01
4a96b8c987 Fix Autoplay e Server pop-up 2021-12-10 10:15:36 +01:00
Alhaziel01
83b7e1e821 Fix Discovery 2021-12-10 10:15:13 +01:00
Alhaziel01
3e88831439 Disabilitato Altadefinizione Community 2021-12-09 19:27:33 +01:00
Alhaziel01
3de1441225 Merge branch 'master' of https://github.com/kodiondemand/addon 2021-12-09 19:22:51 +01:00
Alhaziel01
18e5302741 Fix riapertura finestra server in casodi errore 2021-12-09 19:22:12 +01:00
github-actions[bot]
e3939507b8 Aggiornamento domini 2021-12-09 17:50:45 +00:00
Alhaziel01
0a6708009e Miglioria Riprendi Visione 2021-12-06 15:43:16 +01:00
Alhaziel01
b2a390a5c2 - Fix Video a scatti Raspberry
- piccoli fix link in finestra pop-up
2021-12-04 10:00:07 +01:00
Alhaziel01
da4ed8af4c Test fix video a scatti da Libreria 2021-12-03 16:47:48 +01:00
Alhaziel01
05e6e5dea8 Fix e migliorie per finestra server pop-up 2021-12-02 18:30:59 +01:00
marco
a2bd4e464d Disattivato tapmovie(chiuso) 2021-12-02 17:41:09 +01:00
Alhaziel01
d2338d07b2 monitor finestra server come thread 2021-12-02 12:33:17 +01:00
Alhaziel01
c0b487b280 Finestra selezione server possibilità di usare la selezione con la skin utilizzata da Kodi 2021-12-02 12:18:47 +01:00
Alhaziel01
446af0fcfb piccola miglioria Streaming Community 2021-12-02 12:17:33 +01:00
Alhaziel01
71e4a487db Fix StreamingITA 2021-12-01 19:37:59 +01:00
Alhaziel01
4d31b961dd Miglioria VVVVID 2021-12-01 19:21:01 +01:00
Alhaziel01
d97ca5d5fa Miglioria tmdb 2021-12-01 19:20:44 +01:00
Alhaziel01
d27fd3782f Fix Pop-up server 2021-12-01 19:20:27 +01:00
Alhaziel01
0c76096a22 Test Fix pop-up server 2 2021-12-01 11:31:48 +01:00
Alhaziel01
897a5643a7 Test Fix pop-up server 2021-12-01 10:05:53 +01:00
Alhaziel01
295304567d Test forza server in finestra pop-up 2021-11-30 20:10:53 +01:00
Alhaziel01
f82509e60c Fix StreamingITA 2021-11-29 11:39:39 +01:00
Alhaziel01
8ec1b818f2 Fix canali o server vuoti 2021-11-29 10:42:17 +01:00
Alhaziel01
3d4893061c Fix File .nfo in libreria 2021-11-29 10:28:23 +01:00
marco
cb963ec76f KoD 1.7.3 2021-11-27 18:08:11 +01:00
marco
ad40a34d5c Ultimi fix 2021-11-27 17:56:34 +01:00
marco
35ff445f9b Ultime modifiche 2021-11-27 17:36:32 +01:00
Alhaziel01
2409f7db37 Fix Freeze e canali vuoti 2021-11-27 17:30:29 +01:00
Alhaziel01
d8d1e123ef Widevine Gestito da Inputstream Helper 2021-11-27 12:18:08 +01:00
Alhaziel01
70665bea3c Probabile Fix Freeze 2021-11-27 08:48:50 +01:00
Alhaziel01
59e79739e5 FIx Live e icone canali mancanti MediasetPlay 2021-11-26 17:29:33 +01:00
Alhaziel01
1abb62ee01 Fix La7 2021-11-26 16:47:11 +01:00
Alhaziel01
6352e33a5a Fix Ultimi Episodi AnimeWorld 2021-11-26 16:34:09 +01:00
marco
4298468aca Settaggio per notifica cambio viste 2021-11-25 18:49:21 +01:00
Alhaziel01
bc4f4330c1 ReCaptcha Ita di default e file cache in base alla lingua 2021-11-24 18:19:23 +01:00
fatshotty
591fb12edf fix recaptcha (#363)
* ignore bin and abi

* use ITA

* change language by arguments
2021-11-24 18:05:07 +01:00
Alhaziel01
5233da7638 Test 2 Fix Riproduci da finestra informazioni in adesso in onda 2021-11-24 18:00:43 +01:00
Alhaziel01
bc0af7e372 Fix Riproduci da finestra informazioni in adesso in onda 2021-11-24 17:47:59 +01:00
Alhaziel01
bd4cca09ba Fix Riproduzione da Informazioni 2021-11-24 16:50:11 +01:00
Alhaziel01
cbccf06cc5 Recaptcha, Rimosso Tasto Reload 2021-11-23 19:36:45 +01:00
Alhaziel01
92be087cc4 Test Fix Riproduzione 2021-11-23 11:26:46 +01:00
Alhaziel01
9af83f59d9 Racaptcha Timing 2021-11-23 10:08:39 +01:00
marco
2ce628e367 Recaptcha funzionanti 2021-11-22 21:11:05 +01:00
Alhaziel01
d67ccd9b75 Recaptcha immagini dinamiche 2021-11-22 18:12:52 +01:00
Alhaziel01
94262e9a0c UI Recaptcha 2021-11-22 16:35:12 +01:00
marco
377044a879 recaptcha librerie 2021-11-21 13:34:57 +01:00
marco
264b2d4292 Merge remote-tracking branch 'origin/master' 2021-11-21 13:34:37 +01:00
marco
15785a653e WIP: recaptcha 2021-11-21 13:34:24 +01:00
Alhaziel01
2dee7d7708 Fix Riproduzione AnimeUniverse da Libreria 2021-11-20 11:03:20 +01:00
Alhaziel01
e1e817a93c Merge branch 'master' of https://github.com/kodiondemand/addon 2021-11-20 10:22:24 +01:00
Alhaziel01
547839f0b0 Test Fix Torrent 3 2021-11-20 10:22:17 +01:00
github-actions[bot]
944d98a937 Aggiornamento domini 2021-11-19 17:44:35 +00:00
Alhaziel01
37e40653a8 Test 2 Torrent 2021-11-19 16:45:05 +01:00
Alhaziel01
34cc89f79e Test Fix Torrent 2021-11-19 16:28:19 +01:00
Alhaziel01
ddd2933883 Test Fix Riproduzione 2021-11-19 15:48:54 +01:00
github-actions[bot]
38eb4ac49f Aggiornamento domini 2021-11-18 17:42:24 +00:00
Alhaziel01
80019ab6b7 Altedefinizione Community, registrazione in lista episodi 2021-11-18 12:35:36 +01:00
Alhaziel01
83cd0280ed Fix Segna come già visto 2021-11-18 11:09:40 +01:00
github-actions[bot]
abec23383d Aggiornamento domini 2021-11-17 17:41:25 +00:00
Alhaziel01
7450a36530 Test Fix Riproduzione 2021-11-17 15:53:55 +01:00
Alhaziel01
d0baa85fe2 Fix Riproduzione Diretta 2021-11-17 12:41:55 +01:00
marco
08a0e5c0eb Miglioria streamSB 2021-11-16 19:45:15 +01:00
marco
338526f107 Aggiunto canale streamingITA, streamingcommunity nuovo URL 2021-11-16 18:46:00 +01:00
Alhaziel01
b7ba220e18 Nomi Corretti Nuovi Server 2021-11-16 17:49:35 +01:00
marco
6f294c99bf fix ricerca guardaserieicu, prova timeout globale (requests) 2021-11-15 19:51:21 +01:00
marco
b62c616693 Aggiunti server streamlare (by alpha) e streamsb(by urlresolver) 2021-11-15 18:59:29 +01:00
marco
7b7f186e47 ops 2021-11-14 11:44:51 +01:00
marco
d5c870db44 Ricerche salvate: supporto cerca film/serie/attore
Possibile fix freeze kodi alla chiusura
2021-11-13 14:42:40 +01:00
Alhaziel01
dea6782c5e - Forza Elementum alla riproduzione in memoria
- Probabile fix del freeze alla riproduzione da libreria
2021-11-12 16:59:14 +01:00
Alhaziel01
95f3ec68da Fix Audio Assente Raiplay 2021-11-11 17:32:38 +01:00
marco
6b546f0dc1 KoD 1.7.2 2021-11-08 19:50:48 +01:00
Alhaziel01
52f85673cc Fix VVVVID Trailers 2021-11-08 15:30:51 +01:00
Alhaziel01
a151ffbdff Aggiornamento videoteca all'avvio 1 volta al giorno. 2021-11-08 12:17:52 +01:00
Alhaziel01
49764eae1f Fix Ep. Successivo senza autoplay 2021-11-08 09:02:25 +01:00
github-actions[bot]
447104a66e Aggiornamento domini 2021-11-06 17:42:49 +00:00
marco
49f341f6db ops 2021-11-06 15:21:42 +01:00
marco
4077f8888b fix babelfish 2021-11-06 15:15:19 +01:00
marco
802fcc3a13 Merge remote-tracking branch 'origin/master' 2021-11-06 14:46:59 +01:00
marco
06239735f5 ops 2021-11-06 14:46:50 +01:00
Alhaziel01
5fec26bd6c Fix Riapertura Finestra Trailers 2021-11-06 12:50:35 +01:00
Alhaziel01
e1d6540fe6 Merge branch 'master' of https://github.com/kodiondemand/addon 2021-11-06 12:24:42 +01:00
Alhaziel01
6f2b34a857 Fix Navigazione finestra Trailers 2021-11-06 12:24:39 +01:00
marco
aafb008d5a ilcorsaronero titoli con caratteri speciali e aggiornamento libreria babelfish 2021-11-06 12:17:51 +01:00
Alhaziel01
d21ba2dcb7 Fix Cerca Trailer 2021-11-06 10:56:06 +01:00
Alhaziel01
646de5cae4 ooops 2021-11-06 10:40:47 +01:00
Alhaziel01
54ad39f1fc Test riproduzione torrent senza autoplay su android 2021-11-06 09:03:07 +01:00
Alhaziel01
686d491daf FIx Server ed errore jsontools in Ricerca globale 2021-11-06 09:00:57 +01:00
Alhaziel01
70f69acfff Fix jsontools ERROR 2021-11-05 18:08:02 +01:00
Alhaziel01
5e08aa3391 non riaprire Finesta popup se si seleziona un torrent 2021-11-05 17:32:29 +01:00
Alhaziel01
35f7a50345 ooops 2021-11-05 17:24:23 +01:00
Alhaziel01
f1523e7467 Ulteriore Fix Riproduzione 2021-11-05 17:14:05 +01:00
Alhaziel01
6b03659b81 Fix AnimeUnity 2021-11-05 12:57:13 +01:00
Alhaziel01
07fc2fb724 Fix errore jsontools 2021-11-05 12:44:01 +01:00
Alhaziel01
c1efb6db57 Fix Riproduzione Torrent da ricerca Globale 2021-11-05 12:27:52 +01:00
Alhaziel01
fdcc00d69e Fix Riproduzione Torrent da Videoteca 2021-11-05 11:30:45 +01:00
Alhaziel01
f24e8c8da6 Fix riproduzione torrent senza autoplay e riproduzione dopo installazione automatica di Elementum 2021-11-05 09:48:12 +01:00
github-actions[bot]
158372ed1b Aggiornamento domini 2021-11-04 17:45:30 +00:00
mac12m99
818a423dc9 Update maxstream.py 2021-11-04 18:31:32 +01:00
mac12m99
b43520223d Fix maxstream (vediamo quanto regge) 2021-11-04 14:48:37 +01:00
mac12m99
714ea10b55 Fix streamingcommunity per quando cambia url 2021-11-04 11:20:21 +01:00
mac12m99
438b2a5da6 Fix paramount serie tv 2021-11-04 10:51:20 +01:00
Alhaziel01
05102262ca Fix Download Torrent 2021-11-03 19:18:11 +01:00
github-actions[bot]
df6f3f1177 Aggiornamento domini 2021-11-03 17:44:58 +00:00
Alhaziel01
60de78f448 Possibilie Fix autoplay e episodio successivo 2021-11-03 12:06:45 +01:00
mac12m99
6e4aec0ab9 Prova riproduzione 2021-11-02 21:40:20 +01:00
mac12m99
ebbf37222e Miglioria del precedente commit 2021-11-02 19:58:01 +01:00
mac12m99
9828908bfe Possibile fix crash con torrent 2021-11-02 18:16:18 +01:00
mac12m99
925a696a17 Autoplay: non ri-eseguire in caso di refresh 2021-10-30 13:20:34 +02:00
Alhaziel01
9d81c2e4b6 Fix Autoplay per Torrent 2021-10-30 12:36:09 +02:00
mac12m99
4610ba71af Miglioria ricerca globale 2021-10-30 11:39:06 +02:00
Alhaziel01
0aebc644fa Fix parziale autoplay con Torrent 2021-10-30 11:22:15 +02:00
mac12m99
cce2e330ba Timeout richieste 5 secondi di default, 2 per i DNS 2021-10-29 20:06:30 +02:00
Alhaziel01
d0de267be7 Fix Streaming community 2021-10-29 19:17:34 +02:00
Alhaziel01
18bb6bc4b2 Fix Autoplay Torrent 2021-10-29 16:50:42 +02:00
Alhaziel01
e70c18efa3 Probabile Fix Autoplay Torrent 2021-10-29 16:25:53 +02:00
Alhaziel01
852588254a Fix Installazione Elementum 2021-10-29 11:40:25 +02:00
mac12m99
e8c5f335b3 Migliorie test suite 2021-10-27 20:32:05 +02:00
mac12m99
1b61616806 Fix guardaserieicu 2021-10-27 20:31:38 +02:00
mac12m99
ae93e4d1f6 Fix tantiflm, animealtadefinizione utiltimi ep e nascosti ep non ancora caricati 2021-10-27 19:34:39 +02:00
mac12m99
9dcd33ac07 Fix dreamsub ultimi episodi 2021-10-24 14:08:28 +02:00
mac12m99
d6d8153004 Fix ricerca globale 2021-10-23 16:29:24 +02:00
Alhaziel01
b33a250f9e Fix Stayonline 2021-10-23 09:47:52 +02:00
mac12m99
d09be99136 Merge remote-tracking branch 'origin/master' 2021-10-22 19:03:35 +02:00
mac12m99
ec4510aea4 Fix maxstream 2021-10-22 19:03:30 +02:00
Alhaziel01
0276dd46f6 altri url per anavids 2021-10-22 17:50:11 +02:00
Alhaziel01
40d8501afc - Aggiornato Anavids
- Fix m3u8 non supportati da inputstream
2021-10-21 19:26:55 +02:00
Alhaziel01
3f55c94662 Log ricerca globale 2021-10-21 17:18:02 +02:00
mac12m99
ebf520aaf2 Miglioria ilcorsaronero->tag qualità 2021-10-20 20:46:30 +02:00
Alhaziel01
8686308f86 Fix AnimeUnity 2021-10-20 20:15:04 +02:00
github-actions[bot]
d002307088 Aggiornamento domini 2021-10-20 17:44:03 +00:00
Alhaziel01
182cca5d5e Fix Userload 2021-10-20 19:29:50 +02:00
mac12m99
df04d70e38 Merge remote-tracking branch 'origin/master' 2021-10-20 18:30:50 +02:00
mac12m99
bbc6aef5d2 Miglioria ilcorsaronero: titolo completo tramite URL 2021-10-20 18:30:46 +02:00
mac12m99
b3015d3ed8 Supporto isecure.link (casacinema) 2021-10-20 18:30:25 +02:00
Alhaziel01
9d1390491a Fix Ricerca per Attori (Ricerca Classica) 2021-10-20 18:18:46 +02:00
mac12m99
2265300ebd Merge remote-tracking branch 'origin/master' 2021-10-19 20:34:31 +02:00
mac12m99
2254d2851a Fix dreamsub 2021-10-19 20:34:26 +02:00
Alhaziel01
6fde4bd5d7 Fix AnimeUnity 2021-10-19 20:32:44 +02:00
github-actions[bot]
fe18e7c6c2 Aggiornamento domini 2021-10-19 17:43:49 +00:00
github-actions[bot]
d9a4f15340 Aggiornamento domini 2021-10-18 17:44:27 +00:00
mac12m99
d6dd20ba1a Fix maxstream 2021-10-18 19:20:08 +02:00
mac12m99
1e4e68cb24 Fix maxstream 2021-10-18 17:40:42 +02:00
mac12m99
cbb0d138ab Fix maxstream (support CAPTCHA) 2021-10-17 11:11:24 +02:00
Alhaziel01
9dfc558dc5 Fix streaming Community, in caso di cambio dominio 2021-10-16 16:01:49 +02:00
mac12m99
9c83458d93 Fix maxstream 2021-10-16 15:32:45 +02:00
Alhaziel01
d8963766c2 Fix titoli Streaming Community 2021-10-16 11:22:40 +02:00
Alhaziel01
53fa709767 Fix Maxstream 2021-10-16 09:00:47 +02:00
mac12m99
3de393f030 Maxstream check codice video 2021-10-15 20:03:09 +02:00
Alhaziel01
6f4c090e7e Fix Maxstream 2021-10-15 16:44:02 +02:00
Alhaziel01
04e121b196 Fix Streaming Community 2021-10-15 12:42:48 +02:00
github-actions[bot]
7d855652e8 Aggiornamento domini 2021-10-14 17:44:39 +00:00
Alhaziel01
0b44d573a9 Fix Altadefinizione Community 2021-10-14 15:29:29 +02:00
Alhaziel01
70a5a55e6d Fix Mediaset Play, diretta "20" 2021-10-12 20:02:20 +02:00
mac12m99
7270bda78e Fix minori 2021-10-12 19:34:28 +02:00
mac12m99
f34269245c Fix altacommunity 2021-10-11 20:59:00 +02:00
Alhaziel01
3defaa16ed Probabile Fix Viste 2021-10-11 20:03:30 +02:00
Alhaziel01
8315a289b7 Fix Altadefinizione Community 2021-10-11 20:03:16 +02:00
Alhaziel01
ac6883c8b2 Fix AnimeForce 2021-10-11 20:02:53 +02:00
Alhaziel01
39a1c46b62 Piccolo Fix aggiornamento Videoteca 2021-10-09 10:22:29 +02:00
Alhaziel01
0274446ebb Probabile Fix Ricerca Globale 2021-10-09 10:17:27 +02:00
Alhaziel01
74ed9e24dc Piccolo Fix Altadefinizione Community 2021-10-09 10:17:12 +02:00
mac12m99
5b2c76a7de Merge remote-tracking branch 'origin/master' 2021-10-08 19:27:07 +02:00
mac12m99
06fe40ed9e Fix maxstream 2021-10-08 19:27:02 +02:00
Alhaziel01
3bc27f3b05 Fix AnimeForce 2021-10-07 19:53:01 +02:00
Alhaziel01
253aae6137 Rai Play: Ordine corretto 2021-10-07 19:43:50 +02:00
Alhaziel01
cdca6bb55f Fix Repaly Rai Play 2021-10-06 19:23:32 +02:00
Alhaziel01
e1e36e1a6a Altadefinizione Community Risoluzione "Veritiera" 2021-10-06 15:08:29 +02:00
Alhaziel01
8c5ea39edf Fix Streaming Community 2021-10-06 12:38:43 +02:00
mac12m99
133b9e07aa Piccolo fix adesso in onda 2021-10-05 20:34:00 +02:00
Alhaziel01
bc9e0a09e8 Fix Visualizzazione per Videoteca 2021-10-05 16:05:17 +02:00
Alhaziel01
ae36c65714 Fix Streaming Community 2021-10-05 13:08:52 +02:00
Alhaziel01
3b40059cac Fix Altadefinizione Community 2021-10-05 11:59:59 +02:00
Alhaziel01
8877110b80 Fix Successivo in altre opzioni di ricerca 2021-10-05 09:56:01 +02:00
Alhaziel01
4eed606c30 Probabile Fix Blocco Ricerca Globale 2021-10-05 09:36:45 +02:00
Alhaziel01
3452861693 Probabile Fix Selezione Viste 2021-10-05 09:36:24 +02:00
github-actions[bot]
c1a7544cc5 Aggiornamento domini 2021-10-03 17:43:08 +00:00
mac12m99
f2fc022a7c altacomm: rimossa richiesta registrazione 2021-10-02 14:44:58 +02:00
mac12m99
c0d514c165 Disattivato altadefinizioneclick (unito al community), fix altacomm e cineblog per certi tipi di serie 2021-10-02 12:18:14 +02:00
mac12m99
e926f8f504 Merge remote-tracking branch 'origin/master' 2021-10-02 11:34:58 +02:00
mac12m99
039117311c Test suite: supporto a ricerca e test specifico eurostreaming 2021-10-02 11:34:52 +02:00
Alhaziel01
bd242f4875 Ripristiono Vista Touch 2021-10-01 19:45:11 +02:00
github-actions[bot]
974a581428 Aggiornamento domini 2021-10-01 17:43:48 +00:00
Alhaziel01
9977c2aa3c Fix TMDB 2021-10-01 19:34:11 +02:00
Alhaziel01
63ba995222 Rimossa voce ricerca Avanzata da Altadefinizione Click 2021-10-01 19:28:19 +02:00
Alhaziel01
42f10a56d3 Fix Altadefiniziona Community 2021-10-01 15:49:32 +02:00
Alhaziel01
1efe6595e1 Fix Altadefinizione Click 2021-10-01 15:49:14 +02:00
Alhaziel01
3ca7707c01 Fix Gestione Viste 2021-10-01 14:55:21 +02:00
Alhaziel01
a5ba79d176 - Fix Altadefinizione Community
- Fix HDMario
 - Fix Streamtape
2021-10-01 09:52:17 +02:00
Alhaziel01
8afa165501 ops 2021-09-30 20:31:21 +02:00
Alhaziel01
6e0cd8ff46 Fix Altadefinizione Community 2021-09-30 20:27:07 +02:00
github-actions[bot]
1544f32c8c Aggiornamento domini 2021-09-30 17:45:07 +00:00
Alhaziel01
999dd188fb Probabile Fix Visualizzazioni 2 2021-09-30 10:23:49 +02:00
Alhaziel01
af14b730f1 Fix Altadefinizione Community 2021-09-29 17:16:16 +02:00
Alhaziel01
5229deeaf2 - Fix sqlitedict
- Probabile fix Visualizzazioni
2021-09-29 16:46:30 +02:00
Alhaziel01
2aa492587f Fix AnimeSaturn 2021-09-29 12:16:25 +02:00
Alhaziel01
8c8a5c6f21 piccolo fix 2021-09-29 09:07:52 +02:00
mac12m99
1bd771b565 sqlitedict cache e migliore gestione dei thread 2021-09-28 20:13:15 +02:00
Alhaziel01
613087342b Nuovo Server HighLoad 2021-09-28 15:18:59 +02:00
4l3x87
be6eb18570 Fix Turbovid (#345) 2021-09-27 17:38:58 +02:00
mac12m99
207df5678d Fix toonitalia, alcuni link su eurostreaming, aggiunto server VOE (by alfa) 2021-09-26 14:33:42 +02:00
Alhaziel01
1892eab9a7 fix tmdb 2021-09-23 16:19:20 +02:00
Alhaziel01
b3a199e457 piccolo fix 2021-09-23 10:50:27 +02:00
Alhaziel01
6a93857cc6 tmdb più veloce 2021-09-23 10:50:15 +02:00
Alhaziel01
e5d6d71017 altadefinizione community:
- divisione per anno (per Film e Serie TV)
 - disabilitata divisione per qualità (inutile)
 - preferenze di ordinamento (da configurazione canale)
2021-09-23 10:49:31 +02:00
Alhaziel01
40841e6435 Abilita autoplay da item 2021-09-23 10:15:41 +02:00
github-actions[bot]
716625fd34 Aggiornamento domini 2021-09-22 17:45:22 +00:00
Alhaziel01
03c4cc53a6 piccolo fix tmdb 2021-09-22 11:40:49 +02:00
Alhaziel01
a043fc3ab2 Fix tmdb per anime 2021-09-22 11:19:21 +02:00
Alhaziel01
72300864c7 Fix Ricerca per Attori 2021-09-22 09:00:35 +02:00
mac12m99
f78ab57f5b Merge remote-tracking branch 'origin/master' 2021-09-21 19:54:40 +02:00
mac12m99
9d3ca7d4bc Fix streamingcommunity e ordinamento decrescente per programmi tv mediaset 2021-09-21 19:54:34 +02:00
github-actions[bot]
3c1094ded3 Aggiornamento domini 2021-09-21 17:44:23 +00:00
github-actions[bot]
23942b3245 Aggiornamento domini 2021-09-20 17:40:37 +00:00
mac12m99
01d3902fbb Merge remote-tracking branch 'origin/master' 2021-09-19 11:36:13 +02:00
mac12m99
c18b7fb226 Fix dirette mediaset 2021-09-19 11:36:09 +02:00
mac12m99
bb52f0eb00 KoD 1.7.1 2021-09-18 18:58:58 +02:00
github-actions[bot]
729bc59e96 Aggiornamento domini 2021-09-16 17:42:36 +00:00
Alhaziel01
3954e0f2a2 Fix Deltabit 2021-09-15 20:14:10 +02:00
mac12m99
c984813f94 Fix hdmario 2021-09-14 20:20:46 +02:00
mac12m99
e1d2352dc2 Fix sezioni novità per eurostreaming e tantifilm 2021-09-13 20:42:06 +02:00
mac12m99
a782901afc altacomm: fix cerca serietv 2021-09-13 18:28:24 +02:00
mac12m99
b8de2e3df5 Disabilitato speedvideo (probabilmente chiuso o abbandonato) 2021-09-11 13:30:48 +02:00
Alhaziel01
a0b64c4cdf ops 2021-09-09 20:20:50 +02:00
Alhaziel01
293f9e15c6 Fix Played Time 2021-09-09 20:18:49 +02:00
mac12m99
4350a593d7 Merge remote-tracking branch 'origin/master' 2021-09-09 18:29:44 +02:00
mac12m99
d50299ca55 Fix altaCommunity -> SerieTv mancanti + Deltabit 2021-09-09 18:29:39 +02:00
github-actions[bot]
2d00118252 Aggiornamento domini 2021-09-08 17:46:20 +00:00
mac12m99
9e44409ab5 Fix altaCommunity -> SerieTv mancanti 2021-09-08 17:51:04 +02:00
mac12m99
a286187235 Fix altaCommunity e streamtape 2021-09-07 20:54:10 +02:00
mac12m99
87b205c50a Fix altaCommunity e aggiungi alla videoteca con autoplay attivo su alcuni canali 2021-09-06 20:38:19 +02:00
Alhaziel01
352cdbaf3d Fix Filmpertutti 2021-09-04 09:05:45 +02:00
Alhaziel01
2f5c6752bd Fix tmdb per contentType Undefined 2021-08-31 20:03:20 +02:00
4l3x87
3712d65afd Aggiunto server EvoLoad (#339)
* Aggiunto Server EvoLoad

Co-authored-by: Alex Pettiti <alex.pettiti@axterisko.it>
Co-authored-by: mac12m99 <10120390+mac12m99@users.noreply.github.com>
2021-08-31 18:15:28 +02:00
1428 changed files with 38316 additions and 29350 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

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

@@ -67,7 +67,7 @@ Controlla sia presente qualcosa, tra le " " di thumbnail e banner, e che le imma
Riepilogo voci:
movie, tvshow, anime, documentary, sub, adult
movie, tvshow, anime, documentary, vos, adult
(se il sito contiene film e serie, devono esserci sia movie che tvshow, se contiene solo film, solo movie)

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

@@ -1,28 +1,25 @@
name: Test Suite
on:
workflow_dispatch:
schedule:
- cron: '00 15 * * *'
jobs:
tests:
runs-on: ubuntu-latest
runs-on: macos-latest
steps:
# 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 }}
uses: actions/setup-python@v1
uses: actions/setup-python@v4.3.0
with:
python-version: 3.8
python-version: 3.9
- name: Run tests
run: |
export KODI_INTERACTIVE=0
./tests/run.sh
- 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:
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }}
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

4
.gitignore vendored Normal file → Executable file
View File

@@ -7,3 +7,7 @@ custom_code.json
last_commit.txt
__pycache__/
.vscode/settings.json
bin/
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

15
addon.xml Normal file → Executable file
View File

@@ -1,7 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.kod" name="Kodi on Demand ALPHA" version="2.0" provider-name="KoD Team">
<addon id="plugin.video.kod" name="Kodi on Demand" version="1.7.7" provider-name="KoD Team">
<requires>
<import addon="script.module.web-pdb" />
<!-- <import addon="script.module.libtorrent" optional="true"/> -->
<import addon="metadata.themoviedb.org" optional="true"/>
<import addon="metadata.tvshows.themoviedb.org" optional="true"/>
<!-- <import addon="metadata.tvdb.com"/> -->
</requires>
<extension point="xbmc.python.pluginsource" library="default.py">
<provides>video</provides>
@@ -19,14 +22,12 @@
<summary lang="it">Kodi on Demand è un addon di Kodi per cercare e guardare contenuti sul web.</summary>
<assets>
<icon>resources/media/logo.png</icon>
<fanart>resources/media/dark_background.jpg</fanart>
<fanart>resources/media/fanart.jpg</fanart>
<screenshot>resources/media/screenshot-1.png</screenshot>
<screenshot>resources/media/screenshot-2.png</screenshot>
<screenshot>resources/media/screenshot-3.png</screenshot>
</assets>
<news>- Aggiunto menu globale "opzioni di KoD"
- Aggiunto canale tapmovie e server annessi
- Notifica quando il tipo di vista viene salvata (con indicazione del tipo di contenuto)
<news>- fix di routine ai canali/server
</news>
<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]

67
channels.json Normal file → Executable file
View File

@@ -1,53 +1,44 @@
{
"direct": {
"altadefinizione01": "https://www.altadefinizione01.plus",
"altadefinizione01_link": "https://altadefinizione01.travel",
"animealtadefinizione": "https://www.animealtadefinizione.it",
"altadefinizione01": "https://altadefinizione01.pet",
"animealtadefinizione": "http://ww38.animealtadefinizione.it",
"animeforce": "https://www.animeforce.it",
"animeleggendari": "https://animezeus.com",
"animesaturn": "https://www.animesaturn.it",
"animesaturn": "https://www.animesaturn.cx",
"animeunity": "https://www.animeunity.tv",
"animeuniverse": "https://www.animeuniverse.it",
"animeworld": "https://www.animeworld.tv",
"aniplay": "https://aniplay.it",
"casacinema": "https://www.casacinema.page",
"cb01anime": "https://www.cineblog01.red",
"cineblog01": "https://cb01.uno",
"cinemalibero": "https://cinemalibero.surf",
"animeworld": "https://www.animeworld.so",
"aniplay": "https://aniplay.co",
"casacinema": "https://casacinema.media",
"cb01anime": "https://cb01new.one",
"cinemalibero": "https://cinemalibero.cafe",
"cinetecadibologna": "http://cinestore.cinetecadibologna.it",
"dinostreaming": "https://dinostreaming.it",
"discoveryplus": "https://www.discoveryplus.com",
"dreamsub": "https://dreamsub.stream",
"dsda": "https://www.dsda.press",
"eurostreaming": "https://eurostreaming.world",
"filmigratis": "https://filmigratis.org",
"guardaseriecam": "https://guardaserie.cam",
"guardaserieclick": "https://www.guardaserie.builders",
"guardaserieicu": "https://guardaserie.center",
"dreamsub": "https://www.animeworld.so",
"eurostreaming": "https://eurostreaming.lifestyle",
"eurostreaming_actor": "https://eurostreaming.my",
"filmstreaming": "https://film-streaming-ita.cam",
"guardaseriecam": "https://guardaserie.kitchen",
"hd4me": "https://hd4me.net",
"ilcorsaronero": "https://ilcorsaronero.link",
"ilgeniodellostreaming": "https://ilgeniodellostreaming.bet",
"ilgeniodellostreaming_cam": "https://ilgeniodellostreaming.city",
"italiaserie": "https://italiaserie.men",
"mediasetplay": "https://www.mediasetplay.mediaset.it",
"mondoserietv": "https://mondoserietv.club",
"paramount": "https://www.paramountnetwork.it",
"piratestreaming": "https://www.piratestreaming.design",
"polpotv": "https://roma.polpo.tv",
"ilgeniodellostreaming_cam": "https://ilgeniodellostreaming.foo",
"italiafilm": "https://italia-film.biz",
"mediasetplay": "https://mediasetinfinity.mediaset.it",
"mondoserietv": "http://ww25.mondoserietv.club/?subid1=20230304-0434-261c-9cb0-a0044930e0a9",
"paramount": "https://www.mtv.it",
"piratestreaming": "https://piratestreaming.design",
"plutotv": "https://pluto.tv",
"raiplay": "https://www.raiplay.it",
"seriehd": "https://altadefinizionecommunity.casa",
"serietvonline": "https://serietvonline.art",
"serietvsubita": "http://serietvsubita.xyz",
"serietvu": "https://www.serietvu.live",
"streamtime": "https://t.me/s/StreamTime",
"tantifilm": "https://www.tantifilm.cfd",
"tapmovie": "https://it.tapmovie.net",
"toonitalia": "https://toonitalia.co",
"vvvvid": "https://www.vvvvid.it"
"serietvu": "http://ww1.serietvu.live/?sub1=47fb879a-5325-11ee-94a7-cc35006f53d1",
"streamingcommunity": "https://streamingcommunity.ooo",
"streamingita": "https://streamingita.click",
"tantifilm": "https://tantifilm.name",
"toonitalia": "https://toonitalia.xyz"
},
"findhost": {
"altadefinizione": "https://altadefinizione.nuovo.live",
"altadefinizionecommunity": "https://altaregistrazione.net",
"animealtadefinizione": "https://www.animealtadefinizione.it",
"filmpertutti": "https://filmpertuttiii.nuovo.live",
"streamingcommunity": "https://t.me/s/StreamingCommunity_nuovo_link"
"cineblog01": "https://cb01.uno",
"filmpertutti": "https://filmpertuttiii.nuovo.live"
}
}

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

@@ -23,7 +23,7 @@ se vanno cancellati tutti deve rimanere la voce:
"active": false,
"thumbnail": "",
"banner": "",
"categories": ["movie", "tvshow", "anime", "sub, "documentary"],
"categories": ["movie", "tvshow", "anime", "vos", "documentary"],
"not_active": ["include_in_newest"],
"settings": [
{
@@ -35,7 +35,7 @@ se vanno cancellati tutti deve rimanere la voce:
"visible": false
},
{
"id": "include_in_newest_movie",
"id": "include_in_newest_peliculas",
"type": "bool",
"label": "@70727",
"default": false,

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

@@ -9,7 +9,7 @@
# fix:
# 1. aggiunto pagination e sistemate alcune voci
# 2. modificato problemi in eccezioni
# 3. aggiunta la def select
# 3. aggiunta la def check
# 4. modifica alla legenda e altre aggiunte
# Questo vuole solo essere uno scheletro per velocizzare la scrittura di un canale.
@@ -75,19 +75,20 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
support.info(item)
# Ordine delle voci
# Voce FILM, puoi solo impostare l'url
film = ['', # url per la voce FILM, se possibile la pagina principale con le ultime novità
#Voce Menu,['url','action','args',contentType]
('Al Cinema', ['', 'movies', '']),
('Al Cinema', ['', 'peliculas', '']),
('Generi', ['', 'genres', 'genres']),
('Per Lettera', ['', 'genres', 'letters']),
('Anni', ['', 'genres', 'years']),
('Qualità', ['', 'genres', 'quality']),
('Mi sento fortunato', ['', 'genres', 'lucky']),
('Popolari', ['', 'movies', '']),
('Sub-ITA', ['', 'movies', ''])
('Popolari', ['', 'peliculas', '']),
('Sub-ITA', ['', 'peliculas', ''])
]
# Voce SERIE, puoi solo impostare l'url
@@ -144,29 +145,31 @@ def mainlist(item):
# lang = lingua del video. Es: ITA, Sub-ITA, Sub, SUB ITA.
# AVVERTENZE: Se il titolo è trovato nella ricerca TMDB/TVDB/Altro allora le locandine e altre info non saranno quelle recuperate nel sito.!!!!
@support.scrape
def movies(item):
#logger.dbg() # decommentare per attivare web_pdb
def peliculas(item):
support.info(item)
#support.dbg() # decommentare per attivare web_pdb
action = ''
blacklist = ['']
patron = r''
patronBlock = r''
patronNext = ''
pagination = True
pagination = ''
#debug = True # True per testare le regex sul sito
return locals()
@support.scrape
def episodes(item):
#logger.dbg()
def episodios(item):
support.info(item)
#support.dbg()
action = ''
blacklist = ['']
patron = r''
patronBlock = r''
patronNext = ''
pagination = True
pagination = ''
#debug = True
return locals()
@@ -175,14 +178,15 @@ def episodes(item):
# per genere, per anno, per lettera, per qualità ecc ecc
@support.scrape
def genres(item):
#logger.dbg()
support.info(item)
#support.dbg()
action = ''
blacklist = ['']
patron = r''
patronBlock = r''
patronNext = ''
pagination = True
pagination = ''
#debug = True
return locals()
@@ -192,18 +196,18 @@ def genres(item):
# per quei casi dove il sito non differenzia film e/o serie e/o anime
# e la ricerca porta i titoli mischiati senza poterli distinguere tra loro
# andranno modificate anche le def movies e episodes ove occorre
def select(item):
logger.debug()
#logger.dbg()
# andranno modificate anche le def peliculas e episodios ove occorre
def check(item):
support.info('select --->', item)
#support.dbg()
data = httptools.downloadpage(item.url, headers=headers).data
# pulizia di data, in caso commentare le prossime 2 righe
data = re.sub('\n|\t', ' ', data)
data = re.sub(r'>\s+<', '> <', data)
block = scrapertools.find_single_match(data, r'')
if re.findall('', data, re.IGNORECASE):
logger.debug('select = ### è una serie ###')
return episodes(Item(channel=item.channel,
support.info('select = ### è una serie ###')
return episodios(Item(channel=item.channel,
title=item.title,
fulltitle=item.fulltitle,
url=item.url,
@@ -215,7 +219,7 @@ def select(item):
############## Fondo Pagina
# da adattare al canale
def search(item, text):
logger.debug(text)
support.info('search', item)
itemlist = []
text = text.replace(' ', '+')
item.url = host + '/index.php?do=search&story=%s&subaction=search' % (text)
@@ -223,35 +227,35 @@ def search(item, text):
# se il canale è solo film, si può omettere, altrimenti bisgona aggiungerlo e discriminare.
item.contentType = item.contentType
try:
return movies(item)
return peliculas(item)
# Se captura la excepcion, para no interrumpir al buscador global si un canal falla
except:
import sys
for line in sys.exc_info():
logger.error('search log:', line)
info('search log:', line)
return []
# da adattare al canale
# inserire newest solo se il sito ha la pagina con le ultime novità/aggiunte
# altrimenti NON inserirlo
def newest(category):
logger.debug(category)
def newest(categoria):
support.info('newest ->', categoria)
itemlist = []
item = Item()
try:
if category == 'movie':
if categoria == 'peliculas':
item.url = host
item.action = 'movies'
itemlist = movies(item)
item.action = 'peliculas'
itemlist = peliculas(item)
if itemlist[-1].action == 'movies':
if itemlist[-1].action == 'peliculas':
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.debug('newest log: ', {0}.format(line))
support.info('newest log: ', {0}.format(line))
return []
return itemlist
@@ -261,5 +265,5 @@ def newest(category):
# sia per i siti con hdpass
#support.server(item, data='', itemlist=[], headers='', AutoPlay=True, CheckLinks=True)
def findvideos(item):
logger.debug()
support.info('findvideos ->', item)
return support.server(item, headers=headers)

20
channels/1337x.json Executable file
View File

@@ -0,0 +1,20 @@
{
"id": "1337x",
"name": "1337x",
"language": ["ita", "sub-ita", "eng"],
"active": true,
"thumbnail": "1337x.png",
"banner": "1337x.png",
"categories": ["movie", "tvshow", "torrent"],
"not_active": ["include_in_newest"],
"settings": [
{
"id": "itaSearch",
"type": "bool",
"label": "Cerca contenuti in italiano",
"default": false,
"enabled": true,
"visible": true
}
]
}

193
channels/1337x.py Executable file
View File

@@ -0,0 +1,193 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per 1337x
# ------------------------------------------------------------
import inspect
from core import support
from platformcode import logger, config
# host = support.config.get_channel_url()
host = 'https://www.1337x.to'
@support.menu
def mainlist(item):
menu = [('Film ITA {bullet bold}',['/movie-lib-sort/all/it/popularity/desc/all/1/', 'peliculas', '', 'movie']),
('Film {submenu}',['/movie-library/1/', 'peliculas', 'filter', 'movie']),
('Serie TV {bullet bold}',['/series-library/', 'az', '', 'tvshow'])]
search = ''
return locals()
def moviefilter(item):
if logger.testMode:
return host +'/movie-lib-sort/all/all/score/desc/all/1/'
from platformcode import platformtools
item.args = ''
controls = []
data = support.match(item).data
patronBlock = r'<select name="{}"[^>]+>(.+?)</select>'
patron = r'value="([^"]+)">([^<]+)'
genres = support.match(data, patronBlock=patronBlock.format('genre'), patron=patron).matches
years = support.match(data, patronBlock=patronBlock.format('year'), patron=patron).matches
langs = support.match(data, patronBlock=patronBlock.format('lang'), patron=patron).matches
sorts = support.match(data, patronBlock=patronBlock.format('sortby'), patron=patron).matches
orders = support.match(data, patronBlock=patronBlock.format('sort'), patron=patron).matches
item.genreValues = [x[0] for x in genres]
item.yearValues = [x[0] for x in years]
item.langValues = [x[0] for x in langs]
item.sortValues = [x[0] for x in sorts]
item.orderValues = [x[0] for x in orders]
genres = [g[1] for g in genres]
years = [g[1] for g in years]
langs = [g[1] for g in langs]
sorts = [g[1] for g in sorts]
orders = [g[1] for g in orders]
controls.append({'id': 'lang', 'label': 'Lingua', 'type': 'list', 'enabled':True, 'visible':True, 'lvalues':langs, 'default': 0})
controls.append({'id': 'genre', 'label': 'Genere', 'type': 'list', 'enabled':True, 'visible':True, 'lvalues':genres, 'default': 0})
controls.append({'id': 'year', 'label': 'Anno', 'type': 'list', 'enabled':True, 'visible':True, 'lvalues':years, 'default': 0})
controls.append({'id': 'sort', 'label': 'Anno', 'type': 'list', 'enabled':True, 'visible':True, 'lvalues':sorts, 'default': 0})
controls.append({'id': 'order', 'label': 'Anno', 'type': 'list', 'enabled':True, 'visible':True, 'lvalues':orders, 'default': 0})
return platformtools.show_channel_settings(list_controls=controls, item=item, caption='Filtro', callback='filtered')
def filtered(item, values):
genre = item.genreValues[values['genre']]
lang = item.langValues[values['lang']]
sortby = item.sortValues[values['sort']]
order = item.orderValues[values['order']]
year = item.yearValues[values['year']]
return '{}/movie-lib-sort/{}/{}/{}/{}/{}/1/'.format(host, genre, lang, sortby, order, year)
def az(item):
import string
itemlist = [item.clone(title='1-9', url=item.url +'num/1/', action='peliculas', thumbnail=support.thumb('az'))]
for letter in list(string.ascii_lowercase):
itemlist.append(item.clone(title=letter.upper(), url=item.url + letter +'/1/', action='peliculas', thumbnail=support.thumb('az')))
return itemlist
def search(item, text):
support.info('search', text)
item.args = 'search'
if config.get_setting('itaSearch', channel=item.channel, default=False):
text += ' ita'
text = text.replace(' ', '+')
item.url = '{}/search/{}/1/'.format(host, text)
try:
return peliculas(item)
# Cattura la eccezione così non interrompe la ricerca globle se il canale si rompe!
except:
import sys
for line in sys.exc_info():
support.logger.error("search except: ", line)
return []
@support.scrape
def peliculas(item):
if item.args == 'filter':
item.url = moviefilter(item)
if not item.url:
data = ' '
else:
data = support.match(item).data
# debug = True
if item.args == 'search':
sceneTitle = 'undefined'
patron = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)<(?:[^>]+>){3,7}(?P<seed>[^<]+)<(?:[^>]+>){6}(?P<size>[^<]+)<span'
patronNext = r'"([^"]+)">&gt;&gt;'
elif item.contentType == 'movie':
patron = r'<img[^>]+data-original="(?P<thumb>[^"]+)(?:[^>]+>){15}(?P<title>[^<]+).*?<p>(?P<plot>[^<]+).*?<a href="(?P<url>[^"]+)'
patronNext = r'"([^"]+)">&gt;&gt;'
else:
action = 'seasons'
patron = r'<img src="(?P<thumb>[^"]+)(?:[^>]+>){4}\s*<a href="(?P<url>[^"]+)[^>]+>(?P<title>[^<]+)'
if (item.args == 'search' or item.contentType != 'movie') and not support.stackCheck(['get_channel_results']):
patronNext = None
def itemlistHook(itemlist):
lastUrl = support.match(data, patron=r'href="([^"]+)">Last').match
if lastUrl:
currentPage = support.match(item.url, string=True, patron=r'/(\d+)/').match
nextPage = int(currentPage) + 1
support.nextPage(itemlist, item, next_page=item.url.replace('/{}'.format(currentPage), '/{}'.format(nextPage)), function_or_level='peliculas')
return itemlist
return locals()
@support.scrape
def seasons(item):
item.contentType = 'season'
action = 'episodios'
patron = r'<li>\s*<a href="(?P<url>[^"]+)[^>]+>\s*<img alt="[^"]*"\ssrc="(?P<thumb>[^"]+)(?:([^>]+)>){2}\s*(?P<title>\w+ (?P<season>\d+))'
return locals()
@support.scrape
def episodios(item):
patron = r'<img src="(?P<thumb>[^"]+)(?:[^>]+>){13}\s*(?P<season>\d+)x(?P<episode>\d+)\s*<span class="seperator">(?:[^>]+>){2}\s*<a href="(?P<url>[^"]+)">(?P<title>[^<]+)'
def itemlistHook(itemlist):
itemlist.reverse()
return itemlist
return locals()
def findvideos(item):
itemlist = []
item.disableAutoplay = True
if item.args == 'search':
itemlist.append(item.clone(server='torrent', action='play'))
else:
from lib.guessit import guessit
items = support.match(item.url, patron=r'<a href="([^"]+)">([^<]+)<(?:[^>]+>){3}([^<]+)<(?:[^>]+>){6}([^<]+)<span').matches
for url, title, seed, size in items:
parsedTitle = guessit(title)
title = support.scrapertools.unescape(parsedTitle.get('title', ''))
lang = ''
if parsedTitle.get('language'):
langs = parsedTitle.get('language')
if isinstance(langs, list):
lang = 'MULTI'
else:
lang = vars(langs).get('alpha3').upper()
if not (lang.startswith('MUL') or lang.startswith('ITA')):
subs = parsedTitle.get('subtitle_language')
if isinstance(subs, list):
lang = 'Multi-Sub'
else:
lang = vars(subs).get('alpha3').upper()
if lang:
title = '{} [{}]'.format(title, lang)
sizematch = support.match(size, patron='(\d+(?:\.\d+)?)\s* (\w+)').match
sizenumber = float(sizematch[0])
if sizematch[1].lower() == 'gb':
sizenumber = sizenumber * 1024
itemlist.append(item.clone(title = '{} [{} SEEDS] [{}]'.format(title, seed, size), seed=int(seed), size=sizenumber, url=host + url, server='torrent', action='play'))
itemlist.sort(key=lambda it: (it.seed, it.size), reverse=True)
Videolibrary = True if 'movie' in item.args else False
return support.server(item, itemlist=itemlist, Videolibrary=Videolibrary, Sorted=False)
def play(item):
from core import servertools
data = support.match(item.url, patron=r'href="(magnet[^"]+)').match
return servertools.find_video_items(item, data=data)

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

@@ -3,7 +3,6 @@
import os
import sys
# Appends the main plugin dir to the PYTHONPATH if an internal package cannot be imported.
# Examples: In Plex Media Server all modules are under "Code.*" package, and in Enigma2 under "Plugins.Extensions.*"
try:
@@ -11,4 +10,3 @@ try:
import core
except:
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")))

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

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

@@ -4,7 +4,7 @@
# ------------------------------------------------------------
import random
from core import httptools, support, config
from core import httptools, support
from platformcode import logger
host = 'https://www.accuradio.com'
@@ -12,29 +12,32 @@ api_url = host + '/c/m/json/{}/'
headers = [['Referer', host]]
def mainlist(item):
js = httptools.downloadpage(api_url.format('brands')).json
itemlist = []
item.action = 'movies'
item.action = 'peliculas'
js = httptools.downloadpage(api_url.format('brands')).json
for it in js.get('features',[]) + js.get('brands',[]):
for it in js.get('features',[]):
itemlist.append(
item.clone(url= '{}/{}'.format(host,it.get('canonical_url','')),
extraInfo = it.get('channels',''),
title=it['name'],
thumbnail = support.thumb('music')
title=support.typo(it['name'],'italic') + support.typo(it.get('channels',''),'_ [] color kod')
))
for it in js.get('brands',[]):
itemlist.append(
item.clone(url= '{}/{}'.format(host,it.get('canonical_url','')),
title=support.typo(it['name'],'bullet bold') + support.typo(it.get('channels',''),'_ [] color kod')
))
itemlist.append(item.clone(title=support.typo(config.getLocalizedString(70741) % 'Musica… ', 'bold'), action='search', thumbnail=support.thumb('music_search')))
itemlist.append(item.clone(title=support.typo('Cerca...', 'bold color kod'), action='search', thumbnail=support.thumb('search')))
support.channel_config(item, itemlist)
return itemlist
@support.scrape
def movies(item):
tmdbEnabled = False
def peliculas(item):
# debug=True
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()
@@ -66,7 +69,7 @@ def playradio(item):
def search(item, text):
logger.debug(text)
support.info(text)
item.url = host + '/search/' + text
itemlist = []
try:
@@ -74,9 +77,9 @@ def search(item, text):
artists = support.match(data, patronBlock=r'artistResults(.*?)</ul', patron=r'href="(?P<url>[^"]+)"\s*>(?P<title>[^<]+)').matches
if artists:
for url, artist in artists:
itemlist.append(item.clone(title=support.typo(artist,'bullet bold'), thumbnail=support.thumb('music'), url=host+url, action='movies'))
itemlist.append(item.clone(title=support.typo(artist,'bullet bold'), thumbnail=support.thumb('music'), url=host+url, action='peliculas'))
item.data = data
itemlist += movies(item)
itemlist += peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys

11
channels/altadefinizione.json Executable file
View File

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

136
channels/altadefinizione.py Executable file
View File

@@ -0,0 +1,136 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per altadefinizione
# ------------------------------------------------------------
from core import httptools, support, tmdb, scrapertools
from platformcode import config, logger
import re
def findhost(url):
host = support.match(url, patron=r'<h2[^>]+><a href="([^"]+)').match.rstrip('/')
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)
headers = [['Referer', host]]
@support.menu
def mainlist(item):
menu = [('Film',['/category/film/', 'peliculas', '', 'movie']),
('Film al cinema {submenu}',['/category/ora-al-cinema/', 'peliculas', '', 'movie']),
('Generi',['', 'genres', '', 'undefined']),
('Saghe',['', 'genres', 'saghe', 'undefined']),
('Serie TV',['/category/serie-tv/', 'peliculas', '', 'tvshow']),
#('Aggiornamenti Serie TV', ['/aggiornamenti-serie-tv/', 'peliculas']) da fixare
]
search = ''
return locals()
@support.scrape
def genres(item):
action = 'peliculas'
blacklist = ['Scegli il Genere', 'Film', 'Serie Tv', 'Sub-Ita', 'Anime', "Non reperibile", 'Anime Sub-ITA', 'Prossimamente',]
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):
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()
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 []
@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 = ''
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()
def episodios(item):
item.quality = ''
data = item.data if item.data else httptools.downloadpage(item.url).data
itemlist = []
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):
item.data = httptools.downloadpage(item.url).data
if 'season-details' in item.data.lower():
item.contentType = 'tvshow'
return episodios(item)
else:
return findvideos(item)
def findvideos(item):
video_url = item.url
if item.contentType == 'movie':
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

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

@@ -5,6 +5,6 @@
"active": true,
"thumbnail": "altadefinizione01.png",
"banner": "altadefinizione01.png",
"categories": ["movie", "sub"],
"categories": ["movie", "vos"],
"settings": []
}

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

@@ -2,11 +2,22 @@
# ------------------------------------------------------------
# Canale per altadefinizione01
# ------------------------------------------------------------
"""
Eccezioni note che non superano il test del canale:
Avvisi:
- L'url si prende da questo file.
- è presente nelle novità-> Film.
Ulteriori info:
"""
from core import scrapertools, httptools, support
from core.item import Item
from platformcode import config, logger
# def findhost(url):
# data = httptools.downloadpage(url).data
# host = scrapertools.find_single_match(data, '<div class="elementor-button-wrapper"> <a href="([^"]+)"')
@@ -21,81 +32,86 @@ headers = [['Referer', host]]
def mainlist(item):
film = [
('Al Cinema', ['/cinema/', 'movies', 'pellicola']),
('Ultimi Aggiornati-Aggiunti', ['','movies', 'update']),
('Al Cinema', ['/cinema/', 'peliculas', 'pellicola']),
('Ultimi Aggiornati-Aggiunti', ['','peliculas', 'update']),
('Generi', ['', 'genres', 'genres']),
('Lettera', ['/catalog/a/', 'genres', 'az']),
('Lettera', ['/catalog/a/', 'genres', 'orderalf']),
('Anni', ['', 'genres', 'years']),
('Sub-ITA', ['/sub-ita/', 'movies', 'pellicola'])
('Sub-ITA', ['/sub-ita/', 'peliculas', 'pellicola'])
]
return locals()
@support.scrape
def movies(item):
def peliculas(item):
support.info('peliculas', item)
## deflang = 'ITA'
action="findvideos"
patron = r'<div class="cover boxcaption"> +<h2>\s*<a href="(?P<url>[^"]+)">(?P<title>[^<]+).*?src="(?P<thumb>[^"]+).*?<div class="trdublaj">(?P<quality>[^<]+).*?<span class="ml-label">(?P<year>[0-9]+).*?<span class="ml-label">(?P<duration>[^<]+).*?<p>(?P<plot>[^<]+)'
patronNext = '<span>\d</span> <a href="([^"]+)">'
if item.args == "search":
patronBlock = r'</script> <div class="boxgrid caption">(?P<block>.*)<div id="right_bar">'
elif item.args == 'update':
patronBlock = r'<div class="widget-title">Ultimi Film Aggiunti/Aggiornati</div>(?P<block>.*?)<div id="alt_menu">'
patron = r'style="background-image:url\((?P<thumb>[^\)]+).+?<p class="h4">(?P<title>.*?)</p>[^>]+> [^>]+> [^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+> [^>]+> [^>]+>[^>]+>(?P<year>\d{4})[^>]+>[^>]+> [^>]+>[^>]+>(?P<duration>\d+|N/A).+?>.*?(?:>Film (?P<lang>Sub ITA)</a></p> )?<p>(?P<plot>[^<]+)<.*?href="(?P<url>[^"]+)'
elif item.args == 'az':
patron = r'style="background-image:url\((?P<thumb>[^\)]+).+?<p class="h4">(?P<title>.*?)</p>[^>]+> [^>]+> [^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+> [^>]+> [^>]+>[^>]+>(?P<year>\d{4})[^>]+>[^>]+> [^>]+>[^>]+>(?P<duration>\d+|N/A)?.+?>.*?(?:>Film (?P<lang>Sub ITA)</a></p> )?<p>(?P<plot>[^<]+)<.*?href="(?P<url>[^"]+)'
patronNext = '' # non ha nessuna paginazione
elif item.args == 'orderalf':
patron = r'<td class="mlnh-thumb"><a href="(?P<url>[^"]+)".*?src="(?P<thumb>[^"]+)"' \
'.+?[^>]+>[^>]+ [^>]+[^>]+ [^>]+>(?P<title>[^<]+).*?[^>]+>(?P<year>\d{4})<' \
'[^>]+>[^>]+>(?P<quality>[A-Z]+)[^>]+> <td class="mlnh-5">(?P<lang>.*?)</td>'
else:
patronBlock = r'<div class="cover_kapsul ml-mask">(?P<block>.*)<div class="page_nav">'
patronNext = r'<a href="([^"]+)">&raquo;'
patronTotalPages = r'>(\d+)(?:[^>]+>){3}&raquo;'
# debug = True
return locals()
@support.scrape
def genres(item):
action = "movies"
support.info('genres',item)
action = "peliculas"
blacklist = ['Altadefinizione01']
if item.args == 'genres':
patronBlock = r'<ul class="kategori_list">(?P<block>.*?)<div class="tab-pane fade" id="wtab2">'
patronGenreMenu = '<li><a href="(?P<url>[^"]+)">(?P<title>.*?)</a>'
patronMenu = '<li><a href="(?P<url>[^"]+)">(?P<title>.*?)</a>'
elif item.args == 'years':
patronBlock = r'<ul class="anno_list">(?P<block>.*?)</li> </ul> </div>'
patronMenu = '<li><a href="(?P<url>[^"]+)">(?P<title>.*?)</a>'
elif item.args == 'az':
elif item.args == 'orderalf':
patronBlock = r'<div class="movies-letter">(?P<block>.*?)<div class="clearfix">'
patronMenu = '<a title=.*?href="(?P<url>[^"]+)"><span>(?P<title>.*?)</span>'
#debug = True
return locals()
@support.scrape
def az(item):
def orderalf(item):
support.info('orderalf',item)
action = 'findvideos'
patron = r'<td class="mlnh-thumb"><a href="(?P<url>[^"]+)".*?src="(?P<thumb>[^"]+)"'\
'.+?[^>]+>[^>]+ [^>]+[^>]+ [^>]+>(?P<title>[^<]+).*?[^>]+>(?P<year>\d{4})<'\
'[^>]+>[^>]+>(?P<quality>[A-Z]+)[^>]+> <td class="mlnh-5">(?P<lang>.*?)</td>'
patronNext = r'<span>[^<]+</span>[^<]+<a href="(.*?)">'
return locals()
def search(item, text):
logger.debug(text)
support.info(item, text)
itemlist = []
text = text.replace(" ", "+")
item.url = host + "/index.php?do=search&story=%s&subaction=search" % (text)
item.args = "search"
try:
return movies(item)
return peliculas(item)
# Cattura la eccezione così non interrompe la ricerca globle se il canale si rompe!
except:
import sys
@@ -103,18 +119,18 @@ def search(item, text):
logger.error("search except: %s" % line)
return []
def newest(category):
logger.debug(category)
def newest(categoria):
support.info(categoria)
itemlist = []
item = Item()
try:
if category == "movie":
if categoria == "peliculas":
item.url = host
item.action = "movies"
item.action = "peliculas"
item.contentType = 'movie'
itemlist = movies(item)
if itemlist[-1].action == "movies":
itemlist = peliculas(item)
if itemlist[-1].action == "peliculas":
itemlist.pop()
# Continua la ricerca in caso di errore
except:
@@ -125,13 +141,17 @@ def newest(category):
return itemlist
def findvideos(item):
logger.debug()
support.info('findvideos', item)
data = httptools.downloadpage(item.url).data
iframe = support.match(data, patron='player-container[^>]+>\s*<iframe[^>]+src="([^"]+)').match
iframe = support.match(data, patron='src="(http[^"]+)" frameborder=\"0\" allow=\"accelerometer; autoplay;').match
if iframe:
item.url = iframe
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]
return support.server(item, itemlist=itemlist, headers=headers)
return support.server(item)
# TODO: verificare se si puo' reinsierire il trailer youtube
#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

View File

@@ -1,10 +0,0 @@
{
"id": "altadefinizione01_link",
"name": "Altadefinizione01 L",
"active": false,
"language": ["ita","sub-ita"],
"thumbnail": "altadefinizione01_L.png",
"banner": "altadefinizione01_L.png",
"categories": ["movie","sub"],
"settings" :[]
}

View File

@@ -1,96 +0,0 @@
# -*- coding: utf-8 -*-
# -*- Channel altadefinizione01_link -*-
from core import support
from core.item import Item
from platformcode import config, logger
__channel__ = "altadefinizione01_link"
# ======== def per utility INIZIO ============================
host = config.get_channel_url()
headers = [['Referer', host]]
# =========== home menu ===================
@support.menu
def mainlist(item):
film = [
('Al Cinema', ['/film-del-cinema', 'movies', '']),
('Generi', ['', 'genres', 'genres']),
('Anni', ['', 'genres', 'years']),
('Qualità', ['/piu-visti.html', 'genres', 'quality']),
('Mi sento fortunato', ['/piu-visti.html', 'genres', 'lucky']),
('Popolari', ['/piu-visti.html', 'movies', '']),
('Sub-ITA', ['/film-sub-ita/', 'movies', ''])
]
return locals()
# ======== def in ordine di action dal menu ===========================
@support.scrape
def movies(item):
patron = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)(?:[^>]+>){5}\s*<div class="[^"]+" style="background-image:url\((?P<thumb>[^\)]+)(?:[^>]+>){6}\s*(?P<year>\d{4})[^>]+>[^>]+>(?:\s*(?P<duration>\d+))?(?:[^>]+>){0,2}\s+(?P<quality>[a-zA-Z]+)\s+(?:[^>]+>){2}\s*(?P<lang>[^>]+)\s+[^>]+>'
patronNext = r'<span>\d</span> <a href="([^"]+)">'
return locals()
# =========== def pagina categorie ======================================
@support.scrape
def genres(item):
action = 'movies'
if item.args == 'genres':
patronBlock = r'<ul class="listSubCat" id="Film">(?P<block>.*)<ul class="listSubCat" id="Anno">'
elif item.args == 'years':
patronBlock = r'<ul class="listSubCat" id="Anno">(?P<block>.*)<ul class="listSubCat" id="Qualita">'
elif item.args == 'quality':
patronBlock = r'<ul class="listSubCat" id="Qualita">(?P<block>.*)<blockquote'
elif item.args == 'lucky': # sono i titoli random nella pagina
patronBlock = r'FILM RANDOM.*?class="listSubCat">(?P<block>.*)</ul>'
action = 'findvideos'
patronMenu = r'<li><a href="(?P<url>[^"]+)">(?P<title>[^<]+)<'
return locals()
# =========== def per cercare film/serietv =============
#host+/index.php?do=search&story=avatar&subaction=search
def search(item, text):
logger.debug(text)
itemlist = []
text = text.replace(" ", "+")
item.url = host+"/index.php?do=search&story=%s&subaction=search" % (text)
try:
return movies(item)
# Se captura la excepcion, para no interrumpir al buscador global si un canal falla
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
return []
# =========== def per le novità nel menu principale =============
def newest(category):
logger.debug(category)
itemlist = []
item = Item()
try:
if category == "movie":
item.url = host
item.action = "movies"
item.contentType='movie'
itemlist = movies(item)
if itemlist[-1].action == "movies":
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
return []
return itemlist
def findvideos(item):
logger.debug('findvideos', item)
return support.server(item, support.match(item, patron='<ul class="playernav">.*?</ul>', headers=headers).match)

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

@@ -1,11 +1,11 @@
{
"id": "altadefinizioneclick",
"name": "AltadefinizioneClick",
"active": true,
"active": false,
"language": ["ita","sub-ita"],
"thumbnail": "altadefinizioneclick.png",
"bannermenu": "altadefinizioneciclk.png",
"categories": ["tvshow","movie","sub"],
"not_active":["include_in_newest_tvshow"],
"categories": ["tvshow","movie","vos"],
"not_active":["include_in_newest_series"],
"settings": []
}

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

@@ -1,178 +1,151 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per altadefinizioneclick
# Canale per Altadefinizione Click
# ----------------------------------------------------------
from platformcode import logger
from core import support
from core.item import Item
from platformcode import config
from platformcode import config, logger
def findhost(url):
data = support.httptools.downloadpage(url).data
host = support.scrapertools.find_single_match(data, '<div class="elementor-button-wrapper">\s*<a href="([^"]+)"')
return host
return support.match(url, patron=r'<div class="elementor-button-wrapper">\s*<a href="([^"]+)"').match
host = config.get_channel_url(findhost)
headers = [['Referer', host]]
if host.endswith('/'):
host = host[:-1]
headers = {'Referer': host, 'x-requested-with': 'XMLHttpRequest'}
order = ['', 'i_piu_visti', 'i_piu_votati', 'i_piu_votati_dellultimo_mese', 'titolo_az', 'voto_imdb_piu_alto'][config.get_setting('order', 'altadefinizionecommunity')]
@support.menu
def mainlist(item):
film = ['',
('Novità', ['/nuove-uscite/', 'movies', 'news']),
('Al Cinema', ['/al-cinema/', 'movies', 'cinema']),
('A-Z',['/lista-film/', 'genres', 'az']),
('Generi', ['', 'genres', 'genres']),
('Anni', ['', 'genres', 'years']),
('Qualità', ['', 'genres', 'quality']),
('Mi sento Fortunato',[ '', 'genres', 'lucky']),
('Sub-ITA', ['/sub-ita/', 'movies', 'sub'])
]
logger.debug(item)
tvshow = ['/serie-tv/']
film = ['/type/movie',
('Generi', ['/type/movie', 'genres', 'genres']),
('Anni', ['/type/movie', 'genres', 'year']),]
search = ''
return locals()
@support.scrape
def movies(item):
action = 'check'
patron = r'<div class="wrapperImage">\s*(?:<span class="year">(?P<year>[^<]+)[^>]+>)?(?:<span class="hd">(?P<quality>[^<>]+))?.+?href="(?P<url>[^"]+)".+?src="(?P<thumb>[^"]+)".+?<h2 class="titleFilm">[^>]+>(?P<title>.+?)[ ]?(?:|\[(?P<lang>[^\]]+)\])?</a>.*?(?:IMDB\:</strong>[ ](?P<rating>.+?)<|</div>)'
if item.args == 'az':
patron = r'<img style="[^"]+" src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>[^>]+><a href="(?P<url>[^"]+)" [^>]+>(?P<title>[^<\[]+)(?:\[(?P<lang>[^\]]+)\]\s*)?<'\
r'[^>]+>[^>]+>[^>]+>[^>]+>\s*(?P<year>\d{4})[^>]+>[^>]+>\s*(?P<quality>[^<]+).*?<span class="label">(?P<ratting>[^<]+)<'
patronBlock =''
elif item.args == 'search':
patronBlock = r'<section id="lastUpdate">(?P<block>.*?)(?:<div class="row ismobile">|<section)'
patron = r'<a href="(?P<url>[^"]+)">\s*<div class="wrapperImage">(?:\s*<span class="year">(?P<year>[^<]+)<\/span>)?(?:\s*<span class="hd">(?P<quality>[^<]+)<\/span>)?[^>]+>\s*<img[^s]+src="(?P<thumb>[^"]+)"(?:(?:[^>]+>){5}\s*(?P<rating>[^<]+))?(?:[^>]+>){4}(?P<title>[^<]+)'
if not item.args:
# patronBlock = r'(?:ULTIMI INSERITI|Serie TV)(?P<block>.*?)</section'
patronBlock = r'({})(?P<block>.*?)</section'.format('ULTIMI INSERITI' if item.contentType == 'movie' else 'Serie TV')
# debugBlock = True
patronNext = r'<a class="next page-numbers" href="([^"]+)">'
patronTotalPages = r'>(\d+)(?:[^>]+>){3}<a class="next'
tvshow = ['/serie-tv/tvshow',
('Generi', ['/serie-tv/tvshow', 'genres', 'genres']),
('Anni', ['/serie-tv/tvshow', 'genres', 'year'])]
return locals()
def search(item, texto):
logger.debug("search ", texto)
item.args = 'search'
item.url = host + "/search?s={}&f={}&page=1".format(texto, item.contentType)
try:
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.logger.error("%s" % line)
return []
@support.scrape
def genres(item):
action = 'movies'
patronGenreMenu = r'<li><a href="(?P<url>[^"]+)">(?P<title>[^<]+)<'
logger.debug(item)
data = support.httptools.downloadpage(item.url, cloudscraper=True).data
blacklist= ['Film', 'Serie TV']
if item.args == 'genres':
patronBlock = r'<ul class="listSubCat" id="Film">(?P<block>.*)<ul class="listSubCat" id="Anno">'
elif item.args == 'years':
patronBlock = r'<ul class="listSubCat" id="Anno">(?P<block>.*)<ul class="listSubCat" id="Qualita">'
elif item.args == 'quality':
patronBlock = r'<ul class="listSubCat" id="Qualita">(?P<block>.*)</li>\s*?</ul>\s*?</div>\s*?</div>\s*?</div>\s*?<a'
elif item.args == 'lucky': # sono i titoli random nella pagina
patronBlock = r'<h3 class="titleSidebox dado">FILM RANDOM</h3>(?P<block>.*)</section>'
patron = r'<li><a href="(?P<url>[^"]+)">(?P<title>[^<[]+)(?:\[(?P<lang>.+?)\])?<'
action = 'findvideos'
elif item.args == 'az':
blacklist = ['FILM 4K IN STREAMING']
patron = r'<a title="(?P<title>[^"]+)" href="(?P<url>[^"]+)"'
item.args = 'az'
if not item.args == 'az':
item.args = 'genres'
categories ={}
res = support.match(host + '/cerca', patron=r'for="cat-(\d+)[^>]+>([^<]+)').matches
for _id, name in res:
categories[name] = _id
patronBlock = r'{}<span></span>(?P<block>.*?)</ul>\s*</li'.format('Film' if item.contentType == 'movie' else 'Serie TV')
patronMenu = r'<a href="[^"]+">(?P<title>[^<]+)'
def itemHook(it):
it.cat_id = categories[it.fulltitle]
return it
if item.args == 'year':
patron = r'value="(?P<year_id>[^"]+)"[^>]*>(?P<title>\d+)'
patronBlock = r'Anno</option>(?P<block>.*?</select>)'
elif item.args == 'quality':
patronMenu = r'quality/(?P<quality_id>[^"]+)">(?P<title>[^<]+)'
patronBlock = r'Risoluzione(?P<block>.*?)</ul>'
action = 'peliculas'
return locals()
def search(item, text):
logger.debug(text)
item.args = 'search'
item.url = host + "?s=" + text
try:
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
return []
def newest(category):
logger.debug(category)
itemlist = []
item = Item()
try:
if category == "movie":
item.args = 'news'
item.contentType = 'movie'
item.url = host + "/nuove-uscite/"
item.action = "movies"
itemlist = movies(item)
if itemlist[-1].action == "movies":
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
from platformcode import logger
logger.error("{0}".format(line))
return []
return itemlist
def check(item):
item.contentType = 'tvshow'
def get_season(pageData, seas_url, season):
data = ''
episodes = support.match(pageData if pageData else seas_url, patronBlock=patron_episode, patron=patron_option).matches
for episode_url, episode in episodes:
title = season + "x" + episode.zfill(2) + ' - ' + item.fulltitle
data += title + '|' + episode_url + '\n'
return data
patron_season = '<div class="[^"]+" id="seasonsModal"[^>]+>(.*?)</ul>'
patron_episode = '<div class="[^"]+" id="episodesModal"[^>]+>(.*?)</ul>'
patron_option = r'<a href="([^"]+?)".*?>(?:Stagione |Episodio )([^<]+?)</a>'
url = support.match(item, patron=r'<iframe id="iframeVid" width="[^"]+" height="[^"]+" src="([^"]+)" allowfullscreen')
seasons = support.match(url.match, patronBlock=patron_season, patron=patron_option)
if not seasons.match:
item.contentType = 'tvshow'
item.data = url.data
return findvideos(item)
data = ''
import sys
if sys.version_info[0] >= 3: from concurrent import futures
else: from concurrent_py2 import futures
with futures.ThreadPoolExecutor() as executor:
thL = []
for i, season in enumerate(seasons.matches):
thL.append(executor.submit(get_season, seasons.data if i == 0 else '', season[0], season[1]))
for res in futures.as_completed(thL):
if res.result():
data += res.result()
item.data = data
return episodes(item)
@support.scrape
def episodes(item):
data = item.data
def peliculas(item):
item.quality = 'HD'
json = {}
params ={'type':item.contentType, 'anno':item.year_id, 'quality':item.quality_id, 'cat':item.cat_id, 'order':order}
patron = r'(?P<season>\d+)x(?P<episode>\d+)\s*-\s*(?P<title>[^\|]+)\|(?P<url>[^ ]+)'
action = 'findvideos'
def itemlistHook(itemlist):
itemlist.sort(key=lambda item: (item.infoLabels['season'], item.infoLabels['episode']))
return itemlist
if item.contentType == 'movie':
action = 'findvideos'
else:
action = 'episodios'
if not item.page: item.page = 1
try:
# support.dbg()
if item.args in ['search']:
page = support.httptools.downloadpage(item.url, headers=headers)
if page.json:
data = "\n".join(page.json['data'])
else:
data = page.data
else:
params['page'] = item.page
url = '{}/load-more-film?{}'.format(host, support.urlencode(params))
json = support.httptools.downloadpage(url, headers=headers).json
data = "\n".join(json['data'])
except:
data = ' '
patron = r'wrapFilm">\s*<a href="(?P<url>[^"]+)">[^>]+>(?P<year>\d+)(?:[^>]+>){2}(?P<rating>[^<]+)(?:[^>]+>){4}\s*<img src="(?P<thumb>[^"]+)(?:[^>]+>){3}(?P<title>[^<[]+)(?:\[(?P<lang>[sSuUbBiItTaA-]+))?'
# patron = r'wrapFilm">\s*<a href="(?P<url>[^"]+)">[^>]+>(?P<year>\d+)(?:[^>]+>){2}(?P<rating>[^<]+)(?:[^>]+>){2}(?P<quality>[^<]+)(?:[^>]+>){2}\s*<img src="(?P<thumb>[^"]+)(?:[^>]+>){3}(?P<title>[^<[]+)(?:\[(?P<lang>[sSuUbBiItTaA-]+))?'
# paginazione
if json.get('have_next') or 'have_next_film=true' in data:
def fullItemlistHook(itemlist):
cat_id = support.match(data, patron=r''''cat':"(\d+)"''').match
if cat_id: item.cat_id = cat_id
item.page += 1
support.nextPage(itemlist, item, function_or_level='peliculas')
return itemlist
return locals()
@support.scrape
def episodios(item):
logger.debug(item)
# debug = True
data = item.data
patron = r'class="playtvshow "\s+data-href="(?P<url>[^"]+)'
def itemHook(it):
spl = it.url.split('/')[-2:]
it.infoLabels['season'] = int(spl[0])+1
it.infoLabels['episode'] = int(spl[1])+1
it.url = it.url.replace('/watch-unsubscribed', '/watch-external')
it.title = '{}x{:02d} - {}'.format(it.contentSeason, it.contentEpisodeNumber, it.fulltitle)
return it
return locals()
def findvideos(item):
logger.debug()
return support.hdpass_get_servers(item, item.data)
itemlist = []
playWindow = support.match(item, patron='(?:playWindow|iframe)" (?:href|src)="([^"]+)').match
if host in playWindow:
url = support.match(playWindow, patron='allowfullscreen[^<]+src="([^"]+)"').match
else:
url = playWindow
itemlist.append(item.clone(action='play', url=url, quality=''))
return support.server(item, itemlist=itemlist)

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

@@ -2,10 +2,10 @@
"id": "altadefinizionecommunity",
"name": "Altadefinizione Community",
"language": ["ita", "sub-ita"],
"active": true,
"active": false,
"thumbnail": "altadefinizionecommunity.png",
"banner": "",
"categories": ["movie", "tvshow", "sub"],
"categories": ["movie", "tvshow", "vos"],
"not_active": ["include_in_newest"],
"settings": [
{
@@ -23,5 +23,15 @@
"label": "password",
"type": "text",
"visible": true
}]
},
{
"id": "order",
"type": "list",
"label": "Ordine di Visualizzazione",
"default": 0,
"enabled": true,
"visible": true,
"lvalues": [ "Nessuno", "I più visti", "I più votati", "I più votati dell'ultimo mese", "Titolo A-Z", "Voto IMDB più alto"]
}
]
}

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

@@ -22,7 +22,7 @@ if host.endswith('/'):
host = host[:-1]
headers = {'Referer': host}
order = ['', 'i_piu_visti', 'i_piu_votati', 'i_piu_votati_dellultimo_mese', 'titolo_az', 'voto_imdb_piu_alto'][config.getSetting('order', 'altadefinizionecommunity')]
order = ['', 'i_piu_visti', 'i_piu_votati', 'i_piu_votati_dellultimo_mese', 'titolo_az', 'voto_imdb_piu_alto'][config.get_setting('order', 'altadefinizionecommunity')]
@support.menu
@@ -49,7 +49,7 @@ def search(item, text):
item.args = 'search'
item.url = host + "/search?s={}&f={}".format(text.replace(' ', '+'), item.contentType)
try:
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
@@ -87,19 +87,19 @@ def genres(item):
patronMenu = r'quality/(?P<quality_id>[^"]+)">(?P<title>[^<]+)'
patronBlock = r'Risoluzione(?P<block>.*?)</ul>'
action = 'movies'
action = 'peliculas'
return locals()
@support.scrape
def movies(item):
def peliculas(item):
item.quality = 'HD'
json = {}
if not item.page: item.page = 1
params ={'type':item.contentType, 'anno':item.year_id, 'quality':item.quality_id, 'cat':item.cat_id, 'order':order, 'page':item.page}
# debug = True
action = 'findvideos' if item.contentType == 'movie' else 'episodes'
action = 'findvideos' if item.contentType == 'movie' else 'episodios'
try:
# support.dbg()
@@ -132,14 +132,15 @@ def movies(item):
cat_id = support.match(data, patron=r''''cat':"(\d+)"''').match
if cat_id: item.cat_id = cat_id
item.page += 1
support.nextPage(itemlist, item, function_or_level='movies')
support.nextPage(itemlist, item, function_or_level='peliculas')
return itemlist
return locals()
@support.scrape
def episodes(item):
def episodios(item):
registerOrLogin()
logger.debug(item)
# debug = True
data = item.data
@@ -168,9 +169,9 @@ def findvideos(item):
def play(item):
if host in item.url: # intercetto il server proprietario
# if registerOrLogin():
return support.get_jwplayer_mediaUrl(support.httptools.downloadpage(item.url, cloudscraper=True).data, 'Diretto')
return support.get_jwplayer_mediaurl(support.httptools.downloadpage(item.url, cloudscraper=True).data, 'Diretto')
# else:
# platformtools.playCanceled = True
# platformtools.play_canceled = True
# return []
else:
return [item]
@@ -180,9 +181,9 @@ def resolve_url(item):
registerOrLogin()
if '/watch-unsubscribed' not in item.url and '/watch-external' not in item.url:
playWindow = support.match(support.httptools.downloadpage(item.url, cloudscraper=True).data, patron='playWindow" href="([^"]+)')
videoUrl = playWindow.match
video_url = playWindow.match
item.data = playWindow.data
item.url = videoUrl.replace('/watch-unsubscribed', '/watch-external')
item.url = video_url.replace('/watch-unsubscribed', '/watch-external')
return item
@@ -195,33 +196,33 @@ def login():
logger.info('Login in corso')
post = {'_token': '',
'form_action':'login',
'email': config.getSetting('username', channel='altadefinizionecommunity'),
'password':config.getSetting('password', channel='altadefinizionecommunity')}
'email': config.get_setting('username', channel='altadefinizionecommunity'),
'password':config.get_setting('password', channel='altadefinizionecommunity')}
r = support.httptools.downloadpage(host + '/login', post=post, headers={'referer': host}, cloudscraper=True)
if r.code not in [200, 302] or 'Email o Password non validi' in r.data:
platformtools.dialogOk('AltadefinizioneCommunity', 'Username/password non validi')
platformtools.dialog_ok('AltadefinizioneCommunity', 'Username/password non validi')
return False
return 'id="logged"' in r.data
def registerOrLogin():
if config.getSetting('username', channel='altadefinizionecommunity') and config.getSetting('password', channel='altadefinizionecommunity'):
if config.get_setting('username', channel='altadefinizionecommunity') and config.get_setting('password', channel='altadefinizionecommunity'):
if login():
return True
action = platformtools.dialogYesNo('AltadefinizioneCommunity',
action = platformtools.dialog_yesno('AltadefinizioneCommunity',
'Questo server necessita di un account, ne hai già uno oppure vuoi tentare una registrazione automatica?',
yeslabel='Accedi', nolabel='Tenta registrazione', customlabel='Annulla')
if action == 1: # accedi
from specials import setting
from core.item import Item
user_pre = config.getSetting('username', channel='altadefinizionecommunity')
password_pre = config.getSetting('password', channel='altadefinizionecommunity')
user_pre = config.get_setting('username', channel='altadefinizionecommunity')
password_pre = config.get_setting('password', channel='altadefinizionecommunity')
setting.channel_config(Item(config='altadefinizionecommunity'))
user_post = config.getSetting('username', channel='altadefinizionecommunity')
password_post = config.getSetting('password', channel='altadefinizionecommunity')
user_post = config.get_setting('username', channel='altadefinizionecommunity')
password_post = config.get_setting('password', channel='altadefinizionecommunity')
if user_pre != user_post or password_pre != password_post:
return registerOrLogin()
@@ -235,7 +236,7 @@ def registerOrLogin():
randPsw = ''.join(random.choice(string.ascii_letters + string.digits) for i in range(10))
logger.debug('email: ' + mailbox.address)
logger.debug('pass: ' + randPsw)
reg = platformtools.dialogRegister(register_url, email=True, password=True, email_default=mailbox.address, password_default=randPsw)
reg = platformtools.dialog_register(register_url, email=True, password=True, email_default=mailbox.address, password_default=randPsw)
if not reg:
return False
regPost = httptools.downloadpage(register_url, post={'email': reg['email'], 'password': reg['password']}, cloudscraper=True)
@@ -243,27 +244,27 @@ def registerOrLogin():
if regPost.url == register_url:
error = scrapertools.htmlclean(scrapertools.find_single_match(regPost.data, 'Impossibile proseguire.*?</div>'))
error = scrapertools.unescape(scrapertools.re.sub('\n\s+', ' ', error))
platformtools.dialogOk('AltadefinizioneCommunity', error)
platformtools.dialog_ok('AltadefinizioneCommunity', error)
return False
if reg['email'] == mailbox.address:
if "L'indirizzo email risulta già registrato" in regPost.data:
# httptools.downloadpage(baseUrl + '/forgotPassword', post={'email': reg['email']})
platformtools.dialogOk('AltadefinizioneCommunity', 'Indirizzo mail già utilizzato')
platformtools.dialog_ok('AltadefinizioneCommunity', 'Indirizzo mail già utilizzato')
return False
mail = mailbox.waitForMail()
if mail:
checkUrl = scrapertools.find_single_match(mail.body, '<a href="([^"]+)[^>]+>Verifica').replace(r'\/', '/')
logger.debug('CheckURL: ' + checkUrl)
httptools.downloadpage(checkUrl, cloudscraper=True)
config.setSetting('username', mailbox.address, channel='altadefinizionecommunity')
config.setSetting('password', randPsw, channel='altadefinizionecommunity')
platformtools.dialogOk('AltadefinizioneCommunity',
config.set_setting('username', mailbox.address, channel='altadefinizionecommunity')
config.set_setting('password', randPsw, channel='altadefinizionecommunity')
platformtools.dialog_ok('AltadefinizioneCommunity',
'Registrato automaticamente con queste credenziali:\nemail:' + mailbox.address + '\npass: ' + randPsw)
else:
platformtools.dialogOk('AltadefinizioneCommunity', 'Impossibile registrarsi automaticamente')
platformtools.dialog_ok('AltadefinizioneCommunity', 'Impossibile registrarsi automaticamente')
return False
else:
platformtools.dialogOk('AltadefinizioneCommunity', 'Hai modificato la mail quindi KoD non sarà in grado di effettuare la verifica in autonomia, apri la casella ' + reg['email']
platformtools.dialog_ok('AltadefinizioneCommunity', 'Hai modificato la mail quindi KoD non sarà in grado di effettuare la verifica in autonomia, apri la casella ' + reg['email']
+ ' e clicca sul link. Premi ok quando fatto')
logger.debug('Registrazione completata')
else:

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

@@ -1,11 +1,11 @@
{
"id": "animealtadefinizione",
"name": "AnimealtaDefinizione",
"active": true,
"name": "AnimealtAdefinizione",
"active": false,
"language": ["ita", "sub-ita"],
"thumbnail": "animealtadefinizione.png",
"banner": "animealtadefinizione.png",
"categories": ["anime", "sub"],
"categories": ["anime", "sub-ita"],
"default_off": ["include_in_newest"],
"settings": [
{

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

@@ -3,16 +3,14 @@
# Canale per animealtadefinizione
# ----------------------------------------------------------
from platformcode import platformtools
from core import support
from platformcode import logger
host = support.config.get_channel_url()
headers = [['Referer', host]]
perpage_list = ['20','30','40','50','60','70','80','90','100']
perpage = perpage_list[support.config.getSetting('perpage' , 'animealtadefinizione')]
epPatron = r'<td>\s*(?P<title>[^<]+)[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"'
perpage = perpage_list[support.config.get_setting('perpage' , 'animealtadefinizione')]
epPatron = r'<td>\s*(?P<title>[^<]+)[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>\s*<img[^>]+/Streaming'
@support.menu
@@ -21,92 +19,91 @@ def mainlist(item):
('Tipo',['', 'menu', 'Anime']),
('Anno',['', 'menu', 'Anno']),
('Genere', ['', 'menu','Genere']),
('Ultimi Episodi',['', 'movies', 'last'])]
('Ultimi Episodi',['', 'peliculas', 'last'])]
return locals()
@support.scrape
def menu(item):
action = 'movies'
action = 'peliculas'
patronBlock= r'<a href="' + host + r'/category/' + item.args.lower() + r'/">' + item.args + r'</a>\s*<ul class="sub-menu">(?P<block>.*?)</ul>'
patronMenu = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)<'
if 'genere' in item.args.lower():
patronGenreMenu = patronMenu
return locals()
def search(item, text):
logger.debug(text)
item.search = text
def search(item, texto):
support.info(texto)
item.search = texto
try:
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
support.logger.error("%s" % line)
return []
def newest(category):
logger.debug(category)
def newest(categoria):
support.info(categoria)
item = support.Item()
try:
if category == "anime":
if categoria == "anime":
item.url = host
item.args = "last"
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
support.logger.error("{0}".format(line))
return []
@support.scrape
def movies(item):
def peliculas(item):
if '/movie/' in item.url:
item.contentType = 'movie'
action='findvideos'
elif item.args == 'last':
item.contentType = 'episode'
action='findvideos'
action='episodios'
else:
item.contentType = 'tvshow'
action='episodes'
action='episodios'
if item.search:
query = 's'
searchtext = item.search
else:
query='category_name'
searchtext = item.url.split('/')[-2]
page = 1 if not item.page else item.page
numerationEnabled = True
post = 'action=itajax-sort&loop=main+loop&location=&thumbnail=1&rating=1sorter=recent&columns=4&numarticles={}&paginated={}&currentquery%5B{}%5D={}'.format(perpage, page, query, searchtext)
res = support.match(host + '/wp-admin/admin-ajax.php', post=post, patron=r'"pages":(\d+)')
data= res.data.replace('\\','')
# item.total_pages = int(res.match)
if not item.pag: item.pag = 1
# debug = True
anime = True
data = support.match(host + '/wp-admin/admin-ajax.php', post='action=itajax-sort&loop=main+loop&location=&thumbnail=1&rating=1sorter=recent&columns=4&numarticles='+perpage+'&paginated='+str(item.pag)+'&currentquery%5B'+query+'%5D='+searchtext).data.replace('\\','')
patron = r'<a href="(?P<url>[^"]+)"><img width="[^"]+" height="[^"]+" src="(?P<thumb>[^"]+)" class="[^"]+" alt="" title="(?P<title>[^"]+?)\s+(?P<type>Movie)?\s*(?P<lang>Sub Ita|Ita)?\s*[sS]treaming'
typeContentDict = {'movie':['movie']}
typeActionDict = {'findvideos':['movie']}
def itemHook(item):
item.url = support.re.sub('episodio-[0-9-]+', '', item.url)
return item
def itemlistHook(itemlist):
if item.search:
itemlist = [ it for it in itemlist if ' Episodio ' not in it.title ]
if len(itemlist) == int(perpage):
support.nextPage(itemlist, item, 'movies', page=page + 1, total_pages=int(res.match))
item.pag += 1
itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'), action='peliculas'))
return itemlist
return locals()
@support.scrape
def episodes(item):
numerationEnabled = True
pagination = True
def episodios(item):
anime = True
# debug = True
pagination = int(perpage)
patron = epPatron
return locals()
@@ -116,9 +113,10 @@ def findvideos(item):
if item.contentType == 'movie':
matches = support.match(item, patron=epPatron).matches
for title, url in matches:
# support.dbg()
get_video_list(item, url, title, itemlist)
else:
get_video_list(item, item.url, support.config.getLocalizedString(30137), itemlist)
get_video_list(item, item.url, support.config.get_localized_string(30137), itemlist)
return support.server(item, itemlist=itemlist)

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

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

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

@@ -3,8 +3,7 @@
# Canale per AnimeForce
# ------------------------------------------------------------
from core import scrapertools, support
from platformcode import logger
from core import support
host = support.config.get_channel_url()
headers = [['Referer', host]]
@@ -12,85 +11,83 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
anime = ['/lista-anime/',
('In Corso',['/anime/anime-status/in-corso/', 'movies', 'status']),
('Completi',['/anime/anime-status/completo/', 'movies', 'status']),
anime = ['/anime',
('In Corso',['/anime/anime-status/in-corso/', 'peliculas', 'status']),
('Completi',['/anime/anime-status/completo/', 'peliculas', 'status']),
('Genere',['/anime', 'submenu', 'genre']),
('Anno',['/anime', 'submenu', 'anime-year']),
('Tipologia',['/anime', 'submenu', 'anime-type']),
('Stagione',['/anime', 'submenu', 'anime-season']),
('Ultime Serie',['/category/anime/articoli-principali/','movies','last'])
('Ultime Serie',['/category/anime/articoli-principali/','peliculas','last'])
]
return locals()
@support.scrape
def submenu(item):
action = 'movies'
action = 'peliculas'
patronBlock = r'data-taxonomy="' + item.args + r'"(?P<block>.*?)</select'
patronMenu = r'<option class="level-\d+ (?P<u>[^"]+)"[^>]+>(?P<title>[^(]+)[^\(]+\((?P<num>\d+)'
if 'genre' in item.args:
patronGenreMenu = patronMenu
patronMenu = r'<option class="level-\d+ (?P<url>[^"]+)"[^>]+>(?P<t>[^(]+)[^\(]+\((?P<num>\d+)'
def itemHook(item):
item.url += host + '/anime/' + item.args + '/' + item.u
# item.title = support.typo(item.t, 'bold')
if not item.url.startswith('http'):
item.url = host + '/anime/' + item.args + '/' + item.url
item.title = support.typo(item.t, 'bold')
return item
return locals()
def newest(category):
logger.debug(category)
def newest(categoria):
support.info(categoria)
itemlist = []
item = support.Item()
try:
if category == "anime":
if categoria == "anime":
item.contentType = 'tvshow'
item.url = host
item.args = 'newest'
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
support.logger.error("{0}".format(line))
return []
return itemlist
def search(item, text):
logger.debug(text)
support.info('search',text)
item.search = text
item.url = host + '/lista-anime/'
item.contentType = 'tvshow'
try:
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
support.logger.error("%s" % line)
return []
@support.scrape
def movies(item):
def peliculas(item):
search = item.search
numerationEnabled = True
if 'movie' in item.url:
action = 'findvideos'
else:
action = 'check'
anime = True
action = 'check'
if not item.args:
pagination = True
patron = r'<a\s*href="(?P<url>[^"]+)"\s*title="(?P<title>[^"]+)">'
else:
patron = r'<a href="(?P<url>[^"]+)"[^>]+>\s*<img src="(?P<thumb>[^"]+)" alt="(?P<title>.*?)(?: Sub| sub| SUB|")'
patron = r'<a href="(?P<url>[^"]+)"[^>]+>\s*<img src="(?P<thumb>[^"]+)" alt="(?P<title>.*?)(?: Sub| sub| SUB|")'
if search:
patron = r'<a href="(?P<url>[^"]+)"\s*title="(?P<title>.*?)(?: Sub| sub| SUB|")'
if item.args == 'newest': item.action = 'findvideos'
patronNext = '<li class="page-item disabled">(?:[^>]+>){4}<a class="page-link" href="([^"]+)'
def itemHook(item):
if 'sub-ita' in item.url:
if item.args != 'newest': item.title = item.title + support.typo('Sub-ITA','_ [] color kod')
item.contentLanguage = 'Sub-ITA'
return item
@@ -98,76 +95,68 @@ def movies(item):
def check(item):
m = support.match(item, headers=headers, patron=r'Tipologia[^>]+><a href="([^"]+)"')
m = support.match(item, headers=headers, patron=r'Tipologia[^>]+>\s*<a href="([^"]+)"')
item.data = m.data
if 'movie' in m.match:
item.contentType = 'movie'
return findvideos(item)
else:
return episodes(item)
def episodes(item):
@support.scrape
def _episodes(item):
actLike = 'episodes'
disableAll = True
data = item.data
if '<h6>Streaming</h6>' in data:
patron = r'<td style[^>]+>\s*.*?(?:<span[^>]+)?<strong>(?P<episode>[^<]+)<\/strong>.*?<td style[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>'
else:
patron = r'<a\s*href="(?P<url>[^"]+)"[^>]+>(?P<episode>\d+)[<-](?P<episode2>\d+)?'
def itemHook(item):
if item.url.startswith('//'): item.url= 'https:' + item.url
elif item.url.startswith('/'): item.url= 'https:/' + item.url
return item
action = 'findvideos'
return locals()
itemlist = support.itemlistdb() if item.itemlist else []
groups = support.match(item.data, patron=[r'"tabpanel">.*?</div', r'Special-tab">.*?</div']).matches
for group in groups:
item.data = group
if 'Special' in group:
item.contentSeason = 0
itemlist.extend(_episodes(item))
from platformcode.autorenumber import start
start(itemlist, item)
itemlist = support.season_pagination(itemlist, item, function_level='episodes')
return itemlist
return episodios(item)
@support.scrape
def episodios(item):
anime = True
pagination = 50
data = item.data
if '<h6>Streaming</h6>' in data:
patron = r'<td style[^>]+>\s*.*?(?:<span[^>]+)?<strong>(?P<title>[^<]+)<\/strong>.*?<td style[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>(?P<episode>\d+)'
else:
patron = r'<a\s*href="(?P<url>[^"]+)"\s*title="(?P<title>[^"]+)"\s*class="btn btn-dark mb-1">(?P<episode>\d+)'
def itemHook(item):
support.info(item)
if item.url.startswith('//'): item.url= 'https:' + item.url
elif item.url.startswith('/'): item.url= 'https:/' + item.url
return item
action = 'findvideos'
return locals()
def findvideos(item):
logger.debug()
support.info(item)
itemlist = []
if 'adf.ly' in item.url:
from servers.decrypters import adfly
url = adfly.get_long_url(item.url)
elif 'bit.ly' in item.url:
url = support.httptools.downloadpage(item.url, only_headers=True, follow_redirects=False).headers.get("location")
if item.data:
url = support.match(item.data, patron=r'<a\s*href="([^"]+)"\s*title="[^"]+"\s*class="btn btn-dark mb-1">').match
else:
url = host
for u in item.url.split('/'):
if u and 'animeforce' not in u and 'http' not in u:
url += '/' + u
url = item.url
if 'php?' in url:
url = support.httptools.downloadpage(url, only_headers=True, follow_redirects=False).headers.get("location")
url = support.match(url, patron=r'class="button"><a href=(?:")?([^" ]+)', headers=headers).match
else:
if item.data: url = item.data
url = support.match(url, patron=r'data-href="([^"]+)" target').match
if not url: url = support.match(url, patron=[r'<source src=(?:")?([^" ]+)',r'name="_wp_http_referer" value="([^"]+)"']).match
if url.startswith('//'): url = 'https:' + url
elif url.startswith('/'): url = 'https:/' + url
if 'vvvvid' in url: itemlist.append(item.clone(action="play", title='VVVVID', url=url, server='vvvvid'))
else: itemlist.append(item.clone(action="play", title=support.config.getLocalizedString(30137), url=url, server='directo'))
# if 'adf.ly' in item.url:
# from servers.decrypters import adfly
# url = adfly.get_long_url(item.url)
# elif 'bit.ly' in item.url:
# url = support.httptools.downloadpage(item.url, only_headers=True, follow_redirects=False).headers.get("location")
# else:
# url = host
# for u in item.url.split('/'):
# if u and 'animeforce' not in u and 'http' not in u:
# url += '/' + u
# if 'php?' in url:
# url = support.httptools.downloadpage(url, only_headers=True, follow_redirects=False).headers.get("location")
# url = support.match(url, patron=r'class="button"><a href=(?:")?([^" ]+)', headers=headers).match
# else:
# if item.data: url = item.data
# if item.contentType == 'movie': url = support.match()
# url = support.match(url, patron=r'data-href="([^"]+)" target').match
# if not url: url = support.match(url, patron=[r'<source src=(?:")?([^" ]+)',r'name="_wp_http_referer" value="([^"]+)"']).match
# if url.startswith('//'): url = 'https:' + url
# elif url.startswith('/'): url = 'https:/' + url
url = support.match(url, patron=r'data-href="([^"]+)" target').match
if 'vvvvid' in url: itemlist.append(item.clone(action="play", title='VVVVID', url=url, server='vvvvid'))
else: itemlist.append(item.clone(action="play", title=support.config.get_localized_string(30137), url=url, server='directo'))
return support.server(item, itemlist=itemlist)

View File

@@ -1,11 +0,0 @@
{
"id": "animeleggendari",
"name": "AnimePerTutti",
"active": false,
"language": ["ita", "sub-ita"],
"thumbnail": "animepertutti.png",
"bannermenu": "animepertutti.png",
"categories": ["anime", "sub"],
"not_active":["include_in_newest_movie", "include_in_newest_tvshow", "include_in_newest_anime"],
"settings": []
}

View File

@@ -1,142 +0,0 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per animeleggendari
# ------------------------------------------------------------
from core import support
from platformcode import logger
from lib.js2py.host import jsfunctions
host = support.config.get_channel_url()
headers = [['User-Agent', 'Mozilla/50.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0'],
['Referer', host]]
@support.menu
def mainlist(item):
anime = [
# ('Leggendari', ['/category/anime-leggendari/', 'movies']),
('ITA', ['/category/anime-ita/', 'movies']),
('SUB-ITA', ['/category/anime-sub-ita/', 'movies']),
('Conclusi', ['/category/serie-anime-concluse/', 'movies']),
('in Corso', ['/category/serie-anime-in-corso/', 'movies']),
('Genere', ['', 'genres'])
]
return locals()
def search(item, text):
logger.debug(text)
item.url = host + "/?s=" + text
try:
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
return []
@support.scrape
def genres(item):
blacklist = ['Contattaci','Privacy Policy', 'DMCA']
patronMenu = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)<'
patronBlock = r'Generi</a>\s*<ul[^>]+>(?P<block>.*?)<\/ul>'
action = 'movies'
return locals()
@support.scrape
def movies(item):
numerationEnabled = True
blacklist = ['top 10 anime da vedere']
if item.url != host: patronBlock = r'<div id="main-content(?P<block>.*?)<aside'
patron = r'<figure class="(?:mh-carousel-thumb|mh-posts-grid-thumb)">\s*<a (?:class="[^"]+" )?href="(?P<url>[^"]+)" title="(?P<title>.*?)(?: \((?P<year>\d+)\))? (?:(?P<lang>SUB ITA|ITA))(?: (?P<title2>[Mm][Oo][Vv][Ii][Ee]))?[^"]*"><img (?:class="[^"]+"|width="[^"]+" height="[^"]+") src="(?P<thumb>[^"]+)"[^>]+'
def itemHook(item):
if 'movie' in item.title.lower():
item.title = support.re.sub(' - [Mm][Oo][Vv][Ii][Ee]|[Mm][Oo][Vv][Ii][Ee]','',item.title)
# item.title += support.typo('Movie','_ () bold')
item.contentType = 'movie'
item.action = 'findvideos'
return item
def itemlistHook(itemlist):
itlist = []
for item in itemlist:
if 'nuovo episodio:' not in item.title.lower():
itlist += [item]
return itlist
patronNext = r'<a class="next page-numbers" href="([^"]+)">'
action = 'episodes'
return locals()
@support.scrape
def episodes(item):
data = support.match(item, headers=headers, patronBlock=r'entry-content clearfix">(.*?)class="mh-widget mh-posts-2 widget_text').block
if not 'pagination clearfix' in data:
logger.debug('NOT IN DATA')
patron = r'<iframe.*?src="(?P<url>[^"]+)"'
title = item.title
def fullItemlistHook(itemlist):
if len(itemlist) > 0:
urls = []
for item in itemlist:
urls.append(item.url)
item = itemlist[0]
item.data = urls
item.title = title
item.contentType = 'movie'
itemlist = []
itemlist.append(item)
return itemlist
else:
url = item.url
numerationEnabled = True
patronBlock = r'(?:<p style="text-align: left;">|<div class="pagination clearfix">\s*)(?P<block>.*?)</span></a></div>'
patron = r'(?:<a href="(?P<url>[^"]+)"[^>]+>)?<span class="pagelink">(?P<episode>\d+)'
def itemHook(item):
if not item.url:
item.url = url
if 'Movie Parte' in data:
item.title = item.fulltitle + ' - Part ' + item.title
item.contentType = 'movie'
else:
item.title = 'Episodio ' + item.title
return item
return locals()
def check(item):
data = support.match(item, headers=headers).data
if 'Lista Episodi' not in data:
item.data = data
return findvideos(item)
data = ''
return data
def findvideos(item):
logger.debug()
if item.data:
data = item.data
else:
matches = support.match(item, patron=r'<iframe.*?src="(?P<url>[^"]+)"').matches
data = ''
if matches:
for match in matches:
try: data += str(jsfunctions.unescape(support.re.sub('@|g','%', match)))
except: data += ''
data += str(match)
else:
data = ''
return support.server(item,data)

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

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

@@ -4,22 +4,23 @@
# ----------------------------------------------------------
from core import support
from platformcode import logger
host = support.config.get_channel_url()
__channel__ = 'animesaturn'
cookie = support.config.getSetting('cookie', __channel__)
cookie = support.config.get_setting('cookie', __channel__)
headers = {'X-Requested-With': 'XMLHttpRequest', 'Cookie': cookie}
def get_cookie(data):
global cookie, headers
cookie = support.match(data, patron=r'document.cookie="([^\s]+)').match
support.config.setSetting('cookie', cookie, __channel__)
support.config.set_setting('cookie', cookie, __channel__)
headers = [['Cookie', cookie]]
def get_data(item):
# support.dbg()
# url = support.match(item.url, headers=headers, follow_redirects=True, only_headers=True).url
data = support.match(item.url, headers=headers, follow_redirects=True).data
if 'ASCookie' in data:
get_cookie(data)
@@ -34,40 +35,40 @@ def mainlist(item):
('ITA',['', 'submenu', '/filter?language%5B0%5D=1']),
('SUB-ITA',['', 'submenu', '/filter?language%5B0%5D=0']),
('Più Votati',['/toplist','menu', 'top']),
('In Corso',['/animeincorso','movies','incorso']),
('Ultimi Episodi',['/fetch_pages.php?request=episodes&d=1','movies','updated'])]
('In Corso',['/animeincorso','peliculas','incorso']),
('Ultimi Episodi',['/fetch_pages.php?request=episodes&d=1','peliculas','updated'])]
return locals()
def search(item, text):
logger.debug(text)
item.url = host + '/animelist?search=' + text
def search(item, texto):
support.info(texto)
item.url = host + '/animelist?search=' + texto
item.contentType = 'tvshow'
try:
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
support.logger.error("%s" % line)
return []
def newest(category):
logger.debug(category)
def newest(categoria):
support.info()
itemlist = []
item = support.Item()
try:
if category == "anime":
if categoria == "anime":
item.url = host + '/fetch_pages.php?request=episodes&d=1'
item.args = "updated"
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
support.logger.error("{0}".format(line))
return []
return itemlist
@@ -79,7 +80,7 @@ def submenu(item):
action = 'filter'
patronMenu = r'<h5 class="[^"]+">(?P<title>[^<]+)[^>]+>[^>]+>\s*<select id="(?P<parameter>[^"]+)"[^>]+>(?P<data>.*?)</select>'
def itemlistHook(itemlist):
itemlist.insert(0, item.clone(title=support.typo('Tutti','bold'), url=item.url + item.args, action='movies'))
itemlist.insert(0, item.clone(title=support.typo('Tutti','bold'), url=item.url + item.args, action='peliculas'))
return itemlist[:-1]
return locals()
@@ -88,15 +89,15 @@ def filter(item):
itemlist = []
matches = support.match(item.data if item.data else item.url, patron=r'<option value="(?P<value>[^"]+)"[^>]*>(?P<title>[^<]+)').matches
for value, title in matches:
itemlist.append(item.clone(title= support.typo(title,'bold'), url='{}{}&{}%5B0%5D={}'.format(host, item.args, item.parameter, value), action='movies', args='filter'))
support.thumb(itemlist, mode='genre')
itemlist.append(item.clone(title= support.typo(title,'bold'), url='{}{}&{}%5B0%5D={}'.format(host, item.args, item.parameter, value), action='peliculas', args='filter'))
support.thumb(itemlist, genre=True)
return itemlist
@support.scrape
def menu(item):
patronMenu = r'<div class="col-md-13 bg-dark-as-box-shadow p-2 text-white text-center">(?P<title>[^"<]+)<(?P<other>.*?)(?:"lista-top"|"clearfix")'
action = 'movies'
action = 'peliculas'
item.args = 'top'
def itemHook(item2):
item2.url = item.url
@@ -106,8 +107,8 @@ def menu(item):
@support.scrape
def movies(item):
numerationEnabled = True
def peliculas(item):
anime = True
deflang= 'Sub-ITA'
action = 'check'
@@ -129,7 +130,7 @@ def movies(item):
action = 'findvideos'
def itemlistHook(itemlist):
if page:
itemlist.append(item.clone(title=support.typo(support.config.getLocalizedString(30992), 'color kod bold'),page= page, thumbnail=support.thumb()))
itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'),page= page, thumbnail=support.thumb()))
return itemlist
elif 'filter' in item.args:
page = support.match(data, patron=r'totalPages:\s*(\d+)').match
@@ -138,11 +139,11 @@ def movies(item):
if item.nextpage: item.nextpage += 1
else: item.nextpage = 2
if page and item.nextpage < int(page):
itemlist.append(item.clone(title=support.typo(support.config.getLocalizedString(30992), 'color kod bold'), url= '{}&page={}'.format(item.url, item.nextpage), infoLabels={}, thumbnail=support.thumb()))
itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'), url= '{}&page={}'.format(item.url, item.nextpage), infoLabels={}, thumbnail=support.thumb()))
return itemlist
else:
pagination = True
# pagination = ''
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>[^<]+)<'
else:
@@ -155,26 +156,27 @@ def movies(item):
def check(item):
movie = support.match(item, patron=r'Episodi:</b> (\d*) Movie')
if movie.match:
episodes = episodes(item)
episodes = episodios(item)
if len(episodes) > 0:
it = episodes[0].clone(contentType = 'movie', contentTitle=item.fulltitle, contentSerieName='')
return findvideos(it)
else:
item.contentType = 'tvshow'
return episodes(item)
return episodios(item)
@support.scrape
def episodes(item):
if item.contentType != 'movie': numerationEnabled = True
patron = r'episodi-link-button">\s*<a href="(?P<url>[^"]+)"[^>]+>\s*(?P<title>[^<]+)</a>'
def episodios(item):
if item.contentType != 'movie': anime = True
patron = r'episodi-link-button">\s*<a href="(?P<url>[^"]+)"[^>]+>\s*(?P<title>[^\d<]+(?P<episode>\d+))\s*</a>'
return locals()
def findvideos(item):
logger.debug()
support.info()
itemlist = []
links = []
main_url = support.match(item, patron=r'<a href="([^"]+)">[^>]+>[^>]+>G').match
urls = support.match(support.match(main_url, headers=headers).data, patron=r'<a class="dropdown-item"\s*href="([^"]+)', headers=headers).matches
itemlist.append(item.clone(action="play", title='Primario', url=main_url, server='directo'))
@@ -185,16 +187,8 @@ def findvideos(item):
links.append(link)
return support.server(item, data=links, itemlist=itemlist)
def play(item):
if item.server == 'directo':
item.url = support.match(item.url, patron=r'(?:source type="[^"]+"\s*src=|file:[^"]+)"([^"]+)').match
return[item]

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

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

@@ -1,244 +1,268 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per AnimeUnity
# ------------------------------------------------------------
import cloudscraper, json, copy, inspect
from core import jsontools, support, config
from core.httptools import downloadpage
from platformcode import autorenumber, logger
session = cloudscraper.create_scraper()
host = support.config.get_channel_url()
response = session.get(host + '/archivio')
csrf_token = support.match(response.text, patron='name="csrf-token" content="([^"]+)"').match
headers = {'content-type': 'application/json;charset=UTF-8',
'Referer': host,
'x-csrf-token': csrf_token,
'Cookie' : '; '.join([x.name + '=' + x.value for x in response.cookies])}
@support.menu
def mainlist(item):
top = [('Ultimi Episodi', ['', 'news'])]
menu = [('Anime {bullet bold}',['', 'menu', {}, 'tvshow']),
('Film {submenu}',['', 'menu', {'type': 'Movie'}]),
('TV {submenu}',['', 'menu', {'type': 'TV'}, 'tvshow']),
('OVA {submenu} {tv}',['', 'menu', {'type': 'OVA'}, 'tvshow']),
('ONA {submenu} {tv}',['', 'menu', {'type': 'ONA'}, 'tvshow']),
('Special {submenu} {tv}',['', 'menu', {'type': 'Special'}, 'tvshow'])]
search =''
return locals()
def menu(item):
item.action = 'movies'
ITA = copy.copy(item.args)
ITA['title'] = '(ita)'
InCorso = copy.copy(item.args)
InCorso['status'] = 'In Corso'
Terminato = copy.copy(item.args)
Terminato['status'] = 'Terminato'
itemlist = [item.clone(title=support.typo('Tutti','bold')),
item.clone(title='ITA', args=ITA),
item.clone(title='Genere', action='genres'),
item.clone(title='Anno', action='years')]
if item.contentType == 'tvshow':
itemlist += [item.clone(title='In Corso', args=InCorso),
item.clone(title='Terminato', args=Terminato)]
itemlist +=[item.clone(title=support.typo(config.getLocalizedString(70741).replace(' %s', ''),'bold'), action='search', thumbnail=support.thumb('search'))]
return itemlist
def genres(item):
logger.debug()
itemlist = []
genres = json.loads(support.match(response.text, patron='genres="([^"]+)').match.replace('&quot;','"'))
for genre in genres:
item.args['genres'] = [genre]
itemlist.append(item.clone(title=genre['name'], action='movies'))
return support.thumb(itemlist)
def years(item):
logger.debug()
itemlist = []
from datetime import datetime
current_year = datetime.today().year
oldest_year = int(support.match(response.text, patron='anime_oldest_date="([^"]+)').match)
for year in list(reversed(range(oldest_year, current_year + 1))):
item.args['year']=year
itemlist.append(item.clone(title=year, action='movies'))
return itemlist
def search(item, text):
logger.debug(text)
if not item.args:
item.args = {'title':text}
else:
item.args['title'] = text
item.search = text
try:
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.debug('search log:', line)
return []
def newest(category):
logger.debug(category)
itemlist = []
item = support.Item()
item.url = host
try:
itemlist = news(item)
if itemlist[-1].action == 'news':
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.debug(line)
return []
return itemlist
def news(item):
logger.debug()
item.contentType = 'episode'
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;','"'))
# logger.debug(jsontools.dump(fullJs))
js = fullJs['data']
for it in js:
itemlist.append(
item.clone(title=it['anime']['title'],
contentTitle = it['anime']['title'],
contentEpisodeNumber = int(it['number']),
fulltitle=it['anime']['title'],
thumbnail=it['anime']['imageurl'],
forcethumb = True,
videoUrl=it['scws_id'],
plot=it['anime']['plot'],
action='findvideos')
)
if fullJs.get('next_page_url'):
support.nextPage(itemlist, item, 'news', next_page=fullJs['next_page_url'], total_pages=int(fullJs['last_page_url'].split('=')[-1]))
return itemlist
def movies(item):
logger.debug()
itemlist = []
page = item.page if item.page else 0
item.args['offset'] = page * 30
order = support.config.getSetting('order', item.channel)
if order:
order_list = [ "Standard", "Lista A-Z", "Lista Z-A", "Popolarità", "Valutazione" ]
item.args['order'] = order_list[order]
payload = json.dumps(item.args)
js = session.post(host + '/archivio/get-animes', headers=headers, data=payload).json()
records = js['records']
total_pages = int(js['tot'] / 30)
for it in records:
logger.debug(jsontools.dump(it))
lang = support.match(it['title'], patron=r'\(([It][Tt][Aa])\)').match
title = support.re.sub(r'\s*\([^\)]+\)', '', it['title'])
if 'ita' in lang.lower(): language = 'ITA'
else: language = 'Sub-ITA'
itm = item.clone(title=title,
contentLanguage = language,
type = it['type'],
thumbnail = it['imageurl'],
plot = it['plot'],
url = '{}/{}-{}'.format(item.url, it['id'], it['slug'])
)
# itm.contentLanguage = language
# itm.type = it['type']
# itm.thumbnail = it['imageurl']
# itm.plot = it['plot']
# itm.url = item.url
if it['episodes_count'] == 1:
itm.contentType = 'movie'
itm.fulltitle = itm.show = itm.contentTitle = title
itm.contentSerieName = ''
itm.action = 'play'
item.forcethumb=True
itm.videoUrl = it['episodes'][0]['scws_id']
else:
itm.contentType = 'tvshow'
itm.contentTitle = ''
itm.fulltitle = itm.show = itm.contentSerieName = title
itm.action = 'episodes'
itm.episodes = it['episodes'] if 'episodes' in it else it['scws_id']
# itm.videoUrl = item.url
itemlist.append(itm)
autorenumber.start(itemlist)
if len(itemlist) == 30:
support.nextPage(itemlist, item, 'movies', page=page + 1, total_pages=total_pages)
return itemlist
def episodes(item):
logger.debug()
itemlist = []
# title = 'Parte ' if item.type.lower() == 'movie' else 'Episodio '
for it in item.episodes:
episode2 = it['number'].split('.')[-1]
episode = it['number'].split('.')[0]
itemlist.append(
item.clone(episodes = [],
contentEpisodeNumber=int(float(it['number'])),
episodeExtra = '.' + it['number'].split('.')[-1] if '.' in it['number'] else '',
action='play',
contentType='episode',
forcethumb=True,
videoUrl=it['scws_id']))
if inspect.stack()[1][3] not in ['find_episodes']:
autorenumber.start(itemlist, item)
support.videolibrary(itemlist, item)
support.download(itemlist, item)
return itemlist
def play(item):
from time import time
from base64 import b64encode
from hashlib import md5
# Calculate Token
client_ip = support.httptools.downloadpage('https://scws.xyz/videos/{}'.format(item.videoUrl), headers=headers).json.get('client_ip')
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.xyz/master/{}?token={}&expires={}&n=1'.format(item.videoUrl, token, expires)
return [item.clone(server='directo', url=url, manifest='hls')]
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per AnimeUnity
# ------------------------------------------------------------
import cloudscraper, json, copy, inspect
from core import jsontools, support, httptools, scrapertools
from platformcode import autorenumber
# support.dbg()
host = support.config.get_channel_url()
response = httptools.downloadpage(host + '/archivio')
csrf_token = support.match(response.data, patron='name="csrf-token" content="([^"]+)"').match
headers = {'content-type': 'application/json;charset=UTF-8',
'x-csrf-token': csrf_token,
'Cookie' : '; '.join([x.name + '=' + x.value for x in response.cookies])}
@support.menu
def mainlist(item):
top = [('Ultimi Episodi', ['', 'news'])]
menu = [('Anime {bullet bold}',['', 'menu', {}, 'tvshow']),
('Film {submenu}',['', 'menu', {'type': 'Movie'}]),
('TV {submenu}',['', 'menu', {'type': 'TV'}, 'tvshow']),
('OVA {submenu} {tv}',['', 'menu', {'type': 'OVA'}, 'tvshow']),
('ONA {submenu} {tv}',['', 'menu', {'type': 'ONA'}, 'tvshow']),
('Special {submenu} {tv}',['', 'menu', {'type': 'Special'}, 'tvshow'])]
search =''
return locals()
def menu(item):
item.action = 'peliculas'
ITA = copy.copy(item.args)
ITA['title'] = '(ita)'
InCorso = copy.copy(item.args)
InCorso['status'] = 'In Corso'
Terminato = copy.copy(item.args)
Terminato['status'] = 'Terminato'
itemlist = [item.clone(title=support.typo('Tutti','bold')),
item.clone(title=support.typo('ITA','bold'), args=ITA),
item.clone(title=support.typo('Genere','bold'), action='genres'),
item.clone(title=support.typo('Anno','bold'), action='years')]
if item.contentType == 'tvshow':
itemlist += [item.clone(title=support.typo('In Corso','bold'), args=InCorso),
item.clone(title=support.typo('Terminato','bold'), args=Terminato)]
itemlist +=[item.clone(title=support.typo('Cerca...','bold'), action='search', thumbnail=support.thumb('search'))]
return itemlist
def genres(item):
support.info()
# support.dbg()
itemlist = []
genres = json.loads(support.match(response.data, patron='genres="([^"]+)').match.replace('&quot;','"'))
for genre in genres:
item.args['genres'] = [genre]
itemlist.append(item.clone(title=support.typo(genre['name'],'bold'), action='peliculas'))
return support.thumb(itemlist)
def years(item):
support.info()
itemlist = []
from datetime import datetime
next_year = datetime.today().year + 1
oldest_year = int(support.match(response.data, patron='anime_oldest_date="([^"]+)').match)
for year in list(reversed(range(oldest_year, next_year + 1))):
item.args['year']=year
itemlist.append(item.clone(title=support.typo(year,'bold'), action='peliculas'))
return itemlist
def search(item, text):
support.info('search', item)
if not item.args:
item.args = {'title':text}
else:
item.args['title'] = text
item.search = text
try:
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info('search log:', line)
return []
def newest(categoria):
support.info(categoria)
itemlist = []
item = support.Item()
item.url = host
try:
itemlist = news(item)
if itemlist[-1].action == 'news':
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info(line)
return []
return itemlist
def news(item):
support.info()
item.contentType = 'episode'
itemlist = []
fullJs = json.loads(support.match(httptools.downloadpage(item.url).data, headers=headers, patron=r'items-json="([^"]+)"').match.replace('&quot;','"'))
js = fullJs['data']
for it in js:
if it.get('anime', {}).get('title') or it.get('anime', {}).get('title_eng'):
title_name = it['anime']['title'] if it.get('anime', {}).get('title') else it['anime']['title_eng']
pattern = r'[sS](?P<season>\d+)[eE](?P<episode>\d+)'
match = scrapertools.find_single_match(it['file_name'], pattern)
full_episode = ''
if match:
season, episode = match
full_episode = ' - S' + season + ' E' + episode
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:
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
def peliculas(item):
support.info()
itemlist = []
page = item.page if item.page else 0
item.args['offset'] = page * 30
order = support.config.get_setting('order', item.channel)
if order:
order_list = [ "Standard", "Lista A-Z", "Lista Z-A", "Popolarità", "Valutazione" ]
item.args['order'] = order_list[order]
payload = json.dumps(item.args)
records = httptools.downloadpage(host + '/archivio/get-animes', headers=headers, post=payload).json['records']
# support.dbg()
for it in records:
if not it['title']:
it['title'] = ''
lang = support.match(it['title'], patron=r'\(([It][Tt][Aa])\)').match
title = support.re.sub(r'\s*\([^\)]+\)', '', it['title'])
if 'ita' in lang.lower(): language = 'ITA'
else: language = 'Sub-ITA'
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.type = it['type']
itm.thumbnail = it['imageurl']
itm.plot = it['plot']
itm.url = '{}/anime/{}-{}'.format(item.url, it.get('id'), it.get('slug'))
if it['episodes_count'] == 1:
itm.contentType = 'movie'
itm.fulltitle = itm.show = itm.contentTitle = title
itm.contentSerieName = ''
itm.action = 'findvideos'
itm.scws_id = it['episodes'][0].get('scws_id', '')
# itm.video_url = it['episodes'][0].get('link', '')
else:
itm.contentType = 'tvshow'
itm.contentTitle = ''
itm.fulltitle = itm.show = itm.contentSerieName = title
itm.action = 'episodios'
itm.episodes = it['episodes'] if 'episodes' in it else it.get('scws_id', '')
itemlist.append(itm)
autorenumber.start(itemlist)
if len(itemlist) >= 30:
itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'), thumbnail=support.thumb(), page=page + 1))
return itemlist
def episodios(item):
support.info()
itemlist = []
title = 'Parte' if item.type.lower() == 'movie' else 'Episodio'
for it in item.episodes:
itemlist.append(
item.clone(title=support.typo('{}. {} {}'.format(it['number'], title, it['number']), 'bold'),
episode = it['number'],
fulltitle=item.title,
show=item.title,
contentTitle='',
contentSerieName=item.contentSerieName,
thumbnail=item.thumbnail,
plot=item.plot,
action='findvideos',
contentType='episode',
url = '{}/{}'.format(item.url, it['id'])
)
# video_url=it.get('link', ''))
)
if inspect.stack(0)[1][3] not in ['find_episodes']:
autorenumber.start(itemlist, item)
support.videolibrary(itemlist, item)
support.download(itemlist, item)
return itemlist
def findvideos(item):
# 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)
#
# 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

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

@@ -1,11 +1,11 @@
{
"id": "animeuniverse",
"name": "AnimeUniverse",
"active": true,
"name": "AnimeHDitalia",
"active": false,
"language": ["ita", "sub-ita"],
"thumbnail": "animeuniverse.png",
"banner": "animeuniverse.png",
"categories": ["anime", "sub"],
"categories": ["anime", "sub-ita"],
"default_off": ["include_in_newest"],
"settings": [
{

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

@@ -4,14 +4,13 @@
# ----------------------------------------------------------
from core import support
from platformcode import logger
host = support.config.get_channel_url()
headers = {}
perpage_list = ['20','30','40','50','60','70','80','90','100']
perpage = perpage_list[support.config.getSetting('perpage' , 'animeuniverse')]
epPatron = r'<td>\s*(?P<title>[^ <]+)\s*(?P<episode>\d+)?[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"'
perpage = perpage_list[support.config.get_setting('perpage' , 'animeuniverse')]
epPatron = r'<td>\s*(?P<title>[^<]+)[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>\s*<img [^>]+Streaming'
@support.menu
@@ -20,52 +19,50 @@ def mainlist(item):
('Tipo',['', 'menu', 'Anime']),
('Anno',['', 'menu', 'Anno']),
('Genere', ['', 'menu','Genere']),
('Ultimi Episodi',['/2/', 'movies', 'last']),
('Hentai', ['/hentai/', 'movies'])]
('Ultimi Episodi',['/2/', 'peliculas', 'last']),
('Hentai', ['/hentai/', 'peliculas'])]
return locals()
@support.scrape
def menu(item):
action = 'movies'
action = 'peliculas'
patronBlock = item.args + r'</a>\s*<ul class="sub-menu">(?P<block>.*?)</ul>'
patronMenu = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)<'
if 'genere' in item.args.lower():
patronGenreMenu = patronMenu
return locals()
def search(item, text):
logger.debug(text)
item.search = text
def search(item, texto):
support.info(texto)
item.search = texto
try:
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
support.logger.error("%s" % line)
return []
def newest(category):
logger.debug(category)
def newest(categoria):
support.info(categoria)
item = support.Item()
try:
if category == "anime":
if categoria == "anime":
item.url = host
item.args = "last"
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
support.logger.error("{0}".format(line))
return []
@support.scrape
def movies(item):
def peliculas(item):
query = ''
if '/mos/' in item.url:
item.contentType = 'movie'
@@ -77,7 +74,7 @@ def movies(item):
action='findvideos'
else:
item.contentType = 'tvshow'
action='episodes'
action='episodios'
if item.search:
query = 's'
searchtext = item.search
@@ -86,7 +83,7 @@ def movies(item):
searchtext = item.url.split('/')[-2] if item.url != host else ''
if not item.pag: item.pag = 1
numerationEnabled = False
anime=True
# blacklist=['Altri Hentai']
data = support.match(host + '/wp-content/themes/animeuniverse/functions/ajax.php', post='sorter=recent&location=&loop=main+loop&action=sort&numarticles='+perpage+'&paginated='+str(item.pag)+'&currentquery%5B'+query+'%5D='+searchtext+'&thumbnail=1').data.replace('\\','')
patron=r'<a href="(?P<url>[^"]+)"><img width="[^"]+" height="[^"]+" src="(?P<thumb>[^"]+)" class="[^"]+" alt="" title="(?P<title>.*?)\s*(?P<lang>Sub ITA|ITA)?(?:"| \[)'
@@ -94,7 +91,7 @@ def movies(item):
def itemlistHook(itemlist):
if len(itemlist) == int(perpage):
item.pag += 1
itemlist.append(item.clone(title=support.typo(support.config.getLocalizedString(30992), 'color kod bold'), action='movies'))
itemlist.append(item.clone(title=support.typo(support.config.get_localized_string(30992), 'color kod bold'), action='peliculas'))
return itemlist
return locals()
@@ -102,10 +99,11 @@ def movies(item):
@support.scrape
def episodes(item):
numerationEnabled = True
pagination = True
def episodios(item):
anime = True
pagination = int(perpage)
patron = epPatron
# debug = True
return locals()
@@ -116,7 +114,7 @@ def findvideos(item):
for title, url in matches:
get_video_list(url, title, itemlist)
else:
get_video_list(item.url, support.config.getLocalizedString(30137), itemlist)
get_video_list(item.url, support.config.get_localized_string(30137), itemlist)
return support.server(item, itemlist=itemlist)

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

@@ -5,8 +5,17 @@
"language": ["ita", "sub-ita"],
"thumbnail": "animeworld.png",
"banner": "animeworld.png",
"categories": ["anime", "sub"],
"categories": ["anime", "vos"],
"settings": [
{
"id": "lang",
"type": "list",
"label": "Lingua di Ricerca",
"default": 0,
"enabled": true,
"visible": true,
"lvalues": [ "Tutte", "Ita", "Sub-Ita"]
},
{
"id": "order",
"type": "list",

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

@@ -4,56 +4,55 @@
# thanks to fatshotty
# ----------------------------------------------------------
from core import httptools, support, jsontools
from platformcode import logger
from core import httptools, support, config, jsontools
host = support.config.get_channel_url()
__channel__ = 'animeworld'
cookie = support.config.getSetting('cookie', __channel__)
cookie = support.config.get_setting('cookie', __channel__)
headers = [['Cookie', cookie]]
def get_cookie(data):
global cookie, headers
cookie = support.match(data, patron=r'document.cookie="([^\s]+)').match
support.config.setSetting('cookie', cookie, __channel__)
support.config.set_setting('cookie', cookie, __channel__)
headers = [['Cookie', cookie]]
def get_data(item):
data = ''
if item.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
if 'AWCookieVerify' in data:
get_cookie(data)
data = get_data(item)
# support.dbg()
url = httptools.downloadpage(item.url, headers=headers, follow_redirects=True, only_headers=True).url
data = support.match(url, headers=headers, follow_redirects=True).data
if 'SecurityAW' in data:
get_cookie(data)
data = get_data(item)
return data
def order():
# Seleziona l'ordinamento dei risultati
return str(support.config.getSetting("order", __channel__))
return str(support.config.get_setting("order", __channel__))
@support.menu
def mainlist(item):
anime=['/filter?sort=',
('ITA',['/filter?dub=1&sort=', 'menu', '1']),
('SUB-ITA',['/filter?dub=0&sort=', 'menu', '0']),
('In Corso', ['/ongoing', 'movies','noorder']),
('Ultimi Episodi', ['/updated', 'movies', 'updated']),
('Nuove Aggiunte',['/newest', 'movies','noorder' ]),
('ITA',['/filter?dub=1&sort=', 'menu', 'dub=1']),
('SUB-ITA',['/filter?dub=0&sort=', 'menu', 'dub=0']),
('In Corso', ['/ongoing', 'peliculas','noorder']),
('Ultimi Episodi', ['/updated', 'peliculas', 'updated']),
('Nuove Aggiunte',['/newest', 'peliculas','noorder' ]),
('Generi',['/?d=1','genres',])]
return locals()
@support.scrape
def genres(item):
action = 'movies'
action = 'peliculas'
data = get_data(item)
patronBlock = r'dropdown[^>]*>\s*Generi\s*<span.[^>]+>(?P<block>.*?)</ul>'
patronGenreMenu = 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):
item.url = host + '/filter?' + item.name + '=' + item.value + '&sort='
@@ -65,66 +64,65 @@ def genres(item):
def menu(item):
action = 'submenu'
data = get_data(item)
patronMenu = r'<button[^>]+>\s*(?P<title>[A-Za-z0-9]+)\s*<span.[^>]+>(?P<other>.*?)</ul>'
genre = False
patronMenu=r'<button[^>]+>\s*(?P<title>[A-Za-z0-9]+)\s*<span.[^>]+>(?P<other>.*?)</ul>'
def itemlistHook(itemlist):
for item in itemlist:
item.title += ' {anime}'
itemlist.insert(0, item.clone(title=support.typo('Tutti {anime}','bold'), action='movies'))
itemlist.append(item.clone(title=support.typo('Cerca... {anime}','bold'), action='search', search=True, thumbnail=support.thumb('search.png')))
itemlist.insert(0, item.clone(title=support.typo('Tutti','bold'), action='peliculas'))
itemlist.append(item.clone(title=support.typo('Cerca...','bold'), action='search', search=True, thumbnail=support.thumb('search.png')))
return itemlist
return locals()
@support.scrape
def submenu(item):
action = 'movies'
action = 'peliculas'
data = item.other
# debug=True
patronMenu = r'<input.*?name="(?P<name>[^"]+)" value="(?P<value>[^"]+)"\s*>[^>]+>(?P<title>[^<]+)<\/label>'
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 locals()
def newest(category):
logger.debug(category)
def newest(categoria):
support.info(categoria)
item = support.Item()
lang = config.get_setting('lang', channel=item.channel)
try:
if category == "anime":
item.url = host + '/updated'
if categoria == "anime":
item.url = host
item.args = "updated"
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
support.logger.error("{0}".format(line))
return []
def search(item, texto):
logger.debug(texto)
def search(item, text):
support.info(text)
if item.search:
item.url = host + '/filter?dub=' + item.args + '&keyword=' + texto + '&sort='
item.url = '{}/filter?{}&keyword={}&sort='.format(host, item.args, text)
else:
item.args = 'noorder'
item.url = host + '/search?keyword=' + texto
lang = ['?', '?dub=1&', '?dub=0&'][config.get_setting('lang', channel=item.channel)]
item.url = '{}/filter{}&keyword={}&sort='.format(host, lang, text)
item.contentType = 'tvshow'
try:
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
support.logger.error("%s" % line)
return []
@support.scrape
def movies(item):
numerationEnabled = True
# debug = True
def peliculas(item):
data = get_data(item)
anime = True
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)
@@ -134,42 +132,42 @@ def movies(item):
action='findvideos'
else:
patron= r'<div class="inner">\s*<a href="(?P<url>[^"]+)" class[^>]+>\s*<img.*?src="(?P<thumb>[^"]+)" alt?="(?P<title>[^\("]+)(?:\((?P<year>\d+)\) )?(?:\((?P<lang>[^\)]+)\))?(?P<title2>[^"]+)?[^>]+>[^>]+>(?:\s*<div class="(?P<l>[^"]+)">[^>]+>)?\s*(?:<div class="[^"]+">(?P<type>[^<]+)</div>)?'
action='episodes'
action='episodios'
# Controlla la lingua se assente
patronNext=r'<a href="([^"]+)" class="[^"]+" id="go-next'
patronTotalPages=r'<span class="total">(\d+)</span>'
typeContentDict={'movie':['movie', 'special']}
typeActionDict={'findvideos':['movie', 'special']}
def itemHook(item):
if not item.contentLanguage:
if 'dub=1' in item.url or item.l == 'dub':
item.contentLanguage = 'ITA'
# item.title += support.typo(item.contentLanguage,'_ [] color kod')
item.title += support.typo(item.contentLanguage,'_ [] color kod')
else:
item.contentLanguage = 'Sub-ITA'
# item.title += support.typo(item.contentLanguage,'_ [] color kod')
item.title += support.typo(item.contentLanguage,'_ [] color kod')
return item
return locals()
@support.scrape
def episodes(item):
def episodios(item):
data = get_data(item)
numerationEnabled = True
# pagination = True
anime = True
pagination = 50
patronBlock= r'<div class="server\s*active\s*"(?P<block>.*?)(?:<div class="server|<link)'
patron = r'<li[^>]*>\s*<a.*?href="(?P<url>[^"]+)"[^>]*>(?P<episode>[^-<]+)(?:-(?P<episode2>[^<]+))?'
# def itemHook(item):
# item.title = item.fulltitle
# return item
def itemHook(item):
item.number = support.re.sub(r'\[[^\]]+\]', '', item.title)
item.title += support.typo(item.fulltitle,'-- bold')
return item
action='findvideos'
return locals()
def findvideos(item):
import time
logger.debug()
support.info(item)
itemlist = []
urls = []
# resp = support.match(get_data(item), headers=headers, patron=r'data-name="(\d+)">([^<]+)<')
@@ -177,9 +175,8 @@ def findvideos(item):
data = resp.data
for ID, name in resp.matches:
# if not item.number: item.number = support.match(item.title, patron=r'(\d+) -').match
match = support.match(data, patronBlock=r'data-name="{}"[^>]+>(.*?)(?:<div class="(?:server|download)|link)'.format(ID), patron=r'data-id="([^"]+)" data-episode-num="{}".*?href="([^"]+)"'.format(item.contentEpisodeNumber if item.contentEpisodeNumber else 1)).match
if not item.number: item.number = support.match(item.title, patron=r'(\d+) -').match
match = support.match(data, patronBlock=r'data-name="' + ID + r'"[^>]+>(.*?)(?:<div class="(?:server|download)|link)', patron=r'data-id="([^"]+)" data-episode-num="' + (item.number if item.number else '1') + '"' + r'.*?href="([^"]+)"').match
if match:
epID, epurl = match
# if 'vvvvid' in name.lower():
@@ -189,8 +186,11 @@ def findvideos(item):
title = support.match(url, patron=r'http[s]?://(?:www.)?([^.]+)', string=True).match
itemlist.append(item.clone(action="play", title=title, url=url, server='directo'))
else:
json = support.match(host + '/api/episode/info?id=' + epID + '&alt=0', headers=headers).response.json
dataJson = support.match(host + '/api/episode/info?id=' + epID + '&alt=0', headers=headers).data
json = jsontools.load(dataJson)
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'))
else: urls.append(json['grabber'])
# support.info(urls)
return support.server(item, urls, itemlist)

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

@@ -1,11 +1,11 @@
{
"id": "aniplay",
"name": "AniPlay",
"active": true,
"active": false,
"language": ["ita", "sub-ita"],
"thumbnail": "aniplay.png",
"banner": "aniplay.png",
"categories": ["anime", "sub"],
"categories": ["anime", "vos"],
"settings": [
{
"id": "sort",
@@ -34,4 +34,4 @@
"lvalues": ["10", "20", "30", "40", "50", "60", "80", "90"]
}
]
}
}

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

@@ -1,5 +1,5 @@
from platformcode import config, logger, autorenumber
from core import httptools, jsontools, scrapertools, support, tmdb
from core import httptools, scrapertools, support, tmdb, jsontools
from inspect import stack
import sys
@@ -9,9 +9,9 @@ else:
from concurrent_py2 import futures
host = config.get_channel_url()
sort = ['views', 'title', 'episodeNumber', 'startDate', 'endDate', 'createdDate'][config.getSetting('sort', 'aniplay')]
order = 'asc' if config.getSetting('order', 'aniplay') else 'desc'
perpage = [10, 20, 30 ,40, 50, 60, 70, 80, 90][config.getSetting('perpage', 'aniplay')]
sort = ['views', 'title', 'episodeNumber', 'startDate', 'endDate', 'createdDate'][config.get_setting('sort', 'aniplay')]
order = 'asc' if config.get_setting('order', 'aniplay') else 'desc'
perpage = [10, 20, 30 ,40, 50, 60, 70, 80, 90][config.get_setting('perpage', 'aniplay')]
@support.menu
@@ -27,35 +27,38 @@ def mainlist(item):
def submenu_az(item):
itemlist = []
for letter in ['0-9'] + list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
itemlist.append(item.clone(title = letter,
itemlist.append(item.clone(title = support.typo(letter, 'bold'),
url= host + '/api/anime/find-by-char',
action= 'movies',
action= 'peliculas',
variable= '&character=' + letter,
thumbnail=support.thumb('az')))
return itemlist
def submenu_year(item):
itemlist = []
from datetime import date
current = date.today().year
first = int(httptools.downloadpage('{}/api/anime/advanced-search?page=0&size=1&sort=startDate,asc&sort=id'.format(host)).json[0]['startDate'].split('-')[0]) -1
for year in range(current, first, -1):
itemlist.append(item.clone(title = year,
itemlist.append(item.clone(title = support.typo(year, 'bold'),
action= 'submenu_season',
variable= year,
thumbnail=support.thumb('year')))
return itemlist
def submenu_top(item):
itemlist = []
links = {'Top del giorno':'daily-top', 'Top della settimana':'weekly-top', 'Top del mese':'monthly-top'}
for label in links:
link = links[label]
itemlist.append(item.clone(title = label,
itemlist.append(item.clone(title = support.typo(label, 'bold'),
action= 'submenu_top_of',
variable= link))
return itemlist
def submenu_season(item):
itemlist = []
seasons = {'winter':'Inverno', 'spring':'Primavera', 'summer':'Estate', 'fall':'Autunno'}
@@ -65,12 +68,13 @@ def submenu_season(item):
s = season['season'].split('.')[-1]
title = seasons[s]
itemlist.append(item.clone(title=title,
url = '{}/api/seasonal-view/{}-{}'.format(host, s, item.variable),
thumbnail = support.thumb(s),
action = 'movies',
variable=''))
url = '{}/api/seasonal-view/{}-{}'.format(host, s, item.variable),
thumbnail = support.thumb(s),
action = 'peliculas',
variable=''))
return itemlist
def submenu_top_of(item):
itemlist = []
url= '{}/api/home/{}'.format(host, item.variable)
@@ -80,72 +84,69 @@ def submenu_top_of(item):
title = fulltitle.split('(')[0].strip()
scrapedlang = scrapertools.find_single_match(fulltitle, r'\(([^\)]+)')
lang = scrapedlang.upper() if scrapedlang else 'Sub-ITA'
# 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=title,
id=anime['animeId'],
url = '{}/api/anime/{}'.format(host, anime['animeId']),
thumbnail = get_thumbnail(anime, 'animeHorizontalImages'),
action = 'episodes',
variable=anime['animeId']))
itemlist.append(item.clone(title=long_title,
url = '{}/anime/{}'.format(host, anime['animeId']),
video_url = '{}/api/anime/{}'.format(host, anime['animeId']),
thumbnail = get_thumbnail(anime, 'animeHorizontalImages'),
action = 'episodios',
variable=anime['animeId']))
return itemlist
def search(item, texto):
logger.debug(texto)
support.info(texto)
item.url = host + '/api/anime/advanced-search'
item.variable = '&query=' + texto
try:
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
support.logger.error("%s" % line)
return []
def newest(category):
logger.debug(category)
def newest(categoria):
support.info(categoria)
item = support.Item()
try:
if category == "anime":
if categoria == "anime":
return latest_added(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
support.logger.error("{0}".format(line))
return []
def latest_added(item):
itemlist = []
page = item.page if item.page else 0
url= '{}/api/home/latest-episodes?page={}'.format(host, page)
js = httptools.downloadpage(url).json
for episode in js:
logger.debug(jsontools.dump(episode))
title = episode['title'] if episode['title'] else episode['animeTitle']
title = episode['title'] if episode['title'] else ''
animeTitle, lang = get_lang(episode['animeTitle'])
quality = 'Full HD' if episode['fullHd'] else 'HD'
long_title = support.typo('{}. {}{}'.format(int(float(episode['episodeNumber'])), title + ' - ' if title else '', animeTitle), 'bold') + support.typo(lang, '_ [] color kod') + support.typo(quality, '_ [] color kod')
image = get_thumbnail(episode, 'episodeImages')
itemlist.append(item.clone(title=title,
itemlist.append(item.clone(title=long_title,
fulltitle=title,
animeId = episode['animeId'],
id=episode['id'],
url='{}/play/{}'.format(host, episode['id']),
contentType = 'episode',
contentTitle = title,
contentSerieName = animeTitle,
contentLanguage = lang,
quality = quality,
contentEpisodeNumber = int(float(episode['episodeNumber'])),
animeUrl = '{}/api/anime/{}'.format(host, episode['animeId']),
video_url = '{}/api/episode/{}'.format(host, episode['id']),
thumbnail = image,
fanart = image,
action = 'findvideos'))
@@ -156,7 +157,7 @@ def latest_added(item):
return itemlist
def movies(item):
def peliculas(item):
logger.debug()
itemlist = []
@@ -164,19 +165,22 @@ def movies(item):
js = httptools.downloadpage('{}?page={}&size={}{}&sort={},{}&sort=id'.format(item.url, page, perpage, item.variable, sort, order)).json
for it in js:
logger.debug(jsontools.dump(js))
title, lang = get_lang(it['title'])
itemlist.append(item.clone(title = title,
long_title = support.typo(title, 'bold') + support.typo(lang, '_ [] color kod')
itemlist.append(item.clone(title = long_title,
fulltitle = title,
show = title,
contentLanguage = lang,
contentType = 'movie' if it['type'] == 'Movie' else 'tvshow',
contentTitle = title,
contentSerieName = title if it['type'] == 'Serie' else '',
action ='findvideos' if it['type'] == 'Movie' else 'episodes',# '' if not active else 'findvideos' if it['type'] == 'Movie' else 'episodes',
action ='findvideos' if it['type'] == 'Movie' else 'episodios',
plot = it['storyline'],
year = it['startDate'].split('-')[0],
url = '{}/api/anime/{}'.format(host, it['id']),
url = '{}/anime/{}'.format(host, it['id']),
video_url = '{}/api/anime/{}'.format(host, it.get('animeId', it.get('id'))),
thumbnail = get_thumbnail(it),
fanart = get_thumbnail(it, 'horizontalImages')))
@@ -188,12 +192,13 @@ def movies(item):
return itemlist
def episodes(item):
def episodios(item):
logger.debug()
itemlist = []
if not item.video_url:
item.video_url = item.url.replace('/anime/', '/api/anime/')
# 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:
item.show_renumber = False
@@ -207,8 +212,7 @@ def episodes(item):
title = it['name']
itemlist.append(item.clone(title = title,
contentTitle = title,
id= '{}/season/{}'.format(it['animeId'], it['id']),
video_url = '{}/api/anime/{}/season/{}'.format(host, it['animeId'], it['id']),
contentType = 'season',
action = 'list_episodes',
plot = json['storyline'],
@@ -245,8 +249,7 @@ def list_episodes(item, json=None):
itemlist = []
if not json:
url = '{}/api/anime/{}'.format(host, item.id)
json = httptools.downloadpage(url, CF=False ).json
json = httptools.downloadpage(item.video_url, CF=False ).json
episodes = json['episodes'] if 'episodes' in json else json
episodes.sort(key=lambda ep: int(ep['episodeNumber'].split('.')[0]))
@@ -259,13 +262,12 @@ def list_episodes(item, json=None):
else:
episode = '{:02d}'.format(int(it['episodeNumber'].split('.')[0]))
# title = support.typo('{}. {}'.format(episode, it['title']), 'bold')
title = support.typo('{}. {}'.format(episode, it['title']), 'bold')
image = get_thumbnail(it, 'episodeImages')
itemlist.append(item.clone(title = it['title'],
contentTitle = it['title'],
id= it['id'],
url= 'api/episode/{}'.format(it['id']),
itemlist.append(item.clone(title = title,
url= '{}/play/{}'.format(host, it['id']),
video_url= '{}/api/episode/{}'.format(host, it['id']),
contentType = 'episode',
contentEpisodeNumber = int(it['episodeNumber'].split('.')[0]),
contentSeason = item.contentSeason if item.contentSeason else '',
@@ -284,20 +286,18 @@ def list_episodes(item, json=None):
def findvideos(item):
logger.debug()
url = '{}/api/{}/{}'.format(host, 'episode' if item.contentType != 'movie' 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', []):
json = httptools.downloadpage('{}/api/episode/{}'.format(host, json['episodes'][0]['id'])).json
item.url = res['videoUrl']
item.server = 'directo'
videourl = json['episodeVideo']
if '.m3u' in item.url:
item.manifest = 'hls'
itemlist = [item.clone(title=config.getLocalizedString(30137),
url=videourl,
server='directo')]
return support.server(item, itemlist=itemlist)
return support.server(item, itemlist=[item])
def get_thumbnail(data, prop = 'verticalImages', key = 'full'):

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

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

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

@@ -5,7 +5,6 @@
from core import support
from platformcode import logger
host = support.config.get_channel_url()
headers = [['Referer', host]]
@@ -15,11 +14,10 @@ headers = [['Referer', host]]
def mainlist(item):
film = ['/category/film',
('Generi', ['', 'genres', 'genres']),
('Sub-ITA', ['/category/sub-ita/', 'movies', 'sub'])
]
tvshow = ['/category/serie-tv',
('Novità', ['/aggiornamenti-serie-tv', 'movies', '']),
('Novità', ['/aggiornamenti-serie-tv', 'peliculas', '']),
]
search = ''
@@ -29,47 +27,47 @@ def mainlist(item):
@support.scrape
def genres(item):
action = 'movies'
action = 'peliculas'
blacklist = ['PRIME VISIONI', 'ULTIME SERIE TV', 'ULTIMI FILM']
patronGenreMenu = r'<li><a href="(?P<url>[^"]+)">(?P<title>[^<>]+)</a></li>'
patronMenu = r'<li><a href="(?P<url>[^"]+)">(?P<title>[^<>]+)</a></li>'
patronBlock = r'<div class="container home-cats">(?P<block>.*?)<div class="clear">'
return locals()
def select(item):
def check(item):
item.data = support.match(item).data
if 'continua con il video' in item.data.lower():
logger.debug('select = ### è un film ###')
if 'episodi e stagioni' in item.data.lower():
support.info('select = ### è una serie ###')
item.contentType = 'tvshow'
return episodios(item)
else:
support.info('select = ### è un film ###')
item.contentType = 'movie'
return findvideos(item)
else:
logger.debug('select = ### è una serie ###')
item.contentType = 'tvshow'
return episodes(item)
def search(item, text):
logger.debug(text)
support.info(text)
text = text.replace(' ', '+')
item.url = host + '/?s=' + text
item.url = host + '/?a=b&s=' + text
item.args = 'search'
try:
return movies(item)
return peliculas(item)
except:
import sys
for line in sys.exc_info():
logger.error(line)
support.info('search log:', line)
return []
def newest(category):
def newest(categoria):
itemlist = []
item = support.Item()
item.args = 'newest'
try:
if category == 'tvshow':
if categoria == 'series':
item.contentType = 'tvshow'
item.url = host+'/aggiornamenti-serie-tv'
@@ -77,66 +75,63 @@ def newest(category):
item.contentType = 'movie'
item.url = host+'/category/film'
item.action = 'movies'
itemlist = movies(item)
item.action = 'peliculas'
itemlist = peliculas(item)
if itemlist[-1].action == 'movies':
if itemlist[-1].action == 'peliculas':
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error(line)
support.info("%s" % line)
return []
return itemlist
@support.scrape
def movies(item):
# debug = True
def peliculas(item):
if item.contentType == 'movie':
action = 'findvideos'
elif item.contentType == 'tvshow':
action = 'episodes'
pagination = True
action = 'episodios'
pagination = ''
else:
action = 'select'
action = 'check'
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>[^<]+)))?'
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}\))?<'
patronNext = r'<a href="([^"]+)"\s*>Pagina'
patronTotalPages = r'>(\d+)(?:[^>]+>){4}Pagina'
def itemHook(item):
if item.quality1:
item.quality = item.quality1
# item.title += support.typo(item.quality, '_ [] color kod')
item.title += support.typo(item.quality, '_ [] color kod')
if item.lang2:
item.contentLanguage = item.lang2
# item.title += support.typo(item.lang2, '_ [] color kod')
# if item.args == 'novita':
# item.title = item.title
# if 'wp-content' in item.thumbnail and not item.infoLabels['year']:
# item.infoLabels['year'] = item.thumbnail.split('/')[5]
item.title += support.typo(item.lang2, '_ [] color kod')
if item.args == 'novita':
item.title = item.title
return item
return locals()
@support.scrape
def episodes(item):
def episodios(item):
if item.data:
data = item.data
action = 'findvideos'
item.contentType = 'tvshow'
blacklist = ['']
patron = r'(?P<episode>\d+(?:&#215;|×)?\d+\-\d+|\d+(?:&#215;|×)\d+)[;]?(?:(?P<title>[^<]+)<(?P<data>.*?)|(\2[ ])(?:<(\3.*?)))(?:<br />|</p>)'
patronBlock = r'<strong>(?P<block>(?:.+?Stagione*.+?(?P<lang>[Ii][Tt][Aa]|[Ss][Uu][Bb][\-]?[iI][tT][aA]))?(?:.+?|</strong>)(/?:</span>)?</p>.*?</p>)'
patron = r'"season-no">(?P<season>\d+)x(?P<episode>\d+)(?:[^>]+>){5}\s*(?P<title>[^<]+)(?P<data>.*?)</table>'
patronBlock = r'<span>(?:.+?Stagione*.+?(?P<lang>[Ii][Tt][Aa]|[Ss][Uu][Bb][\-]?[iI][tT][aA]))?.*?</span>.*?class="content(?P<block>.*?)(?:"accordion-item|<script>)'
return locals()
@@ -144,12 +139,7 @@ def findvideos(item):
if item.contentType != 'movie':
links = support.match(item.data, patron=r'href="([^"]+)"').matches
else:
matchData = item.data if item.data else item
links = support.match(matchData, patron=r'(?:SRC|href)="([^"]+)"', patronBlock=r'<div class="col-md-10">(.+?)<div class="ads">').matches
data = ''
from lib.unshortenit import unshorten_only
for link in links:
logger.debug('URL=',link)
url, c = unshorten_only(link.replace('#', 'speedvideo.net'))
data += url + '\n'
return support.server(item, data)
matchData = item.data if item.data else support.match(item.url, headers=headers).data
links = support.match(matchData, patron=r'data-id="([^"]+)"').matches
return support.server(item, links)

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

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

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

@@ -5,7 +5,6 @@
# ------------------------------------------------------------
from core import support
from platformcode import logger
host = support.config.get_channel_url() + '/cb01-anime-cartoon'
@@ -19,7 +18,7 @@ def mainlist(item):
anime = [('Genere',['','menu', '2']),
('Per Lettera',['','menu', '1']),
('Per Anno',['','menu', '3']),
('Ultimi Anime Aggiornati',['','movies', 'newest'])]
('Ultimi Anime Aggiornati',['','peliculas', 'newest'])]
return locals()
@@ -28,9 +27,7 @@ def menu(item):
blacklist = ['Anime per Genere', 'Anime per Anno', 'Anime per Lettera']
patronBlock = r'<select name="select%s"(?P<block>.*?)</select>' % item.args
patronMenu = r'<option value="(?P<url>[^"]+)">(?P<title>[^<]+)</option>'
if '2' in item.args:
patronGenreMenu = patronMenu
action = 'movies'
action = 'peliculas'
def itemHook(item):
item.url = item.url.replace('cb01-anime/','cb01-anime-cartoon/')
return item
@@ -38,37 +35,37 @@ def menu(item):
def search(item, texto):
logger.debug(texto)
support.info(texto)
item.url = host + "/search/" + texto
try:
return movies(item)
return peliculas(item)
except:
import sys
for line in sys.exc_info():
logger.error(line)
support.info('search log:', line)
return []
def newest(category):
logger.debug(category)
def newest(categoria):
support.info(categoria)
itemlist = []
item = support.Item()
try:
if category == "anime":
if categoria == "anime":
item.url = host
item.args = 'newest'
itemlist = movies(item)
itemlist = peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
support.logger.error("{0}".format(line))
return []
return itemlist
@support.scrape
def movies(item):
def peliculas(item):
# debug=True
blacklist = Blacklist
item.contentType = 'tvshow'
@@ -81,19 +78,20 @@ def movies(item):
return locals()
def check(item):
# support.dbg()
item.url = support.match(item, patron=r'(?:<p>|/>)(.*?)(?:<br|</td>|</p>)', patronBlock=r'Streaming:(.*?)</tr>').matches
if 'Episodio' in str(item.url):
item.contentType = 'tvshow'
item.action ='episodes'
return episodes(item)
item.action ='episodios'
return episodios(item)
else:
item.contentType = 'movie'
item.action = 'findvideos'
return findvideos(item)
@support.scrape
def episodes(item):
logger.debug('EPISODIOS ', item.data)
def episodios(item):
support.info('EPISODIOS ', item.data)
data = ''
matches = item.data
season = 1

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

@@ -5,6 +5,6 @@
"active": true,
"thumbnail": "cb01.png",
"banner": "cb01.png",
"categories": ["tvshow", "movie", "sub", "documentary"],
"categories": ["tvshow", "movie", "vos", "documentary"],
"settings": []
}

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

@@ -2,21 +2,20 @@
# ------------------------------------------------------------
# Canale per cineblog01
# ------------------------------------------------------------
import re
from core import scrapertools, httptools, servertools, support
from platformcode import logger, config
# def findhost(url):
# host = httptools.downloadpage(url, follow_redirect=True).url
# if host == 'https://cb01.uno/':
# host = support.match(host, patron=r'<a href="([^"]+)').match
# return host
def findhost(url):
host = httptools.downloadpage(url, follow_redirect=True).url
if host == 'https://cb01.uno/':
host = support.match(host, patron=r'<a href="([^"]+)').match
return host
host = config.get_channel_url()
host = config.get_channel_url(findhost)
headers = [['Referer', host]]
@@ -24,20 +23,22 @@ headers = [['Referer', host]]
def mainlist(item):
film = [
('HD', ['', 'menu', 'Film HD Streaming']),
('Generi', ['', 'menu', 'Film per Genere']),
('Genere', ['', 'menu', 'Film per Genere']),
('Anni', ['', 'menu', 'Film per Anno']),
('Paese', ['', 'menu', 'Film per Paese']),
('Ultimi Aggiornati', ['/ultimi-100-film-aggiornati/', 'movies', 'newest']),
('Ultimi Aggiunti', ['/lista-film-ultimi-100-film-aggiunti/', 'movies', 'newest'])
('Popolari per Genere', ['', 'menu', 'Film Popolari']),
('Ultimi Aggiunti', ['/ultimi-100-film-aggiunti/', 'peliculas', 'newest']),
('Popolari', ['/category/film-popolari/']),
('Italiani', ['/category/nazione/italia/'])
# ('Film in Lista', ['/lista-film/', 'peliculas', 'newest'])
]
tvshow = ['/serietv/',
('Per Lettera', ['/serietv/', 'menu', 'Serie-Tv per Lettera']),
('Per Genere', ['/serietv/', 'menu', 'Serie-Tv per Genere']),
('Per anno', ['/serietv/', 'menu', 'Serie-Tv per Anno']),
('Ultime Aggiornate', ['/serietv/ultime-100-serie-tv-aggiornate/', 'movies', 'newest'])
('Per Lettera', ['/serietv/', 'menu', 'Serie-TV x Lettera']),
('Per Genere', ['/serietv/', 'menu', 'Serie-TV x Genere']),
('Per anno', ['/serietv/', 'menu', 'Serie-TV x Anno']),
('Ultime Aggiunte', ['/serietv/ultime-100-serie-tv-aggiunte/', 'peliculas', 'newest'])
]
docu = [('Documentari {bullet bold}', ['/category/documentario/', 'movies']),
('HD {submenu} {documentari}', ['/category/hd-alta-definizione/documentario-hd/', 'movies'])
docu = [('Documentari {bullet bold}', ['/category/documentario/', 'peliculas']),
('HD {submenu} {documentari}', ['/category/hd-alta-definizione/documentario-hd/', 'peliculas'])
]
return locals()
@@ -45,28 +46,27 @@ def mainlist(item):
@support.scrape
def menu(item):
# debug = True
patronBlock = item.args + r'<span.*?><\/span>.*?<ul.*?>(?P<block>.*?)<\/ul>'
patronMenu = r'href="?(?P<url>[^">]+)"?>(?P<title>.*?)<\/a>'
if 'genere' in item.args.lower():
patronGenreMenu = patronMenu
action = 'movies'
patronMenu = r'href="?(?P<url>[^">]+)"?[^>]+>(?P<title>[^<»]+)'
action = 'peliculas'
return locals()
def newest(category):
logger.debug(category)
def newest(categoria):
support.info(categoria)
item = support.Item()
try:
if category == 'tvshow':
if categoria == "series":
item.contentType = 'tvshow'
item.url = host + '/serietv/' # aggiornamento-quotidiano-serie-tv/'
else:
item.contentType = 'movie'
item.url = host + '/lista-film-ultimi-100-film-aggiunti/'
item.url = host + '/ultimi-100-film-aggiunti/'
item.args = "newest"
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
@@ -76,13 +76,12 @@ def newest(category):
def search(item, text):
logger.info("search", item, text)
logger.info("search", text)
if item.contentType == 'tvshow': item.url = host + '/serietv'
else: item.url = host
try:
item.url = item.url + "/search/" + text.replace(' ', '+')
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
@@ -93,8 +92,8 @@ def search(item, text):
@support.scrape
def movies(item):
# debug = True
def peliculas(item):
#debug = True
# esclusione degli articoli 'di servizio'
# curYear = datetime.date.today().year
# blacklist = ['BENVENUTI', 'Richieste Serie TV', 'CB01.UNO &#x25b6; TROVA L&#8217;INDIRIZZO UFFICIALE ',
@@ -104,26 +103,25 @@ def movies(item):
# 'Auguri di Buon Natale e Felice Anno Nuovo! &#8211; ' + str(curYear) + '!']
if 'newest' in item.args:
pagination = True
pagination = ''
patronBlock = r'sequex-page-left(?P<block>.*?)sequex-page-right'
if '/serietv/' not in item.url:
patron = r'src="?(?P<thumb>[^ "]+)"? alt="?(?P<title>.*?)(?:\[(?P<quality>[a-zA-Z/]+)\]\s*)?(?:\[(?P<lang>Sub-ITA|ITA)\]\s*)?(?:\[(?P<quality2>[a-zA-Z/]+)\]\s*)?\((?P<year>\d{4})[^\)]*\)[^>]*>.*?<a href=(?:")?(?P<url>[^" ]+)(?:")?.*?rpwe-summary[^>]*>(?P<genre>\w+) [^ ]+ DURATA (?P<duration>[0-9]+)[^ ]+ [^ ]+ [A-Z ]+ (?P<plot>[^<]+)<'
patron = r'src="?(?P<thumb>[^ "]+)"? alt="?(?P<title>.*?)(?:\[(?P<quality>[a-zA-Z]+(?:[/]?3D)?)\]\s*)?(?:\[(?P<lang>Sub-ITA|ITA)\]\s*)?(?:\[(?P<quality2>[a-zA-Z]+(?:[/]?3D)?)\]\s*)?\((?P<year>\d{4})[^\)]*\)[^>]*>.*?<a href=(?:")?(?P<url>[^" ]+)(?:")?.*?rpwe-summary[^>]*>(?P<genre>\w+) [^ ]+ DURATA (?P<duration>[0-9]+)[^ ]+ [^ ]+ [A-Z ]+ (?P<plot>[^<]+)<'
action = 'findvideos'
else:
patron = r'src=(?:")?(?P<thumb>[^ "]+)(?:")? alt=(?:")?(?P<title>.*?)(?: &#8211; \d+&#215;\d+)?(?:>|"| &#8211; )(?:(?P<lang>Sub-ITA|ITA))?[^>]*>.*?<a href=(?:")?(?P<url>[^" ]+)(?:")?.*?rpwe-summary[^>]*>(?P<genre>[^\(]*)\((?P<year>\d{4})[^\)]*\) (?P<plot>[^<]+)<'
action = 'episodes'
action = 'episodios'
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/]+)\]\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'
else:
patron = r'(?<!sticky )hentry.*?card-image[^>]*>\s*<a href=(?:")?(?P<url>[^" >]+)(?:")?\s*>\s*<img src=(?:")?(?P<thumb>[^" ]+)(?:")? alt="(?P<title>.*?)(?: &#8211; \d+&#215;\d+)?(?:"| &#8211; )(?:(?P<lang>Sub-ITA|ITA))?[^>]*>[^>]+>[^>]+>[^>]*>[^>]+>[^>]+>[^>]*>[^>]+>[^>]+>[^>]*>[^>]+>[^>]+>[^>]*>(?P<genre>[^\(]+)\((?P<year>\d{4})[^>]*>[^>]+>[^>]+>[^>]+>(?:<p>)?(?P<plot>[^<]+)'
action = 'episodes'
action = 'episodios'
item.contentType = 'tvshow'
patronNext = '<a class="?page-link"? href="?([^>"]+)"?><i class="fa fa-angle-right">'
patronTotalPages = '(\d+[\.]?\d+)</option>\s*</sele'
def itemHook(item):
if item.quality2:
@@ -134,117 +132,109 @@ def movies(item):
return locals()
def episodes(item):
@support.scrape
def episodios(item):
@support.scrape
def listed(item, data):
actLike = 'episodes'
disableAll = True
def folder(item, url):
"""
Quando c'è un link ad una cartella contenente più stagioni
"""
if url:
data = support.match(url).data
actLike = 'episodios'
addVideolibrary = False
downloadEnabled = False
patronBlock = r'(?P<block>sp-head[^>]+>\s*(?:STAGION[EI]\s*(?:(?:DA)?\s*[0-9]+\s*A)?\s*[0-9]+|MINISSERIE)(?::\s*PARTE\s*[0-9]+)? - (?P<lang>[^-<]+)(?:- (?P<quality>[^-<]+))?.*?<\/div>.*?)spdiv[^>]*>'
patron = r'(?:/>|<p>|<strong>)(?P<data>.*?(?P<episode>[0-9]+(?:&#215;|×)[0-9]+)\s*(?P<title2>.*?)?(?:\s*&#8211;|\s*-|\s*<).*?)(?:<\/p>|<br)'
patron = r'<tr><td>(?P<title>[^<]+)<td><span [^>].+?><a [^>]+href="(?P<url>[^"]+)[^>]+>'
sceneTitle = True
# debug = True
def itemHook(item):
item.serieFolder = True
return item
return locals()
@support.scrape
def folder(item, data):
# Quando c'è un link ad una cartella contenente più stagioni
actLike = 'episodes'
disableAll = True
sceneTitle = True
folderUrl = scrapertools.find_single_match(data, r'TUTT[EA] L[EA] \w+\s+(?:&#8211;|-)\s+<a href="?([^" ]+)')
data = httptools.downloadpage(folderUrl, disable_directIP=True).data
patron = r'<td>(?P<title>[^<]+)<td><a [^>]+href="(?P<folderdata>[^"]+)[^>]+>'
return locals()
# debugBlock=True
data = support.match(item.url, headers=headers).data
folderItemlist = folder(item, scrapertools.find_single_match(data, r'TUTT[EA] L[EA] \w+\s+(?:&#8211;|-)\s+<a href="?([^" ]+)'))
itemlist = listed(item, data)
itemlist.extend(folder(item, data) if 'TUTTE LE' in data or 'TUTTA LA' in data else [])
patronBlock = r'(?P<block>sp-head[^>]+>\s*(?:STAGION[EI]\s*(?:(?:DA)?\s*[0-9]+\s*A)?\s*[0-9]+|MINISSERIE)(?::\s*PARTE\s*[0-9]+)? - (?P<lang>[^-<]+)(?:- (?P<quality>[^-<]+))?.*?<\/div>.*?)spdiv[^>]*>'
patron = r'(?:/>|<p>|<strong>)(?P<other>.*?(?P<episode>[0-9]+(?:&#215;|×)[0-9]+)\s*(?P<title2>.*?)?(?:\s*&#8211;|\s*-|\s*<).*?)(?:<\/p>|<br)'
def itemlistHook(itemlist):
title_dict = {}
itlist = []
for i in itemlist:
i.url = item.url
i.title = re.sub(r'\.(\D)',' \\1', i.title)
match = support.match(i.title, patron=r'(\d+.\d+)').match.replace('x','')
i.order = match
if match not in title_dict:
title_dict[match] = i
elif match in title_dict and i.contentLanguage == title_dict[match].contentLanguage \
or i.contentLanguage == 'ITA' and not title_dict[match].contentLanguage \
or title_dict[match].contentLanguage == 'ITA' and not i.contentLanguage:
title_dict[match].url = i.url
else:
title_dict[match + '1'] = i
itemDict = {'ITA':{}, 'Sub-ITA':{}}
seasons = []
for key, value in title_dict.items():
itlist.append(value)
for it in itemlist:
it.contentType = 'episode'
if it.contentSeason and it.contentSeason not in seasons:
seasons.append(it.contentSeason)
itemDict['ITA'][it.contentSeason] = []
itemDict['Sub-ITA'][it.contentSeason] = []
if it.contentSeason:
if not it.contentLanguage: it.contentLanguage = 'ITA'
itemDict[it.contentLanguage][it.contentSeason].append(it)
itlist = sorted(itlist, key=lambda it: (it.contentLanguage, int(it.order)))
itlist.extend(folderItemlist)
itlist = []
for season in sorted(seasons):
itlist.extend(sorted(itemDict['ITA'].get(season, []), key=lambda it: (it.contentSeason, it.contentEpisodeNumber)))
itlist.extend(sorted(itemDict['Sub-ITA'].get(season, []), key=lambda it: (it.contentSeason, it.contentEpisodeNumber)))
itemlist = itlist
if not support.stackCheck(['add_tvshow', 'get_episodes', 'update', 'find_episodes']):
if len(seasons) > 1:
itemlist = support.season_pagination(itemlist, item, [], 'episodes')
else:
itemlist = support.pagination(itemlist, item, 'episodes')
if config.getSetting('episode_info'):
support.tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
support.videolibrary(itemlist, item)
support.download(itemlist, item)
return itemlist
return itlist
return locals()
def findvideos(item):
if item.serieFolder:
return support.server(item, data=item.url)
if item.contentType == "episode":
return findvid_serie(item)
def load_links(itemlist, re_txt, desc_txt, quality=""):
streaming = scrapertools.find_single_match(data, re_txt).replace('"', '')
logger.debug('STREAMING=', streaming)
matches = support.match(streaming, patron = r'<td><a.*?href=([^ ]+) [^>]+>([^<]+)<').matches
for scrapedurl, scrapedtitle in matches:
logger.debug("##### findvideos %s ## %s ## %s ##" % (desc_txt, scrapedurl, scrapedtitle))
itemlist.append(item.clone(action="play", title=scrapedtitle, url=scrapedurl, server=scrapedtitle, quality=quality))
logger.debug()
if item.folderdata:
return support.server(item, data=item.folderdata)
elif item.data:
return support.server(item, data=re.sub(r'((?:<p>|<strong>)?[^\d]*\d*(?:&#215;|×)[0-9]+[^<]+)', '', item.data))
else:
def load_links(itemlist, re_txt, desc_txt, quality=""):
streaming = scrapertools.find_single_match(data, re_txt).replace('"', '')
logger.debug('STREAMING', streaming)
logger.debug('STREAMING=', streaming)
matches = support.match(streaming, patron = r'<td><a.*?href=([^ ]+) [^>]+>([^<]+)<').matches
for scrapedurl, scrapedtitle in matches:
logger.debug("##### findvideos %s ## %s ## %s ##" % (desc_txt, scrapedurl, scrapedtitle))
itemlist.append(item.clone(action="play", title=scrapedtitle, url=scrapedurl, server=scrapedtitle, quality=quality))
itemlist = []
logger.debug()
# Carica la pagina
data = httptools.downloadpage(item.url).data
data = re.sub('\n|\t', '', data)
itemlist = []
# Estrae i contenuti - Streaming
load_links(itemlist, '<strong>Streamin?g:</strong>(.*?)cbtable', "Streaming", "SD")
# Carica la pagina
data = httptools.downloadpage(item.url).data
data = re.sub('\n|\t', '', data)
# Estrae i contenuti - Streaming HD
load_links(itemlist, '<strong>Streamin?g HD[^<]+</strong>(.*?)cbtable', "Streaming HD", "HD")
# Estrae i contenuti - Streaming
load_links(itemlist, '<strong>Streamin?g:</strong>(.*?)cbtable', "Streaming", "SD")
# Estrae i contenuti - Streaming 3D
load_links(itemlist, '<strong>Streamin?g 3D[^<]+</strong>(.*?)cbtable', "Streaming 3D")
# Estrae i contenuti - Streaming HD
load_links(itemlist, '<strong>Streamin?g HD[^<]+</strong>(.*?)cbtable', "Streaming HD", "HD")
# Extract the quality format
patronvideos = r'([\w.]+)</strong></div></td>'
return support.server(item, itemlist=itemlist, patronTag=patronvideos)
# Estrae i contenuti - Streaming 3D
load_links(itemlist, '<strong>Streamin?g 3D[^<]+</strong>(.*?)cbtable', "Streaming 3D")
# Estrae i contenuti - Download
# load_links(itemlist, '<strong>Download:</strong>(.*?)<tableclass=cbtable height=30>', "aqua", "Download")
itemlist = support.server(item, itemlist=itemlist)
# Extract the quality format
patronvideos = r'([\w.]+)</strong></div></td>'
support.addQualityTag(item, itemlist, data, patronvideos)
# Estrae i contenuti - Download HD
# load_links(itemlist, '<strong>Download HD[^<]+</strong>(.*?)<tableclass=cbtable width=100% height=20>', "azure", "Download HD")
return itemlist
# Estrae i contenuti - Download
# load_links(itemlist, '<strong>Download:</strong>(.*?)<tableclass=cbtable height=30>', "aqua", "Download")
def findvid_serie(item):
logger.debug()
data = re.sub(r'((?:<p>|<strong>)?[^\d]*\d*(?:&#215;|×)[0-9]+[^<]+)', '', item.other)
# Estrae i contenuti - Download HD
# load_links(itemlist, '<strong>Download HD[^<]+</strong>(.*?)<tableclass=cbtable width=100% height=20>', "azure", "Download HD")
return support.server(item, data=data)
def play(item):

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

@@ -2,10 +2,10 @@
"id": "cinemalibero",
"name": "Cinemalibero",
"language": ["ita"],
"active": true,
"active": false,
"thumbnail": "cinemalibero.png",
"banner": "cinemalibero.png",
"categories": ["movie","tvshow","anime"],
"not_active": ["include_in_newest_anime", "include_in_newest_movie"],
"not_active": ["include_in_newest_anime", "include_in_newest_peliculas"],
"settings": []
}

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

@@ -7,8 +7,15 @@ import re
from core import httptools, support, scrapertools
from core.item import Item
from core.support import typo
from platformcode import config, logger
import sys
from platformcode.logger import debug
if sys.version_info[0] >= 3:
from concurrent import futures
else:
from concurrent_py2 import futures
# rimanda a .today che contiene tutti link a .plus
# def findhost(url):
@@ -29,15 +36,15 @@ headers = [['Referer', host]]
def mainlist(item):
film = ['/category/film/',
('Novità', ['', 'movies', 'update']),
('Novità', ['', 'peliculas', 'update']),
('Generi', ['', 'genres'])]
tvshow = ['/category/serie-tv/']
anime = ['/category/anime-giapponesi/']
## Sport = [(support.typo('Sport', 'bullet bold'), ['/category/sport/', 'movies', 'sport', 'tvshow'])]
news = [('Ultimi episodi Serie/Anime', ['/aggiornamenti-serie-tv/', 'movies', 'update', 'tvshow'])]
## Sport = [(support.typo('Sport', 'bullet bold'), ['/category/sport/', 'peliculas', 'sport', 'tvshow'])]
news = [('Ultimi episodi Serie/Anime', ['/aggiornamenti-serie-tv/', 'peliculas', 'update', 'tvshow'])]
search = ''
@@ -45,22 +52,24 @@ def mainlist(item):
@support.scrape
def movies(item):
def peliculas(item):
# debug = True
action = 'check'
patronBlock = r'<div class="container">.*?class="col-md-12[^"]*?">(?P<block>.*?)<div class=(?:"container"|"bg-dark ")>'
if item.args == 'newest':
patron = r'<div class="col-lg-3">[^>]+>[^>]+>\s<a href="(?P<url>[^"]+)".+?url\((?P<thumb>[^\)]+)\)">[^>]+>(?P<title>[^<]+)<[^>]+>[^>]+>(?:[^>]+>)?\s?(?P<rating>[\d\.]+)?[^>]+>.+?(?:[ ]\((?P<year>\d{4})\))?<[^>]+>[^>]+>(.?[\d\-x]+\s\(?(?P<lang>[sSuUbBiItTaA\-]+)?\)?\s?(?P<quality>[\w]+)?[|]?\s?(?:[fFiInNeE]+)?\s?\(?(?P<lang2>[sSuUbBiItTaA\-]+)?\)?)?'
pagination = True
pagination = 25
elif item.contentType == 'movie':
patron = r'<a href="(?P<url>[^"]+)" title="(?P<title>.+?)(?:[ ]\[(?P<lang>[sSuUbB\-iItTaA]+)\])?(?:[ ]\((?P<year>\d{4})\))?"\s*alt="[^"]+"\s*class="[^"]+"(?: style="background-image: url\((?P<thumb>.+?)\)">)?\s*<div class="voto">[^>]+>[^>]+>.(?P<rating>[\d\.a-zA-Z\/]+)?[^>]+>[^>]+>[^>]+>(?:<div class="genere">(?P<quality>[^<]+)</div>)?'
# action = 'findvideos'
patron = r'<a href="(?P<url>[^"]+)" title="(?P<title>.+?)(?:[ ]\[(?P<lang>[sSuUbB\-iItTaA]+)\])?(?:[ ]\((?P<year>\d{4})?\))?"\s*alt="[^"]+"\s*class="[^"]+"(?: style="background-image: url\((?P<thumb>.+?)\)">)?\s*<div class="voto">[^>]+>[^>]+>.(?P<rating>[\d\.a-zA-Z\/]+)?[^>]+>[^>]+>[^>]+>(?:<div class="genere">(?P<quality>[^<]+)</div>)?'
if item.args == 'update':
patronBlock = r'<section id="slider">(?P<block>.*?)</section>'
patron = r'<a href="(?P<url>(?:https:\/\/.+?\/(?P<title>[^\/]+[a-zA-Z0-9\-]+)(?P<year>\d{4})))/".+?url\((?P<thumb>[^\)]+)\)">'
patron = r'<a href="(?P<url>(?:https:\/\/.+?\/(?P<title>[^\/]+[a-zA-Z0-9\-]+)(?P<year>\d{4})?))/".+?url\((?P<thumb>[^\)]+)\)">'
elif item.contentType == 'tvshow':
# action = 'episodios'
if item.args == 'update':
patron = r'<a href="(?P<url>[^"]+)"[^<]+?url\((?P<thumb>.+?)\)">\s*?<div class="titolo">(?P<title>.+?)(?: &#8211; Serie TV)?(?:\([sSuUbBiItTaA\-]+\))?[ ]?(?P<year>\d{4})?</div>\s*?(?:<div class="genere">)?(?:[\w]+?\.?\s?[\s|S]?[\dx\-S]+?\s\(?(?P<lang>[iItTaA]+|[sSuUbBiItTaA\-]+)\)?\s?(?P<quality>[HD]+)?|.+?\(?(?P<lang2>[sSuUbBiItTaA\-]+)?\)?</div>)'
pagination = True
pagination = 25
else:
patron = r'<a href="(?P<url>[^"]+)"\s*title="(?P<title>[^"\(]+)(?:"|\()(?:(?P<year>\d+)[^"]+)?.*?url\((?P<thumb>[^\)]+)\)(?:.*?<div class="voto">[^>]+>[^>]+>\s*(?P<rating>[^<]+))?.*?<div class="titolo">[^>]+>(?:<div class="genere">[^ ]*(?:\s\d+)?\s*(?:\()?(?P<lang>[^\)< ]+))?'
else:
@@ -77,8 +86,8 @@ def movies(item):
item.title += support.typo(item.lang2, '_ [] color kod')
if item.args == 'update':
item.title = item.title.replace('-', ' ')
if item.args == 'search':
item.contentType = 'undefined'
# if item.args == 'search':
# item.contentType = 'tvshow' if 'serie-' in item.url else 'movie'
return item
@@ -86,50 +95,97 @@ def movies(item):
return locals()
@support.scrape
def episodes(item):
data=item.data
def episodios(item):
data = item.data
# debug=True
if item.args == 'anime':
logger.debug("Anime :", item)
# blacklist = ['Clipwatching', 'Verystream', 'Easybytez', 'Flix555', 'Cloudvideo']
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">)'
# item.contentType = 'tvshow'
elif item.args == 'serie':
item.contentType = 'tvshow'
elif item.args == 'sport':
logger.debug("Sport :", item)
patron = r'(?:/>|<p>)\s*(?P<title>[^-]+)-(?P<data>.+?)(?:<br|</p)'
patronBlock = r'</strong>\s*</p>(?P<block>.*?</p>)'
item.contentType = 'tvshow'
elif item.args == 'serie' or item.contentType == 'tvshow':
logger.debug("Serie :", item)
patron = r'(?:>| )(?P<episode>\d+(?:x|×|&#215;)\d+)[;]?[ ]?(?:(?P<title>[^<-]+)(?P<data>.*?)|(\2[ ])(?:<(\3.*?)))(?:</a><br /|</a></p|$)'
patronBlock = r'>(?:[^<]+[Ss]tagione\s|[Ss]tagione [Uu]nica)(?:(?P<lang>iTA|ITA|Sub-ITA|Sub-iTA))?.*?</strong>(?P<block>.+?)(?:<strong|<div class="at-below)'
# item.contentType = 'tvshow'
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)'
item.contentType = 'tvshow'
else:
patron = r'(?P<title>\s*[0-9]{2}/[0-9]{2}/[0-9]{4})(?P<data>.*?)(?:<br|</p)'
def itemHook(item):
if not scrapertools.find_single_match(item.title, r'(\d+x\d+)'):
item.title = re.sub(r'(\d+) -', '1x\\1', item.title)
return item
def itemHook(it):
if not scrapertools.find_single_match(it.title, r'(\d+x\d+)'):
it.title = re.sub(r'(\d+) -', '1x\\1', it.title)
return it
def itemlistHook(itl):
ret = []
if item.args == 'sport':
return itl
# support.dbg()
for it in itl:
ep = scrapertools.find_single_match(it.title, r'(\d+x\d+)')
if not ep and 'http' in it.data: # stagione intera
# from lib import unshortenit
# data = unshortenit.findlinks(it.data)
episodes = {}
def get_ep(s):
srv_mod = __import__('servers.%s' % s.server, None, None, ["servers.%s" % s.server])
if hasattr(srv_mod, 'get_filename'):
title = srv_mod.get_filename(s.url)
if item.args == 'anime':
ep = title
else:
ep = scrapertools.get_season_and_episode(title)
if ep:
if ep not in episodes:
episodes[ep] = []
episodes[ep].append(s)
servers = support.server(item, it.data, CheckLinks=False, Download=False, Videolibrary=False)
# for s in servers:
# get_ep(s)
# ottengo l'episodio dal nome del file
with futures.ThreadPoolExecutor() as executor:
for s in servers:
executor.submit(get_ep, s)
# logger.debug(it.contentLanguage)
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:
ret.append(it)
return sorted(ret, key=lambda i: i.title)
return locals()
@support.scrape
def genres(item):
action='movies'
action='peliculas'
patron_block=r'<div id="bordobar" class="dropdown-menu(?P<block>.*?)</li>'
patronGenreMenu=r'<a class="dropdown-item" href="(?P<url>[^"]+)" title="(?P<title>[A-z]+)"'
patronMenu=r'<a class="dropdown-item" href="(?P<url>[^"]+)" title="(?P<title>[A-z]+)"'
return locals()
def search(item, texto):
logger.debug(item.url,texto)
item.contentType = 'undefined'
texto = texto.replace(' ', '+')
item.url = host + "/?s=" + texto
# item.contentType = 'tv'
item.args = 'search'
try:
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
@@ -137,18 +193,19 @@ def search(item, texto):
logger.error("%s" % line)
return []
def newest(category):
logger.debug('newest ->', category)
def newest(categoria):
logger.debug('newest ->', categoria)
itemlist = []
item = Item()
item.args = 'newest'
try:
if category == 'tvshow' or category == 'anime':
if categoria == 'series' or categoria == 'anime':
item.args = 'update'
item.url = host+'/aggiornamenti-serie-tv/'
item.contentType = 'tvshow'
item.action = 'movies'
itemlist = movies(item)
item.action = 'peliculas'
itemlist = peliculas(item)
except:
import sys
for line in sys.exc_info():
@@ -159,40 +216,77 @@ def newest(category):
def check(item):
logger.debug()
data = support.match(item.url, headers=headers).data
if data:
ck = support.match(data, patron=r'Supportaci condividendo quest[oa] ([^:]+)').match.lower()
ck = str(support.match(data, patronBlock=r'Genere:(.*?)</span>', patron=r'tag">([^<]+)').matches).lower()
if ck == 'serie tv':
item.contentType = 'tvshow'
item.args = 'serie'
item.data = data
return episodes(item)
elif ck == 'anime':
item.contentType = 'tvshow'
item.args = 'anime'
item.data = data
return episodes(item)
elif ck == 'film':
item.contentType = 'movie'
item.data = data
return findvideos(item)
else:
if 'serie tv' in ck or 'anime' in ck or 'wrestling wwe' in ck :# in ['serie tv', 'wrestling wwe', 'anime']:
if 'anime' in ck:
item.args = 'anime'
elif 'sport' in ck or 'wrestling' in ck:
item.args = 'sport'
else:
item.args = 'serie'
item.contentType = 'tvshow'
item.data = data
itemlist = episodes(item)
itemlist = episodios(item)
if not itemlist:
item.contentType = 'movie'
item.data = data
return findvideos(item)
return itemlist
else:
item.contentType = 'movie'
item.data = data
# item.action = 'findvideos'
return findvideos(item)
return itemlist
def findvideos(item):
def filter_ep(s):
srv_mod = __import__('servers.%s' % s.server, None, None, ["servers.%s" % s.server])
if hasattr(srv_mod, 'get_filename'):
title = srv_mod.get_filename(s.url)
# support.dbg()
if scrapertools.get_season_and_episode(title) == str(item.contentSeason) + "x" + str(
item.contentEpisodeNumber).zfill(2):
servers.append(s)
logger.debug()
item.data = item.data.replace('http://rapidcrypt.net/verys/', '').replace('http://rapidcrypt.net/open/', '') #blocca la ricerca
return support.server(item, data=item.data)
# support.dbg()
if item.servers:
return support.server(item, itemlist=[Item().fromurl(s) for s in item.servers])
if not item.data:
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|[dD][oO][wW][nN][lL][oO][aA][dD])')
if data:
item.data = data
servers = []
# if item.args == 'anime':
# if item.urls: # this is a episode
# return support.server(item, itemlist=[Item(url=support.unshortenit.FileCrypt().unshorten(u)) for u in item.urls])
# itemlist = []
# episodes = {}
# for uri in support.unshortenit.FileCrypt().find(item.data):
# for ep in support.unshortenit.FileCrypt(uri).list_files():
# ep = ('.'.join(ep[0].split('.')[:-1]), ep[1]) # remove extension
# if not ep[0] in episodes:
# episodes[ep[0]] = []
# episodes[ep[0]].append(ep[1])
# for ep in episodes.keys():
# itemlist.append(item.clone(title=ep, urls=episodes[ep], action='findvideos', data=''))
# return itemlist
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]):
# i link contengono più puntate, cerco quindi quella selezionata
with futures.ThreadPoolExecutor() as executor:
for s in total_servers:
if s.server:
executor.submit(filter_ep, s)
else:
servers.append(s)
return servers
else:
return total_servers

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

@@ -6,6 +6,6 @@
"thumbnail": "cinetecadibologna.png",
"banner": "cinetecadibologna.png",
"categories": ["documentary"],
"not_active":["include_in_newest_movie", "include_in_newest_tvshow", "include_in_newest_anime"],
"not_active":["include_in_newest_peliculas", "include_in_newest_series", "include_in_newest_anime", "include_in_global_search"],
"settings": []
}

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

@@ -2,9 +2,9 @@
# ------------------------------------------------------------
# Canale per cinetecadibologna
# ------------------------------------------------------------
from core.item import Item
from core import support
from platformcode import logger
host = support.config.get_channel_url()
@@ -22,7 +22,7 @@ def mainlist(item):
@support.scrape
def menu(item):
action = 'movies'
action = 'peliculas'
if 'epoche' in item.url:
patronMenu =r'<li>\s*<a href="(?P<url>[^"]+)">(?P<title>[^>]+)<'
elif 'percorsi' in item.url:
@@ -34,23 +34,23 @@ def menu(item):
def search(item, text):
logger.debug(text)
support.info(text)
item.args = 'noorder'
item.url = host + '/ricerca/type_ALL/ricerca_' + text
item.contentType = 'movie'
try:
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
support.logger.error("%s" % line)
return []
@support.scrape
def movies(item):
def peliculas(item):
if 'alfabetico' in item.url:
patron = r'<img src="(?P<thumb>[^"]+)"[^>]+>\s*[^>]+>\s*<div[^>]+>\s*<div[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>(?:\[)?(?P<title>[^\]<]+)(?:\]|<)'
else:
@@ -62,13 +62,13 @@ def movies(item):
def findvideos(item):
logger.debug()
support.info()
itemlist = []
matches = support.match(item, patron=r'filename: "(.*?)"').matches
for url in matches:
itemlist.append(item.clone(action="play", title=support.config.getLocalizedString(30137), server='directo', url=host + url))
itemlist.append(item.clone(action="play", title=support.config.get_localized_string(30137), server='directo', url=host + url))
return support.server(item, itemlist=itemlist)

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

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

@@ -2,30 +2,34 @@
# ------------------------------------------------------------
# Canale per Rai Play
# ------------------------------------------------------------
import functools
import requests
from core import support
from platformcode import logger
import requests, uuid
from core import jsontools, support, httptools
from platformcode import logger, config
typo = support.typo
session = requests.Session()
session.request = functools.partial(session.request, timeout=httptools.HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT)
host = support.config.get_channel_url()
deviceId = uuid.uuid4().hex
token = session.get('https://disco-api.discoveryplus.it/token?realm=dplayit').json()['data']['attributes']['token']
api = "https://disco-api.discoveryplus.it"
headers = {'User-Agent': 'Mozilla/50.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0',
'Referer': host,
'Cookie' : 'st=' + token}
def Dict(item):
global pdict
pdict = session.get(api + '/cms/routes/{}?decorators=viewingHistory&include=default'.format(item.args), headers=headers).json()['included']
# 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"]
token = session.get('{}/token?deviceId={}&realm=dplay&shortlived=true'.format(domain, deviceId)).json()['data']['attributes']['token']
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,
'Origin': host,
'Cookie': 'st={}'.format(token),
'content-type': 'application/json',
'x-disco-client': 'WEB:UNKNOWN:dplus_us:2.46.0',
'x-disco-params': 'realm=dplay,siteLookupKey=dplus_it'}
@support.menu
def mainlist(item):
top = [('Dirette {bullet bold}', ['', 'live']),
('Programmi {bullet bold tv}', ['', 'movies', 'programmi']),
('Generi {bullet bold tv}', ['', 'genres'])]
top = [('Dirette {bold}', ['', 'live']),
('Programmi {bullet bold tv}', ['', 'programs', 'programmi'])]
search = ''
@@ -34,158 +38,243 @@ def mainlist(item):
def search(item, text):
itemlist = []
item.args = 'search'
item.text = text
try:
itemlist = movies(item)
itemlist = peliculas(item)
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
logger.error(line)
return itemlist
def live(item):
logger.debug()
itemlist =[]
for key in session.get(api + '/cms/routes/canali?decorators=viewingHistory&include=default', headers=headers).json()['included']:
if key['type'] == 'channel' and key.get('attributes',{}).get('hasLiveStream', '') and 'Free' in key.get('attributes',{}).get('packages', []):
title = key['attributes']['name']
plot = key['attributes']['description']
url = '{}/canali/{}'.format(host, key['attributes']['alternateId'])
_id = key['id']
itemlist.append(item.clone(title=title, fulltitle=title, plot=plot, url=url, id=_id, action='findvideos', forcethumb=True))
return support.thumb(itemlist, mode='live')
itemlist =[]
# 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:
if key['type'] == 'channel' and key.get('attributes',{}).get('hasLiveStream', '') and 'Free' in key.get('attributes',{}).get('packages', []):
itemlist.append(item.clone(title = typo(key['attributes']['name'], 'bold'),
fulltitle = key['attributes']['name'],
plot = key['attributes'].get('description', ''),
url = "{}/canali/{}".format(host, key['attributes']['alternateId']),
id = key['id'],
action = 'findvideos'))
return support.thumb(itemlist, live=True)
def programs(item):
logger.debug()
itemlist = []
data = session.get(domain + '/cms/routes/browse?include=default').json()['included']
images = {key['id'] : key['attributes']['src'] for key in data if key['type'] == 'image'}
channels = {}
for key in data:
if key['type'] == 'link' and 'Free' in key['attributes']['packages']:
logger.debug(jsontools.dump(key))
_title = key['attributes'].get('title', key['attributes'].get('name',''))
_id = key['relationships']['linkedContent']['data']['id']
_thumb = images.get(key['relationships'].get('images', {}).get('data',[{}])[0].get('id'))
channels[_title] ={'id':_id, 'thumb':_thumb}
itemlist = [item.clone(title='Tutti', id=channels['Tutti']['id'], action='peliculas'),
item.clone(title='Generi', id=channels['Tutti']['id'], action='genres'),
item.clone(title='Per canale', channels=channels, action='channels')]
return support.thumb(itemlist)
def genres(item):
item.action = 'movies'
itemlist = [
item.clone(title='Attualità e inchiesta', args='genere/attualita-e-inchiesta'),
item.clone(title='Beauty and style', args='genere/beauty-and-style'),
item.clone(title='Serie TV', args='genere/serie-tv'),
item.clone(title='Casa', args='genere/casa'),
item.clone(title='Comedy', args='genere/comedy'),
item.clone(title='Crime', args='genere/crime'),
item.clone(title='Documentari', args='genere/documentari'),
# item.clone(title='Discovery + Originals', args='genere/discoveryplus-original'),
item.clone(title='Food', args='genere/food'),
item.clone(title='Medical', args='genere/medical'),
item.clone(title='Motori', args='genere/motori'),
item.clone(title='Natura', args='genere/natura'),
item.clone(title='Paranormal', args='genere/paranormal'),
item.clone(title='People', args='genere/people'),
item.clone(title='Real Adventure', args='genere/real-adventure'),
item.clone(title='Real Life', args='genere/real-life'),
item.clone(title='Scienza e Spazio', args='genere/scienza-e-spazio'),
item.clone(title='Sex and love', args='genere/sex-and-love'),
item.clone(title='Sport', args='genere/sport'),
item.clone(title='Talent Show', args='genere/talent-show'),
]
logger.debug()
itemlist = []
data = session.get('{}/cms/collections/{}?include=default'. format(domain, item.id)).json()['included']
collection = {k['id']: k['relationships'].get('show', k['relationships'].get('collection'))['data']['id'] for k in data if k['type'] == 'collectionItem'}
included = {}
for key in data:
if key.get('relationships', {}).get('items') and key['type'] == 'collection' and key['attributes']['title'] not in ['A-Z', 'I più visti']:
included[key['attributes']['title']] = [k['id'] for k in key['relationships']['items']['data']]
for title, values in included.items():
itemlist.append(item.clone(title=title, action='peliculas', filter=[collection[k] for k in values]))
itemlist.sort(key=lambda it: it.title)
return support.thumb(itemlist, genre=True)
def channels(item):
logger.debug()
itemlist = [item.clone(title=k, id=v['id'], thumbnail=v['thumb'], action='peliculas') for k, v in item.channels.items() if k !='Tutti']
itemlist.sort(key=lambda it: it.title)
return itemlist
def movies(item):
def peliculas(item):
logger.debug()
itemlist =[]
if 'search' in item.args:
pdict = session.get('{}/content/shows?include=genres,images,primaryChannel.images,contentPackages&page[size]=12&query={}'.format(api, item.text), headers=headers).json()['data']
if item.text:
data = session.get('{}/cms/routes/search/result?include=default&contentFilter[query]={}'.format(domain, item.text)).json()['included']
else:
pdict = session.get('{}/cms/routes/{}?decorators=viewingHistory&include=default'.format(api, item.args), headers=headers).json()['included']
images = list(filter(lambda x: x['type'] == 'image', pdict))
data = session.get('{}/cms/collections/{}?include=default'.format(domain, item.id)).json()['included']
for key in pdict:
if key['type'] == 'show' and 'Free' in str(key.get('relationships',{}).get('contentPackages',{}).get('data',[])):
title = key['attributes']['name']
plot = key['attributes'].get('description','')
url = '{}/programmi/{}'.format(host, key['attributes']['alternateId'])
seasons = key['attributes']['seasonNumbers']
thumbs = [image['attributes']['src'] for image in images if image['id'] == key['relationships']['images']['data'][0]['id']]
thumb = thumbs[0] if thumbs else item.thumbnail
fanarts = [image['attributes']['src'] for image in images if len(key['relationships']['images']['data']) > 1 and image['id'] == key['relationships']['images']['data'][1]['id']]
fanart = fanarts[0] if fanarts else item.fanart
images = {key['id'] : key['attributes']['src'] for key in data if key['type'] == 'image'}
for key in data:
if key['type'] == 'show' and 'Free' in str(key.get('relationships',{}).get('contentPackages',{}).get('data',[])) and key['attributes']['episodeCount']:
if item.filter and key['id'] not in item.filter:
continue
thumbId = key['relationships'].get('images',{}).get('data', [{},{},{}])[2].get('id', '')
fanartId = key['relationships'].get('images',{}).get('data', [{}])[0].get('id', '')
itemlist.append(
item.clone(title=title,
fulltitle=title,
plot=plot,
url=url,
programid=key['attributes']['alternateId'],
id=key['id'],
seasons=seasons,
action='episodes',
thumbnail=thumb,
fanart=fanart,
contentType='tvshow'))
item.clone(title=typo(key['attributes']['name'],'bold'),
plot=key['attributes'].get('description',''),
programid=key['attributes']['alternateId'],
seasons=key['attributes']['seasonNumbers'],
action='seasons',
thumbnail=images[thumbId] if thumbId else item.thumbnail,
fanart=images[fanartId] if fanartId else item.fanart,
contentType='tvshow'))
itemlist.sort(key=lambda it: it.title)
if not itemlist:
from core.item import Item
itemlist = [Item(title='Nessun Contenuto Free Disponibile', thumbnail=support.thumb('info'))]
return itemlist
def episodes(item):
def seasons(item):
logger.debug()
itemlist =[]
pdict = session.get(api + '/cms/routes/programmi/{}?decorators=viewingHistory&include=default'.format(item.programid), headers=headers).json()['included']
for key in pdict:
if key['type'] == 'collection' and key.get('attributes',{}).get('component',{}).get('id', '') == 'tabbed-content':
mandatory = key['attributes']['component'].get('mandatoryParams','')
if not mandatory: return [support.Item(title='CONTENUTO PLUS')]
itemlist = []
data = session.get('{}/cms/routes/show/{}?include=default'.format(domain, item.programid)).json()['included']
for key in data:
if key['type'] == 'collection' and 'filters' in key['attributes']['component']:
for option in key['attributes']['component']['filters'][0]['options']:
url = '{}/cms/collections/{}?decorators=viewingHistory&include=default&{}&{}'.format(api, key['id'], mandatory, option['parameter'])
seasons = []
season = {}
try:
season = session.get(url, headers=headers).json()
seasons.append(season['included'])
pages = season['data'].get('meta',{}).get('itemsTotalPages', 0)
if pages:
for page in range(2,pages + 1):
url = '{}/cms/collections/{}?decorators=viewingHistory&include=default&{}&{}&page[items.number]={}'.format(api, key['id'], mandatory, option['parameter'], page)
logger.debug(url)
season = session.get(url, headers=headers).json()['included']
seasons.append(season)
except:
pass
itemlist.append(item.clone(title="Stagione {}".format(option['value']),
season=int(option['value']),
seasonparams=option['parameter'],
showparams=key['attributes']['component']['mandatoryParams'],
id=key['id'],
contentType='season',
action='episodios'))
break
for season in seasons:
for episode in season:
if episode['type'] == 'video' and 'Free' in episode['attributes']['packages']:
title = '{}x{:02d} - {}'.format(option['id'], episode['attributes']['episodeNumber'], episode['attributes']['name'])
plot = episode['attributes']['description']
itemlist.append(
item.clone(title=title,
fulltitle=title,
plot=plot,
id=episode['id'],
action='findvideos',
contentType='episode',
season=option['id'],
episode=episode['attributes']['episodeNumber'],
forcethumb=True,
no_return=True))
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'))
if itemlist: itemlist.sort(key=lambda it: (int(it.season), int(it.episode)))
return itemlist
def episodios(item):
logger.debug()
itemlist =[]
data = session.get('{}/cms/collections/{}?include=default&{}&{}'.format(domain, item.id, item.seasonparams, item.showparams)).json()['included']
images = {key['id'] : key['attributes']['src'] for key in data if key['type'] == 'image'}
for key in data:
if key['type'] == 'video' and 'Free' in str(key.get('relationships',{}).get('contentPackages',{}).get('data',[])):
if item.season:
itemlist.append(item.clone(title = "{}x{:02d} - {}".format(item.season, key['attributes']['episodeNumber'], key['attributes']['name']),
plot = key['attributes']['description'],
episode = key['attributes']['episodeNumber'],
contentType = 'episode',
action = 'findvideos',
thumbnail = images[key['relationships']['images']['data'][0]['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)
if not itemlist:
from core.item import Item
itemlist = [Item(title='Nessun Episodio Free Disponibile', thumbnail=support.thumb('info'))]
return itemlist
def findvideos(item):
logger.debug()
return support.server(item, itemlist=[item.clone(server='directo', action='play')])
def play(item):
if item.livefilter:
item.id = liveDict()[item.livefilter]['id']
item.fulltitle = item.livefilter
item.forcethumb = True
item.no_return = True
support.thumb(item, mode='live')
if item.contentType == 'episode': data = session.get('{}/playback/v2/videoPlaybackInfo/{}?usePreAuth=true'.format(api, item.id), headers=headers).json().get('data',{}).get('attributes',{})
else: data = session.get('{}/playback/v2/channelPlaybackInfo/{}?usePreAuth=true'.format(api, item.id), headers=headers).json().get('data',{}).get('attributes',{})
if data.get('protection', {}).get('drm_enabled',True):
item.url = data['streaming']['dash']['url']
content = 'video' if item.contentType == 'episode' else 'channel'
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',{})
if data.get('streaming', [{}])[0].get('protection', {}).get('drmEnabled',False):
item.url = data['streaming'][0]['url']
item.drm = 'com.widevine.alpha'
item.license = data['protection']['schemes']['widevine']['licenseUrl'] + '|PreAuthorization=' + data['protection']['drmToken'] + '|R{SSM}|'
item.license ="{}|PreAuthorization={}|R{{SSM}}|".format(data['streaming'][0]['protection']['schemes']['widevine']['licenseUrl'],
data['streaming'][0]['protection']['drmToken'])
else:
item.url = data['streaming']['hls']['url']
item.url = data['streaming'][0]['url']
item.manifest = 'hls'
return [item]
return support.server(item, itemlist=[item], Download=False, Videolibrary=False)

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

@@ -2,9 +2,9 @@
"id": "dreamsub",
"name": "DreamSub",
"language": ["ita", "sub-ita"],
"active": true,
"active": false,
"thumbnail": "dreamsub.png",
"banner": "dreamsub.png",
"categories": ["anime", "sub"],
"categories": ["anime", "vos"],
"settings": []
}
}

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

@@ -4,21 +4,22 @@
# ------------------------------------------------------------
from core import support
from platformcode import logger
host = support.config.get_channel_url()
headers = [['Referer', host]]
@support.menu
def mainlist(item):
support.info(item)
anime = ['/search?typeY=tv',
('Movie', ['/search?typeY=movie', 'movies', '', 'movie']),
('OAV', ['/search?typeY=oav', 'movies', '', 'tvshow']),
('Spinoff', ['/search?typeY=spinoff', 'movies', '', 'tvshow']),
('Movie', ['/search?typeY=movie', 'peliculas', '', 'movie']),
('OAV', ['/search?typeY=oav', 'peliculas', '', 'tvshow']),
('Spinoff', ['/search?typeY=spinoff', 'peliculas', '', 'tvshow']),
('Generi', ['','menu','Generi']),
('Stato', ['','menu','Stato']),
('Ultimi Episodi', ['', 'movies', ['last', 'episodiRecenti']]),
('Ultimi Aggiornamenti', ['', 'movies', ['last', 'episodiNuovi']])
('Ultimi Episodi', ['', 'peliculas', ['last', 'episodiRecenti']]),
('Ultimi Aggiornamenti', ['', 'peliculas', ['last', 'episodiNuovi']])
]
return locals()
@@ -27,15 +28,14 @@ def mainlist(item):
@support.scrape
def menu(item):
item.contentType = ''
action = 'movies'
action = 'peliculas'
patronBlock = r'<div class="filter-header"><b>%s</b>(?P<block>.*?)<div class="filter-box">' % item.args
patronMenu = r'<a class="[^"]+" data-state="[^"]+" (?P<other>[^>]+)>[^>]+></i>[^>]+></i>[^>]+></i>(?P<title>[^>]+)</a>'
if 'generi' in item.args.lower():
patronGenreMenu = patronMenu
def itemHook(item):
support.info(item.type)
for Type, ID in support.match(item.other, patron=r'data-type="([^"]+)" data-id="([^"]+)"').matches:
item.url = host + '/search?' + Type + 'Y=' + ID
return item
@@ -43,52 +43,52 @@ def menu(item):
def search(item, text):
logger.debug(text)
support.info(text)
text = text.replace(' ', '+')
item.url = host + '/search/' + text
item.args = 'search'
try:
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error('search log:', line)
support.info('search log:', line)
return []
def newest(category):
logger.debug(category)
def newest(categoria):
support.info(categoria)
item = support.Item()
try:
if category == "anime":
if categoria == "anime":
item.url = host
item.args = ['last', 'episodiNuovi']
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
support.logger.error("{0}".format(line))
return []
@support.scrape
def movies(item):
def peliculas(item):
# debug = True
numerationEnabled = True
anime = True
if 'movie' in item.url:
item.contentType = 'movie'
action = 'findvideos'
else:
item.contentType = 'tvshow'
action = 'episodes'
action = 'episodios'
if len(item.args) > 1 and item.args[0] == 'last':
patronBlock = r'<div id="%s"[^>]+>(?P<block>.*?)<div class="vistaDettagliata"' % item.args[1]
patron = r'<li>\s*<a href="(?P<url>[^"]+)" title="(?P<title>[^"]+)" class="thumb">[^>]+>[^>]+>[^>]+>\s*[EePp]+\s*(?P<episode>\d+)[^>]+>\s<img src="(?P<thumb>[^"]+)"'
patron = r'<li>\s*<a href="(?P<url>[^"]+)" title="(?P<title>[^"]+)" class="thumb">[^>]+>[^>]+>[^>]+>\s*[EePp]+\s*(?P<episode>\d+)[^>]+>\s+<img src="(?P<thumb>[^"]+)"'
else:
patron = r'<div class="showStreaming">\s*<b>(?P<title>[^<]+)[^>]+>[^>]+>\s*<span>Lingua:\s*(?:DUB|JAP)?\s*(?P<lang>(?:SUB )?ITA)[^>]+>[<>br\s]+a href="(?P<url>[^"]+)"[^>]+>.*?--image-url:url\(/*(?P<thumb>[^\)]+).*?Anno di inizio</b>:\s*(?P<year>[0-9]{4})'
patronNext = '<li class="currentPage">[^>]+><li[^<]+<a href="([^"]+)">'
@@ -102,33 +102,35 @@ def movies(item):
@support.scrape
def episodes(item):
numerationEnabled = True
pagination = True
def episodios(item):
anime = True
# debug = True
pagination = 100
if item.data:
data = item.data
patron = r'<div class="sli-name">\s*<a href="(?P<url>[^"]+)"[^>]+>(?P<title>[^<]+)<'
patron = r'<div class="sli-name">\s*<a\s+href="(?P<url>[^"]+)"[^>]+>(?P<title>[^<]+)<'
return locals()
def findvideos(item):
itemlist = []
logger.debug()
support.info()
# support.dbg()
matches = support.match(item, patron=r'href="([^"]+)"', patronBlock=r'<div style="white-space: (.*?)<div id="main-content"')
if not matches.matches and item.contentType != 'episode':
item.data = matches.data
item.contentType = 'tvshow'
return episodes(item)
return episodios(item)
if 'vvvvid' in matches.data:
itemlist.append(item.clone(action="play", title='VVVVID', url=support.match(matches.data, patron=r'(http://www.vvvvid[^"]+)').match, server='vvvvid'))
else:
logger.debug('VIDEO')
support.info('VIDEO')
for url in matches.matches:
lang = url.split('/')[-2]
if 'ita' in lang.lower():

View File

@@ -1,10 +0,0 @@
{
"id": "dsda",
"name": "D.S.D.A",
"language": ["ita"],
"active": false,
"thumbnail": "dsda.png",
"banner": "dsda.png",
"categories": ["documentary"],
"settings": []
}

View File

@@ -1,140 +0,0 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per documentaristreamingda
# ------------------------------------------------------------
from core import support
from core.item import Item
from platformcode import logger, config
host = config.get_channel_url()
@support.menu
def mainlist(item):
docu = [('Documentari {bullet bold}',('/elenco-documentari','movies')),
('Categorie {submenu documentary}',('','menu')),
('Cerca... {bullet bold documentary}',('','search')),]
return locals()
@support.scrape
def menu(item):
action = 'movies'
patronMenu = r'<li class="menu-item menu-item-type-taxonomy[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>(?P<title>[^<]+)<'
def fullItemlistHook(itemlist):
item_list = []
title_list = []
for item in itemlist:
if item.title not in title_list:
item_list.append(item)
title_list.append(item.title)
itemlist = item_list
return itemlist
return locals()
def newest(category):
logger.debug()
item = Item()
try:
if category == "documentales":
item.url = host + "/elenco-documentari"
item.action = "movies"
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
return []
def search(item, texto):
logger.debug(texto)
item.url = host + "/?s=" + texto
try:
return movies(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
return []
@support.scrape
def movies(item):
blacklist = ['GUIDA PRINCIPIANTI Vedere film e documentari streaming gratis', 'Guida Dsda']
data = support.match(item).data
# debug =True
if item.args == 'collection':
if 'class="panel"' in data:
item.args = 'raccolta'
patron = r'class="title-episodio">(?P<title>[^<]+)<(?P<url>.*?)<p'
# patron = r'<a (?:style="[^"]+" )?href="(?P<url>[^"]+)"[^>]+>(?:[^>]+><strong>)?(?P<title>[^<]+)(?:</a>)?</strong'
else:
patron = r'<div class="cover-racolta">\s*<a href="(?P<url>[^"]+)"[^>]+>\s*<img width="[^"]+" height="[^"]+" src="(?P<thumb>[^"]+)".*?<p class="title[^>]+>(?P<title>[^<]+)<'
else:
patron = r'<article[^>]+>[^>]+>[^>]+>(?:<img width="[^"]+" height="[^"]+" src="(?P<thumb>[^"]+)"[^>]+>)?.*?<a href="(?P<url>[^"]+)"[^>]*>\s*(?P<title>[^<]+)<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*<p>(?P<plot>[^<]+)<'
patronNext = r'<a class="page-numbers next" href="([^"]+)">'
# select category
def itemHook(item):
title = support.re.sub(r'(?:[Ss]erie\s*|[Ss]treaming(?:\s*[Dd][Aa])?\s*|[Cc]ollezione\s*|[Rr]accolta\s*|[Dd]ocumentari(?:o)?\s*)?','',item.fulltitle).strip()
if 'serie' in item.fulltitle.lower():
item.contentType = 'tvshow'
item.action = 'episodes'
item.contentSerieName = title
item.contentTitle = ''
elif 'collezion' in item.fulltitle.lower() or \
'raccolt' in item.fulltitle.lower() or \
'filmografia' in item.fulltitle.lower():
item.args = 'collection'
item.action = 'movies'
item.contentTitle = title
item.contentSerieName = ''
else:
item.contentTitle = title
item.contentSerieName = ''
item.title = support.typo(title,'bold')
item.fulltitle = item.show = title
return item
# remove duplicates
def fullItemlistHook(itemlist):
item_list = []
title_list = []
for item in itemlist:
if item.title not in title_list:
item_list.append(item)
title_list.append(item.title)
itemlist = item_list
return itemlist
return locals()
@support.scrape
def episodes(item):
html = support.match(item, patron=r'class="title-episodio">(\d+x\d+)')
data = html.data
if html.match:
patron = r'class="title-episodio">(?P<episode>[^<]+)<(?P<url>.*?)<p'
else:
patron = r'class="title-episodio">(?P<title>[^<]+)<(?P<url>.*?)<p'
# def itemlistHook(itemlist):
# counter = 0
# for item in itemlist:
# episode = support.match(item.title, patron=r'\d+').match
# if episode == '1':
# counter += 1
# item.title = support.typo(str(counter) + 'x' + episode.zfill(2) + support.re.sub(r'\[[^\]]+\](?:\d+)?','',item.title),'bold')
# return itemlist
return locals()
def findvideos(item):
logger.debug()
if item.args == 'raccolta' or item.contentType == 'episode':
return support.server(item, item.url)
else:
return support.server(item)

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

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

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

@@ -6,7 +6,6 @@
from core import support
from core.item import Item
from platformcode import logger
# def findhost(url):
# permUrl = httptools.downloadpage(url, follow_redirects=False, only_headers=True).headers
@@ -18,38 +17,41 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
support.info()
tvshow = []
anime = ['/category/anime-cartoni-animati/']
mix = [('Aggiornamenti {bullet bold} {TV}', ['/aggiornamento-episodi/', 'movies', 'newest']),
('Archivio {bullet bold} {TV}', ['/category/serie-tv-archive/', 'movies'])]
mix = [('Aggiornamenti {bullet bold} {TV}', ['/aggiornamento-episodi-nuovi/', 'peliculas', 'newest']),
('Archivio {bullet bold} {TV}', ['/category/serie-tv-archive/', 'peliculas'])]
search = ''
return locals()
@support.scrape
def movies(item):
def peliculas(item):
# debug = True
action = 'episodes'
action = 'episodios'
if item.args == 'newest':
item.contentType = 'episode'
patron = r'<span class="serieTitle" style="font-size:20px">(?P<title>[^<]+) \s*<a href="(?P<url>[^"]+)"[^>]*>\s+?(?P<episode>\d+[×x]\d+-\d+|\d+[×x]\d+) (?P<title2>[^<\(]+)\s?\(?(?P<lang>SUB ITA)?\)?</a>'
pagination = True
pagination = ''
else:
patron = r'<div class="post-thumb">.*?<img src="(?P<thumb>[^"]+)".*?><a href="(?P<url>[^"]+)"[^>]+>(?P<title>.+?)\s?(?: Serie Tv)?\s?\(?(?P<year>\d{4})?\)?<\/a><\/h2>'
patronNext=r'a class="next page-numbers" href="?([^>"]+)">Avanti &raquo;</a>'
return locals()
@support.scrape
def episodes(item):
def episodios(item):
# debug = True
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
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>'
patron = r'(?P<season>\d+)&#\d+;(?P<episode>\d+(?:-\d+)?)\s*(?:</strong>|<em>)?\s*(?P<title>.*?)(?:–|-.+?-|–.+?–|–|em|.)?(?:/em.*?)?(?:<a (?P<data>.*?))<br />'
patron = r'(?P<season>\d+)&#215;(?P<episode>\d+)(</strong>)*(?P<title>.*?)<(?P<other>.*?br/>)'
def itemHook(i):
i.url = item.url
@@ -58,44 +60,50 @@ def episodes(item):
return locals()
def search(item, text):
logger.debug(text)
def search(item, texto):
support.info()
item.url = "%s/?s=%s" % (host, text)
item.url = "%s/?s=%s" % (host, texto)
item.contentType = 'tvshow'
try:
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error(line)
support.info(line)
return []
def newest(category):
logger.debug()
def newest(categoria):
support.info()
itemlist = []
item = Item()
item.contentType = 'tvshow'
item.args = 'newest'
try:
item.url = "%s/aggiornamento-episodi/" % host
item.action = "movies"
itemlist = movies(item)
item.url = "%s/aggiornamento-episodi-nuovi/" % host
item.action = "peliculas"
itemlist = peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
support.info("{0}".format(line))
return []
return itemlist
def findvideos(item):
logger.debug()
return support.server(item, item.data)
support.info()
itemlist = support.server(item, item.other)
# testo che tutti i link siano stati risolti
if support.logger.testMode:
if len(itemlist) < len(support.match(item.other, patron='<a href="([^"]+)').matches):
raise Exception('Manca qualche server')
return itemlist

View File

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

97
channels/eurostreaming_actor.py Executable file
View File

@@ -0,0 +1,97 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per Eurostreaming.Actor
# by Napster32
# ------------------------------------------------------------
from core import support
from core.item import Item
host = support.config.get_channel_url()
headers = [['Referer', host]]
@support.menu
def mainlist(item):
support.info()
tvshow = []
anime = ['/animazione/']
mix = [('Aggiornamenti {bullet bold} {TV}', ['/aggiornamento-episodi/', 'peliculas', 'newest'])]
search = ''
return locals()
@support.scrape
def peliculas(item):
action = 'episodios'
if item.args == 'newest':
item.contentType = 'episode'
patron = r'<span class="serieTitle" style="font-size:20px">(?P<title>[^<]+) \s*<a href="(?P<url>[^"]+)"[^>]*>(?P<episode>\d+[×x]\d+-\d+|\d+[×x]\d+) (?P<title2>[^<\(]+)\s?\(?(?P<lang>SUB ITA)?\)?</a>'
patronNext = r'class="next".*?"(.+?)"'
else:
patron = r'<div class="post-thumb">.*?<img src="(?P<thumb>[^"]+)".*?><a href="(?P<url>[^"]+)"[^>]+>(?P<title>.+?)[\<]'
patronNext = r'next.*?href="(.*?)"'
# debug = True
return locals()
@support.scrape
def episodios(item):
# debug = True
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
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'tab-content(?P<block>.*?)serie-player'
patron = r'data.num..(?P<season>\d+)x(?P<episode>\d+)" data-title="(?P<title>[^"]+).*?data-link="(?P<url>http.*?)</li>'
return locals()
def search(item, texto):
support.info()
item.url = host + '/index.php?story=%s&do=search&subaction=search' % (texto)
item.contentType = 'tvshow'
try:
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info(line)
return []
def newest(categoria):
support.info()
itemlist = []
item = Item()
item.contentType = 'tvshow'
item.args = 'newest'
try:
item.url = "%s/aggiornamento-episodi/" % host
item.action = "peliculas"
itemlist = peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
support.info("{0}".format(line))
return []
return itemlist
def findvideos(item):
support.info()
itemlist = support.server(item, item.url)
return itemlist

View File

@@ -1,11 +0,0 @@
{
"id": "fastsubita",
"name": "Fastsubita",
"language": ["sub-ita"],
"active": false,
"thumbnail": "fastsubita.png",
"banner": "fastsubita.png",
"categories": ["tvshow", "sub"],
"not_active": ["include_in_newest_movie", "include_in_newest_anime"],
"settings": []
}

View File

@@ -1,208 +0,0 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per fastsubita.py
# ------------------------------------------------------------
"""
Su questo canale, nella category 'Ricerca Globale'
non saranno presenti le voci 'Aggiungi alla Videoteca'
e 'Scarica Film'/'Scarica Serie', dunque,
la loro assenza, nel Test, NON dovrà essere segnalata come ERRORE.
Novità. Indicare in quale/i sezione/i è presente il canale:
- serie
Ulteriori info:
- SOLO SUB-ITA
"""
from core import support, httptools
from core.item import Item
from platformcode import config, logger
host = config.get_channel_url()
headers = [['Referer', host]]
@support.menu
def mainlist(item):
Tvshow = [
('Aggiornamenti', ['', 'movies', 'update']),
('Cerca... {bold}{TV}', ['', 'search'])
]
# search = ''
return locals()
@support.scrape
def movies(item):
deflang = 'Sub-ITA'
# è una singola pagina con tutti gli episodi
if item.grouped and not support.scrapertools.find_single_match(item.url, '-[0-9]+x[0-9]+-'):
item.grouped = False
return episodes_args(item)
# ogni puntata è un articolo a se
if item.fulltitle:
item.url = host + '?s=' + item.fulltitle
actLike = 'episodes'
action = 'findvideos'
blacklist = ['']
if item.args == 'genres':
patronBlock = r'<h4 id="mctm1-.">'+item.fulltitle+'</h4>(?P<block>.+?)</div>'
patron = r'[^>]+>[^>]+>.+?href="(?P<url>[^"]+)[^>]>(?P<title>[^<]+)\s<'
action = 'episodes'
elif item.args == 'search':
group = True
patronBlock = r'</header>(?P<block>.*?)</main>'
patron = '(?:<img[^>]+src="(?P<thumb>[^"]+)".*?)?<a href="(?P<url>[^"]+)"[^>]+>(?P<title>[^<]+?)(?:(?P<episode>\d+&#215;\d+|\d+×\d+)|\[[sS](?P<season>[0-9]+)[^]]+\])\s?(?:(?P<lang>\([a-zA-Z\s]+\)) (?:[Ss]\d+[Ee]\d+)?\s?(?:[&#\d;|.{3}]+)(?P<title2>[^”[<]+)(?:&#\d)?)?'
else:
# è una singola pagina con tutti gli episodi
if item.args != 'update' and not support.scrapertools.find_single_match(item.url, '-[0-9]+x[0-9]+-'):
return episodes_args(item)
patron = r'<div class="featured-thumb"> +<a href="(?P<url>[^"]+)" title="(?P<title>[^[]+)\[(?P<episode>\d+&#215;\d+)?'
patronBlock = r'<main id="main"[^>]+>(?P<block>.*?)<div id="secondary'
# def itemlistHook(itemlist):
# from core import scraper
# return scraper.sort_episode_list(itemlist)
patronNext = '<a class="next page-numbers" href="(.*?)">Successivi'
# debug = True
return locals()
def episodes_args(item):
actLike = 'episodes'
deflang = 'Sub-ITA'
action = 'findvideos'
patron = '(?P<episode>\d+&#215;\d+|\d+[×.]+\d+)(?:\s?\((?P<lang>[a-zA-Z ]+)\))?(?:\s[Ss]\d+[Ee]+\d+)? +(?:“|&#8220;)(?P<title2>.*?)(?:”|&#8221;).*?(?P<other>.*?)(?:/>|<p)'
patronBlock = r'<main id="main" class="site-main" role="main">(?P<block>.*?)</main>'
patronNext = '<a class="next page-numbers" href="(.*?)">Successivi'
# debug = True
return locals()
@support.scrape
def episodes(item):
return episodes_args(item)
@support.scrape
def genres(item):
logger.debug()
action = 'movies'
patronBlock = r'<div id="mcTagMapNav">(?P<block>.+?)</div>'
patron = r'<a href="(?P<url>[^"]+)">(?P<title>.+?)</a>'
def itemHook(item):
item.url = host+'/elenco-serie-tv/'
item.contentType = 'tvshow'
return item
#debug = True
return locals()
def search(item, text):
logger.debug('search', text)
text = text.replace(' ', '+')
item.url = host + '?s=' + text
try:
item.args = 'search'
item.contentType = 'tvshow'
return movies(item)
# Se captura la excepcion, para no interrumpir al buscador global si un canal falla
except:
import sys
for line in sys.exc_info():
logger.error('search log:', line)
return []
def newest(category):
logger.debug('newest ->', category)
itemlist = []
item = Item()
if category == 'tvshow':
try:
item.contentType = 'tvshow'
item.args = 'newest'
item.url = host
item.action = 'movies'
itemlist = movies(item)
if itemlist[-1].action == 'movies':
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error('newest log: ', line)
return []
return itemlist
def findvideos(item):
logger.debug('findvideos ->', item)
patron = r'<a href="([^"]+)">'
itemlist = []
if item.other.startswith('http'):
resp = httptools.downloadpage(item.url, follow_redirects=False)
data = resp.headers.get("location", "") + '\n'
elif item.other:
html = support.match(item.other, patron=patron, headers=headers)
matches = html.matches
data = html.data
for scrapedurl in matches:
if 'is.gd' in scrapedurl:
resp = httptools.downloadpage(scrapedurl, follow_redirects=False)
data += resp.headers.get("location", "") + '\n'
elif not support.scrapertools.find_single_match(item.url, '-[0-9]+x[0-9]+-'):
return episodes(item)
else:
patronBlock = '<div class="entry-content">(?P<block>.*)<footer class="entry-footer">'
html = support.match(item, patron=patron, patronBlock=patronBlock, headers=headers)
matches = html.matches
data= html.data
if item.args != 'episodes':
item.infoLabels['mediatype'] = 'episode'
for scrapedurl in matches:
if 'is.gd' in scrapedurl:
resp = httptools.downloadpage(scrapedurl, follow_redirects=False)
data += resp.headers.get("location", "") + '\n'
itemlist += support.server(item, data)
# data = support.match(item.url).data
# patron = r'>Posted in <a href="https?://fastsubita.com/serietv/([^/]+)/(?:[^"]+)?"'
# series = scrapertools.find_single_match(data, patron)
# titles = support.typo(series.upper().replace('-', ' '), 'bold color kod')
# goseries = support.typo("Vai alla Serie:", ' bold color kod')
# itemlist.append(
# item.clone(channel=item.channel,
# # title=goseries + titles,
# title=titles,
# fulltitle=titles,
# show=series,
# contentType='tvshow',
# contentSerieName=series,
# url=host+"/serietv/"+series,
# action='episodes',
# contentTitle=titles,
# plot = "Vai alla Serie " + titles + " con tutte le puntate",
# ))
return itemlist

View File

@@ -1,11 +0,0 @@
{
"id": "film4k",
"name": "Film4k",
"language": ["ita"],
"active": false,
"thumbnail": "film4k.png",
"banner": "film4k.png",
"categories": ["tvshow", "movie", "anime"],
"not_active": ["include_in_newest_movie", "include_in_newest_anime", "include_in_newest_tvshow"],
"settings": []
}

View File

@@ -1,82 +0,0 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per film4k
# ------------------------------------------------------------
from core import support
from platformcode import logger, config
def findhost(url):
return support.httptools.downloadpage(url).url
host = config.get_channel_url(findhost)
@support.menu
def mainlist(item):
film = ['movies',
('Qualità', ['', 'menu', 'quality']),
('Generi', ['movies', 'menu', 'genres']),
('Anno', ['movies', 'menu', 'releases']),
('Più popolari', ['trending/?get=movies', 'movies']),
('Più votati', ['ratings/?get=movies', 'movies'])]
tvshow = ['/tvshows',
('Più popolari', ['trending/?get=tv', 'movies']),
('Più votati', ['ratings/?get=tv', 'movies'])]
return locals()
def search(item, text):
logger.info('search', text)
item.url = item.url + "/?s=" + text
try:
return support.dooplay_search(item)
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
return []
def movies(item):
if 'anime' in item.url:
return support.dooplay_movies(item, True)
else:
return support.dooplay_movies(item, False)
def episodes(item):
itemlist = support.dooplay_get_episodes(item)
return itemlist
def findvideos(item):
itemlist = []
if item.contentType == 'episode':
linkHead = support.httptools.downloadpage(item.url, only_headers=True).headers['link']
epId = support.scrapertools.find_single_match(linkHead, r'\?p=([0-9]+)>')
for link in support.dooplay_get_links(item, host, paramList=[['tv', epId, 1, 'title', 'server']]):
itemlist.append(
item.clone(action="play", url=link['url']))
else:
for link, quality in support.match(item.url, patron="(" + host + """links/[^"]+).*?class="quality">([^<]+)""").matches:
srv = support.servertools.find_video_items(data=support.httptools.downloadpage(link).data)
for s in srv:
s.quality = quality
itemlist.extend(srv)
return support.server(item, itemlist=itemlist)
@support.scrape
def menu(item):
action = 'movies'
if item.args in ['genres','releases']:
patronBlock = r'<nav class="' + item.args + r'">(?P<block>.*?)</nav'
patronMenu= r'<a href="(?P<url>[^"]+)"[^>]*>(?P<title>[^<]+)<'
else:
patronBlock = r'class="main-header">(?P<block>.*?)headitems'
patronMenu = r'(?P<url>' + host + r'quality/[^/]+/\?post_type=movies)">(?P<title>[^<]+)'
return locals()

View File

@@ -1,35 +0,0 @@
{
"id": "filmigratis",
"name": "Filmi Gratis",
"active": false,
"language": ["ita", "sub-ita"],
"thumbnail": "filmigratis.png",
"banner": "filmigratis.png",
"categories": ["movie","tvshow"],
"settings": [
{
"id": "include_in_newest_movie",
"type": "bool",
"label": "@70727",
"default": false,
"enabled": false,
"visible": false
},
{
"id": "include_in_newest_tvshow",
"type": "bool",
"label": "@70727",
"default": false,
"enabled": false,
"visible": false
},
{
"id": "include_in_newest_anime",
"type": "bool",
"label": "@70727",
"default": false,
"enabled": false,
"visible": false
}
]
}

View File

@@ -1,151 +0,0 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per Filmi Gratis
# ------------------------------------------------------------
"""
La voce "Al cinema" si riferisce ai titoli che scorrono nella home page
Problemi:
- Nessuno noto
Novità, il canale, è presente in:
- FILM
"""
import re
from core import httptools, support
from core.item import Item
from platformcode import config, logger
host = config.get_channel_url()
headers = [['Referer', host]]
@support.menu
def mainlist(item):
film = [
('Al Cinema ', ['', 'movies', 'cinema']),
('Categorie', ['', 'genres', 'genres']),
]
tvshow = ['/serie/ALL',
('Generi', ['', 'genres', 'genres'])
]
search = ''
return locals()
@support.scrape
def movies(item):
if item.args == 'search':
action = ''
patron = r'<div class="cnt">.*?src="([^"]+)"[^>]+>[^>]+>[^>]+>\s+(?P<title>.+?)(?:\[(?P<lang>Sub-ITA|SUB-ITA|SUB)\])?\s?(?:\[?(?P<quality>HD).+\]?)?\s?(?:\(?(?P<year>\d+)?\)?)?\s+<[^>]+>[^>]+>[^>]+>\s<a href="(?P<url>[^"]+)"[^<]+<'
patronBlock = r'<div class="container">(?P<block>.*?)</main>'
elif item.contentType == 'movie':
if not item.args:
# voce menu: Film
patronBlock = r'<h1>Film streaming ita in alta definizione</h1>(?P<block>.*?)<div class="content-sidebar">'
patron = r'<div class="timeline-right">[^>]+>\s<a href="(?P<url>.*?)".*?src="(?P<thumb>.*?)".*?<h3 class="timeline-post-title">(?:(?P<title>.+?)\s\[?(?P<lang>Sub-ITA)?\]?\s?\[?(?P<quality>HD)?\]?\s?\(?(?P<year>\d+)?\)?)<'
patronNext = r'<a class="page-link" href="([^"]+)">>'
elif item.args == 'cinema':
patronBlock = r'<div class="owl-carousel" id="postCarousel">(?P<block>.*?)<section class="main-content">'
patron = r'background-image: url\((?P<thumb>.*?)\).*?<h3.*?>(?:(?P<title>.+?)\s\[?(?P<lang>Sub-ITA)?\]?\s?\[?(?P<quality>HD)?\]?\s?\(?(?P<year>\d+)?\)?)<.+?<a.+?<a href="(?P<url>[^"]+)"[^>]+>'
elif item.args == 'genres':
# ci sono dei titoli dove ' viene sostituito con " da support
data = httptools.downloadpage(item.url, headers=headers, ignore_response_code=True).data
data = re.sub('\n|\t', ' ', data)
patron = r'<div class="cnt">\s.*?src="([^"]+)".+?title="((?P<title>.+?)(?:[ ]\[(?P<lang>Sub-ITA|SUB-ITA)\])?(?:[ ]\[(?P<quality>.*?)\])?(?:[ ]\((?P<year>\d+)\))?)"\s*[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s+<a href="(?P<url>[^"]+)"'
patronBlock = r'<div class="container">(?P<block>.*?)</main>'
pagination = True
patronNext = '<a class="page-link" href="([^"]+)">>>'
else:
action = 'episodes'
patron = r'<div class="cnt">\s.*?src="([^"]+)".+?title="((?P<title>.+?)(?:[ ]\[(?P<lang>Sub-ITA|SUB-ITA)\])?(?:[ ]\[(?P<quality>.*?)\])?(?:[ ]\((?P<year>\d+)\))?)"\s*[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s+<a href="(?P<url>[^"]+)"'
## if item.args == 'search':
## patron = r'<div class="cnt">.*?src="([^"]+)".+?[^>]+>[^>]+>[^>]+>\s+((?P<title>.+?)(?:[ ]\[(?P<lang>Sub-ITA|SUB-ITA)\])?(?:[ ]\[(?P<quality>.*?)\])?(?:[ ]\((?P<year>\d+)\))?)\s+<[^>]+>[^>]+>[^>]+>[ ]<a href="(?P<url>[^"]+)"'
patronBlock = r'<div class="container">(?P<block>.*?)</main>'
def itemHook(item):
if item.args == 'search':
if 'series' in item.url:
item.action = 'episodes'
item.contentType = 'tvshow'
else:
item.action = 'findvideos'
item.contentType = 'movie'
return item
#debug = True
return locals()
@support.scrape
def episodes(item):
action = 'findvideos'
patronBlock = r'<div class="row">(?P<block>.*?)<section class="main-content">'
patron = r'href="(?P<url>.*?)">(?:.+?)?\s+S(?P<season>\d+)\s\-\sEP\s(?P<episode>\d+)[^<]+<'
return locals()
@support.scrape
def genres(item):
if item.contentType == 'movie':
action = 'movies'
patron = r'<a href="(?P<url>.*?)">(?P<title>.*?)<'
patronBlock = r'CATEGORIES.*?<ul>(?P<block>.*?)</ul>'
else:
item.contentType = 'tvshow'
action = 'movies'
blacklist = ['Al-Cinema']
patron = r'<a href="(?P<url>.*?)">(?P<title>.*?)<'
patronBlock = r'class="material-button submenu-toggle"> SERIE TV.*?<ul>.*?</li>(?P<block>.*?)</ul>'
return locals()
def search(item, text):
logger.debug('search', text)
text = text.replace(' ', '+')
item.url = host + '/search/?s=' + text
try:
item.args = 'search'
return movies(item)
# Se captura la excepcion, para no interrumpir al buscador global si un canal falla
except:
import sys
for line in sys.exc_info():
logger.error('search log:', line)
return []
def newest(category):
logger.debug('newest ->', category)
itemlist = []
item = Item()
try:
if category == 'movie':
item.url = host
item.contentType = 'movie'
item.action = 'movies'
itemlist = movies(item)
if itemlist[-1].action == 'movies':
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error({0}.format(line))
return []
return itemlist
def findvideos(item):
logger.debug()
return support.server(item)

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

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

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

@@ -3,27 +3,32 @@
# Canale per filmpertutti.py
# ------------------------------------------------------------
from core import support
from core import httptools, support, scrapertools
from core.item import Item
from platformcode import config, logger
def findhost(url):
return support.match(url, patron=r'Il nuovo indirizzo di FILMPERTUTTI è ?<a href="([^"]+)').match
page = httptools.downloadpage(url).data
url = support.scrapertools.find_single_match(page, 'Il nuovo indirizzo di FILMPERTUTTI è ?<a href="([^"]+)')
return url
host = config.get_channel_url(findhost)
headers = [['Referer', host]]
@support.menu
def mainlist(item):
film = ['/category/film/',
('Generi', ['/category/film/', 'genres', 'lettersF'])
film = ['/category/film/feed/',
('Film al cinema', ['/category/ora-al-cinema/feed/', 'peliculas']),
('Generi', ['/', 'genres']),
('Saghe', ['/', 'genres', 'saghe']),
]
tvshow = ['/category/serie-tv/',
('Aggiornamenti', ['/aggiornamenti-serie-tv/', 'movies', 'newest']),
('Per Lettera', ['/category/serie-tv/', 'genres', 'lettersS'])
tvshow = ['/category/serie-tv/feed/',
]
anime = ['/category/anime/feed/',
('SUB-ITA',['/category/anime-sub-ita/feed/', 'peliculas']),
]
search = ''
@@ -31,125 +36,150 @@ def mainlist(item):
@support.scrape
def movies(item):
def peliculas(item):
if not item.args == 'search': # pagination not works
if not item.nextpage:
item.page = 1
else:
item.page = item.nextpage
if item.args != 'newest':
patronBlock = r'<ul class="posts">(?P<block>.*)<\/ul>'
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 not item.parent_url:
item.parent_url = item.url
if item.args == 'search':
action = 'check'
elif item.contentType == 'tvshow':
action = 'episodes'
elif item.contentType == 'movie':
action ='findvideos'
if item.args == 'genres':
action = 'check'
item.nextpage = item.page + 1
nextPageUrl = "{}/?paged={}".format(item.parent_url, item.nextpage)
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:
action = 'check'
def itemHook(item):
item.title = item.title.replace(' - La Serie', '')
return item
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+<'
return locals()
@support.scrape
def episodes(item):
# debug=True
data = support.match(item.url, headers=headers).data
if 'accordion-item' in data:
patronBlock = r'<span class="season[^>]*>\d+[^>]+>[^>]+>[^>]+>[^>]+>\D*(?:STAGIONE|Stagione)[ -]+(?P<lang>[a-zA-Z\- ]+)[^<]*</span>(?P<block>.*?)<div id="(?:season|disqus)'
patron = r'data-src="(?P<thumb>[^"]+)"[^>]*>.*?<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 episodios(item):
item.quality = ''
data = item.data if item.data else httptools.downloadpage(item.url).data
itemlist = []
def itemHook(i):
i.url = item.url
i.title.replace('&#215;','x')
if not i.contentLanguage:
i.contentLanguage = 'ITA'
return i
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],
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
def genres(item):
action = 'peliculas'
blacklist = ['Tutti i film',]
wantSaga = True if item.args == 'saghe' else False
item.args = 'genres'
if item.args == 'lettersF':
item.contentType = 'movie'
else:
item.contentType = 'tvshow'
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>'
action = 'movies'
patronBlock = r'<select class="cats">(?P<block>.*?)<\/select>'
patronGenreMenu = r'<option data-src="(?P<url>[^"]+)">(?P<title>[^<]+)<\/option>'
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()
def check(item):
logger.debug()
patron=r'class="taxonomy category"\s*><span property="name">([^>]+)</span></a><meta property="position" content="2">'
block = support.match(item.url, patron=patron,headers=headers).match
if block.lower() != 'film':
logger.debug('### è una Serie ###')
item.contentType='tvshow'
return episodes(item)
item.data = httptools.downloadpage(item.url).data
if 'season-details' in item.data.lower():
item.contentType = 'tvshow'
return episodios(item)
else:
logger.debug(' ### è un Film ###')
item.contentType='movie'
item.contentType = 'movie'
return findvideos(item)
def search(item, texto):
logger.debug()
item.url = host + "/?s=" + texto
def search(item, text):
item.url = "{}/?{}".format(host, support.urlencode({'s': text}))
item.args = 'search'
try:
return movies(item)
# Continua la ricerca in caso di errore
return peliculas(item)
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
logger.error("search except: %s" % line)
return []
def newest(category):
logger.debug()
def newest(categoria):
support.info()
itemlist = []
item = Item()
try:
if category == "movie":
item.url = host + "/category/film/"
item.action = "movies"
if categoria == "peliculas":
item.url = host + "/category/film/feed/"
item.action = "peliculas"
item.extra = "movie"
item.contentType = 'movie'
itemlist = movies(item)
itemlist = peliculas(item)
else:
item.url = host + "/aggiornamenti-serie-tv/"
item.action = "movies"
item.url = host + "/category/serie-tv/feed/"
item.action = "peliculas"
item.args = "newest"
item.contentType = 'tvshow'
itemlist = movies(item)
itemlist = peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
support.info("{0}".format(line))
return []
return itemlist
def findvideos(item):
video_url = item.url
if item.contentType == 'movie':
data = support.match(item.url, patron=r'<a target="_blank" rel="nofollow" href="([^"]+)">').matches
return support.server(item, data=data, patronTag='Versione: <[^>]+>([^<]+)')
else:
return support.server(item, item.data)
video_url = support.match(item.url, patron=r'<a href="([^"]+)" rel="nofollow">').match
video_url = support.match(video_url, patron=r'<iframe src=\"(https://.*?)\"').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

10
channels/filmstreaming.json Executable file
View File

@@ -0,0 +1,10 @@
{
"id": "filmstreaming",
"name": "Film Streaming",
"language": ["ita"],
"active": false,
"thumbnail": "filmstreaming.png",
"banner": "filmstreaming.png",
"categories": ["movie"],
"settings": []
}

94
channels/filmstreaming.py Executable file
View File

@@ -0,0 +1,94 @@
# -*- coding: utf-8 -*-
# ------------------------------------------------------------
# Canale per filmstreaming
# ------------------------------------------------------------
from core import support
from core.item import Item
from platformcode import config, logger
host = config.get_channel_url()
headers = [['Referer', host]]
@support.menu
def mainlist(item):
film = ['/film',
('Al Cinema', ['/cinema', 'peliculas']),
('Ultimi Inseriti', ['', 'peliculas', 'last']),
('Generi', ['', 'genres', 'genres']),
('Anno', ['', 'genres', 'years'])]
return locals()
def search(item, text):
logger.debug('search', text)
itemlist = []
text = text.replace(" ", "+")
item.url = '{}/index.php?do=search&subaction=search&story={}'.format(host, text)
try:
return peliculas(item)
except:
import sys
for line in sys.exc_info():
logger.error("search except: %s" % line)
return []
def newest(categoria):
logger.debug(categoria)
itemlist = []
item = Item()
try:
if categoria == "peliculas":
item.url = host
item.action = "peliculas"
item.contentType = 'movie'
item.args = 'last'
itemlist = peliculas(item)
if itemlist[-1].action == "peliculas":
itemlist.pop()
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
return []
return itemlist
@support.scrape
def peliculas(item):
# debug=True
if item.args == 'last':
patronBlock = r'inseriti:(?P<block>.*?)<div class="block-showmore'
patron = r'item-movie">[^>]+><a href="(?P<url>[^"]+)[^>]+><img data-src="(?P<thumb>[^"]+)(?:[^>]+>){6}(?P<title>[^<]+)(?:[^>]+>){4}(?P<year>\d+)?(?:[^>]+>){2}(?P<quality>[^<]+)'
# patron = r'item-movie">[^>]+><a href="(?P<url>[^"]+)[^>]+><img data-src="(?P<thumb>[^"]+)(?:[^>]+>){6}(?P<title>[^<]+)(?:[^>]+>){6}(?P<quality>[^<]+)'
patronNext = r'<a href="([^"]+)">&rarr'
return locals()
@support.scrape
def genres(item):
action = "peliculas"
_type ={'years':'Anno', 'genres':'Categorie'}
patronBlock = _type[item.args] + r'(?:[^>]+>){4}(?P<block>.*?)</ul>'
patronMenu = '<li><a href="(?P<url>[^"]+)">(?P<title>.*?)</a>'
return locals()
def findvideos(item):
urls = []
data = support.match(item.url).data
urls += support.match(data, patron=r'<span data-link="([^"]+)').matches
url = support.match(data, patron='<iframe [^>]+src="([^"]+)').match
if url:
urls.append(support.match(url).data)
return support.server(item, urls)

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

@@ -2,7 +2,7 @@
"id": "guardaseriecam",
"name": "GuardaSerie Cam",
"language": ["ita", "sub-ita"],
"active": false,
"active": true,
"thumbnail": "https://raw.githubusercontent.com/32Dexter/DexterRepo/master/media/guardaserie_live.png",
"banner": "",
"categories": ["tvshow"],

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

@@ -11,6 +11,7 @@
# possibilità di miglioramento: inserire menu per genere - lista serie tv e gestire le novità
from core import support
from core.support import info
from platformcode import logger, config
host = config.get_channel_url()
@@ -28,42 +29,43 @@ def mainlist(item):
@support.scrape
def list(item):
patronMenu = r'<a title="(?P<title>[^"]+)" href="(?P<url>[^"]+)'
action = 'movies'
action = 'peliculas'
return locals()
@support.scrape
def movies(item):
patron = r'<div class="mlnh-thumb"><a href="(?P<url>[^"]+).*?title="(?P<title>[^"]+).*?src="(?P<thumb>[^"]+).*?hdn">(?P<year>[0-9]{4})'
patronNext = 'pagenavi.*?<span>.</span>.*?<a href="([^"]+)'
action = 'episodes'
def peliculas(item):
# debug = True
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+'
action = 'episodios'
return locals()
@support.scrape
def episodes(item):
patronBlock = r'<div class="tab-pane fade" id="season-(?P<season>.)"(?P<block>.*?)</div>'
patron = r'<a href="#" allowfullscreen data-link="(?P<url>[^"]+).*?title="(?P<title>[^"]+)(?P<lang>[sS][uU][bB]-?[iI][tT][aA])?\s*">(?P<episode>[^<]+)'
def episodios(item):
patronBlock = r'<div class="tab-pane fade" id="season-(?P<season>.)"(?P<block>.*?)</ul>\s*</div>'
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'
# debug = True
return locals()
def search(item, text):
logger.debug('search', text)
support.info('search', text)
item.contentType = 'tvshow'
itemlist = []
text = text.replace(' ', '+')
item.url = host + '/index.php?story=%s&do=search&subaction=search' % (text)
try:
return movies(item)
return peliculas(item)
except:
import sys
for line in sys.exc_info():
logger.error('search log:', line)
info('search log:', line)
return []
def findvideos(item):
logger.debug()
return support.server(item, item.url)
return support.server(item, item.data)

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

@@ -1,15 +1,15 @@
{
"id": "guardaserieclick",
"name": "GuardaSerie.click",
"active": true,
"language": ["ita", "sub-ita"],
"active": false,
"language": ["ita", "vos"],
"thumbnail": "guardaserieclick.png",
"bannermenu": "guardaserieclick.png",
"categories": ["tvshow", "anime"],
"not_active": ["include_in_newest_movie", "include_in_newest_anime"],
"not_active": ["include_in_newest_peliculas", "include_in_newest_anime"],
"settings": [
{
"id": "include_in_newest_movie",
"id": "include_in_newest_peliculas",
"type": "bool",
"label": "@70727",
"default": false,

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

@@ -16,7 +16,8 @@
from core import support
from core.item import Item
from platformcode import config, logger
from platformcode import config
from core.support import info
host = config.get_channel_url()
headers = [['Referer', host]]
@@ -25,28 +26,28 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
tvshow = ['',
('Aggiornamenti', ['', 'movies', 'update']),
('Aggiornamenti', ['', 'peliculas', 'update']),
('Generi', ['', 'genres', 'genres']),
('News Sub-ITA', ['', 'movies', 'ined']),
('Anime/Cartoni', ["/category/animazione/", 'movies', 'genres'])
('News Sub-ITA', ['', 'peliculas', 'ined']),
('Anime/Cartoni', ["/category/animazione/", 'peliculas', 'genres'])
]
return locals()
##@support.scrape
##def movies(item):
##def peliculas(item):
#### import web_pdb; web_pdb.set_trace()
## logger.debug('movies ->\n', item)
## info('peliculas ->\n', item)
##
## action = 'episodes'
## action = 'episodios'
## block = r'(?P<block>.*?)<div\s+class="btn btn-lg btn-default btn-load-other-series">'
##
## if item.args == 'ined':
## deflang = 'SUB-ITA'
## patronBlock = r'<span\s+class="label label-default label-title-typology">'+block
## patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
## pagination = True
## pagination = 25
## elif item.args == 'update':
## patronBlock = r'<div\s+class="container-fluid greybg title-serie-lastep title-last-ep fixed-title-wrapper containerBottomBarTitle">'+block
## patron = r'<a(?: rel="[^"]+")? href="(?P<url>[^"]+)"(?: class="[^"]+")?>[ ]<img class="[^"]+"[ ]title="[^"]+"[ ]alt="[^"]+"[ ]src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<episode>\d+.\d+)[ ]\((?P<lang>[a-zA-Z\-]+)[^<]+<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<title>[^<]+)<'
@@ -58,25 +59,25 @@ def mainlist(item):
## elif item.args == 'nolost':
## patronBlock = r'<h2 class="title-typology styck-top" meta-class="title-serie-danonperd">'+block
## patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
## pagination = True
## pagination = 25
## elif item.args == 'classic':
## patronBlock = r'<h2 class="title-typology styck-top" meta-class="title-serie-classiche">'+block
## patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
## pagination = True
## pagination = 25
## else:
## patronBlock = r'<div\s+class="container container-title-serie-new container-scheda" meta-slug="new">'+block
## patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
## pagination = True
## pagination = 25
##
## debug = True
## return locals()
@support.scrape
def movies(item):
def peliculas(item):
## import web_pdb; web_pdb.set_trace()
logger.debug('movies ->\n', item)
info('peliculas ->\n', item)
action = 'episodes'
action = 'episodios'
blacklist = ['DMCA']
if item.args == 'genres' or item.args == 'search':
@@ -90,36 +91,36 @@ def movies(item):
else:
end_block = r'(?P<block>.*?)<div\s+class="btn btn-lg btn-default btn-load-other-series">'
patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
pagination = True
pagination = 25
if item.args == 'ined':
deflang = 'SUB-ITA'
patronBlock = r'<span\s+class="label label-default label-title-typology">' + end_block
## patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
## pagination = True
## pagination = 25
elif item.args == 'update':
patronBlock = r'<div\s+class="container-fluid greybg title-serie-lastep title-last-ep fixed-title-wrapper containerBottomBarTitle">' + end_block
patron = r'href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>.+?class="strongText">(?P<title>.+?)<'
# elif item.args == 'nolost':
# patronBlock = r'<h2 class="title-typology styck-top" meta-class="title-serie-danonperd">' + end_block
# pagination = True
# pagination = 25
# elif item.args == 'classic':
# patronBlock = r'<h2 class="title-typology styck-top" meta-class="title-serie-classiche">' + end_block
## patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
## pagination = True
## pagination = 25
## elif item.args == 'anime':
##
else:
patronBlock = r'<div\s+class="container container-title-serie-new container-scheda" meta-slug="new">' + end_block
## patron = r'<a href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>\s(?P<year>\d{4})?\s.+?class="strongText">(?P<title>.+?)<'
## pagination = True
## pagination = 25
# support.regexDbg(item, patronBlock, headers)
# debug = True
return locals()
@support.scrape
def episodes(item):
logger.debug()
def episodios(item):
info()
action = 'findvideos'
patron = r'<div class="number-episodes-on-img">\s?\d+.\d+\s?(?:\((?P<lang>[a-zA-Z\-]+)\))?</div>.+?(?:<span class="pull-left bottom-year">(?P<title2>[^<]+)<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<plot>[^<]+)<[^>]+>[^>]+>[^>]+>\s?)?<span(?: meta-nextep="[^"]+")? class="[^"]+" meta-serie="(?P<title>[^"]+)" meta-stag="(?P<season>\d+)" meta-ep="(?P<episode>\d+)" meta-embed="(?P<url>[^>]+)">'
@@ -135,9 +136,9 @@ def episodes(item):
@support.scrape
def genres(item):
logger.debug()
info()
action = 'movies'
action = 'peliculas'
patronMenu = r'<li>\s<a\shref="(?P<url>[^"]+)"[^>]+>(?P<title>[^<]+)</a></li>'
patron_block = r'<ul\sclass="dropdown-menu category">(?P<block>.*?)</ul>'
# debug = True
@@ -145,42 +146,42 @@ def genres(item):
def search(item, text):
logger.debug(text)
item.url = host + "/search/" + text
info(text)
item.url = host + "/?s=" + text
item.contentType = 'tvshow'
item.args = 'search'
try:
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
info("%s" % line)
return []
def newest(category):
logger.debug()
def newest(categoria):
info()
itemlist = []
item = Item()
item.contentType = 'tvshow'
item.args = 'update'
try:
if category == 'tvshow':
if categoria == "series":
item.url = host
item.action = "movies"
itemlist = movies(item)
item.action = "peliculas"
itemlist = peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
info("{0}".format(line))
return []
return itemlist
def findvideos(item):
logger.debug('--->', item)
info('--->', item)
return support.server(item, item.url)

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

@@ -2,7 +2,7 @@
"id": "guardaserieicu",
"name": "Guarda Serie Icu",
"language": ["ita", "sub-ita"],
"active": true,
"active": false,
"thumbnail": "https://raw.githubusercontent.com/32Dexter/DexterRepo/master/media/guarda_serie.jpg",
"banner": "",
"categories": ["tvshow"],

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

@@ -10,50 +10,56 @@
# possibilità di miglioramento: gestire le novità (sezione Ultimi episodi sul sito)
from core.support import info
from core import support
from platformcode import config, logger
from platformcode import config
host = config.get_channel_url()
headers = [['Referer', host]]
@support.menu
def mainlist(item):
tvshow = ['/serie']
return locals()
@support.scrape
def movies(item):
patronBlock = r'movies-list movies-list-full(?P<block>.*?)footer>'
patron = r'<div data-movie-id[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>[^>]+>[^>]+><img src="(?P<thumbnail>[^"]+)[^>]+>[^>]+>[^>]+>[^>]+>(?P<title>[^<]+).*?jt-info[^>]+>[^:]+:\s*(?P<rating>[^<]+)[^>]+>[^>]+>[^>]+>(?P<year>\d*)[^>]+>[^>]+>[^>]+>(?P<duration>\d*)'
patronNext = '<li class=.active.>.*?href=.(.*?).>'
action = 'episodes'
return locals()
@support.scrape
def episodes(item):
def peliculas(item):
# debug = True
# patronBlock = r'movies-list movies-list-full(?P<block>.*?)footer>'
if item.args == 'search':
patron = r'<div data-movie-id[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>(?:\s*<span class="mli-quality">(?P<quality>[^>]+)</span>)?\s*<img src="(?P<thumbnail>[^"]+)[^>]+>[^>]+>[^>]+>(?P<title>[^<]+).*?jt-info[^>]+>[^:]+:\s*(?P<rating>[^<]+)[^>]+>[^>]+>[^>]+>(?P<year>\d*)[^>]+>[^>]+>[^>]+>(?P<duration>\d*).*?"f-desc">(?:\s*<p>(?P<plot>[^<]+))?'
else:
patron = r'<div data-movie-id[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>[^>]+>[^>]+><img src="(?P<thumbnail>[^"]+)[^>]+>[^>]+>[^>]+>[^>]+>(?P<title>[^<]+).*?jt-info[^>]+>[^:]+:\s*(?P<rating>[^<]+)[^>]+>[^>]+>[^>]+>(?P<year>\d*)[^>]+>[^>]+>[^>]+>(?P<duration>\d*)'
patronNext = '<li class=.active.>.*?href=.(.*?).>'
action = 'episodios'
return locals()
@support.scrape
def episodios(item):
patronBlock = r'<strong>Stagione (?P<season>[0-9]+)(?P<block>.*?)</div></div>'
patron = r'<a href="(?P<url>[^"]+)">\s*Episodio\s*(?P<episode>[0-9]+)'
return locals()
def search(item, text):
logger.debug(text)
info(text)
item.contentType = 'tvshow'
item.url = host + "/?s=" + text
try:
item.args = 'search'
return movies(item)
return peliculas(item)
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
info("%s" % line)
return []
def findvideos(item):
logger.debug('findvideos', item)
support.info('findvideos', item)
data = support.match(item, headers=headers, patron=r'div class="movieplay">([^>]+)').matches
return support.server(item, data=data )

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

@@ -5,7 +5,7 @@
"active": true,
"thumbnail": "hd4me.png",
"banner": "hd4me.png",
"categories": ["movie", "sub"],
"categories": ["movie", "vos"],
"not_active": ["include_in_newest"],
"settings": []
}

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

@@ -4,7 +4,6 @@
# ------------------------------------------------------------
from core import support
from platformcode import logger
host = support.config.get_channel_url()
@@ -20,22 +19,22 @@ def mainlist(item):
@support.scrape
def movies(item):
def peliculas(item):
# debug = True
if item.args == 'alternative':
pagination = True
pagination = ''
patron = r'<a title="(?P<title>[^\(]+)\(\s*(?P<year>\d+)\)\s\D+(?P<quality>\d+p).{3}(?P<lang>[^ ]+).*?[^"]+"\s*href="(?P<url>[^"]+)'
else:
patron = r'<a href="(?P<url>[^"]+)" (?:rel="?[0-9]+"?)? title="(?P<title>[^\(]+)(?!\()\s*\((?P<year>\d+)\)\s(?:[^\]]+\])?\D+(?P<quality>\d+p).{3}(?P<lang>[^ ]+).*?<img id="?cov"?.*?src="(?P<thumb>[^"]+)'
patron = r'<a href="(?P<url>[^"]+)" (?:rel="?[0-9]+"?)? title="(?P<title>[^"]+)(?!\()\s*\((?P<year>\d+)\)\s(?:[^\]]+\])?\D+(?P<quality>\d+p).{3}(?P<lang>[^ ]+).*?<img id="?cov"?.*?src="(?P<thumb>[^"]+)'
patronNext = r'current(?:[^>]*>){2}\s*<a class="[^"]+"\s* href="([^"]+)'
return locals()
@support.scrape
def genre(item):
action = 'movies'
action = 'peliculas'
blacklist =['prova ']
patronGenreMenu = r'<a href="(?P<url>[^"]+)" class="menu-link\s*sub-menu-link">(?P<title>[^<]+)<'
patronMenu = r'<a href="(?P<url>[^"]+)" class="menu-link\s*sub-menu-link">(?P<title>[^<]+)<'
def itemHook(item):
if item.fulltitle in ['Classici Disney', 'Studio Ghibli', 'Pixar']:
item.args = 'alternative'
@@ -44,19 +43,21 @@ def genre(item):
def search(item, text):
logger.debug(text)
support.info(text)
item.url = host + '/?s=' + text
try:
return movies(item)
return peliculas(item)
# Cattura la eccezione così non interrompe la ricerca globle se il canale si rompe!
except:
import sys
for line in sys.exc_info():
logger.error("search except: %s" % line)
support.logger.error("search except: %s" % line)
return []
def findvideos(item):
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
return support.server(item, url)

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

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

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

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

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

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

@@ -6,27 +6,29 @@
from core import support
from core.support import info
from core.item import Item
from platformcode import config, logger
from platformcode import config
host = config.get_channel_url()
headers = [['Referer', host]]
@support.menu
def mainlist(item):
support.info(item)
film = ['/film/',
('Generi',['', 'genres', 'genres']),
('Per Lettera',['/film-a-z/', 'genres', 'letter']),
('Anni',['', 'genres', 'year']),
('Popolari',['/trending/?get=movies', 'movies', 'populared']),
('Più Votati', ['/ratings/?get=movies', 'movies', 'populared'])
('Popolari',['/trending/?get=movies', 'peliculas', 'populared']),
('Più Votati', ['/ratings/?get=movies', 'peliculas', 'populared'])
]
tvshow = ['/serie/',
('Aggiornamenti', ['/aggiornamenti-serie/', 'movies', 'update']),
('Popolari',['/trending/?get=tv', 'movies', 'populared']),
('Più Votati', ['/ratings/?get=tv', 'movies', 'populared'])
('Aggiornamenti', ['/aggiornamenti-serie/', 'peliculas', 'update']),
('Popolari',['/trending/?get=tv', 'peliculas', 'populared']),
('Più Votati', ['/ratings/?get=tv', 'peliculas', 'populared'])
]
@@ -34,7 +36,7 @@ def mainlist(item):
]
Tvshow = [
('Show TV {bullet bold}', ['/tv-show/', 'movies', '', 'tvshow'])
('Show TV {bullet bold}', ['/tv-show/', 'peliculas', '', 'tvshow'])
]
search = ''
@@ -43,8 +45,8 @@ def mainlist(item):
@support.scrape
def movies(item):
logger.debug()
def peliculas(item):
info()
# debugBlock = True
# debug=True
@@ -53,7 +55,7 @@ def movies(item):
patron = r'<img src="(?P<thumb>[^"]+)" alt="[^"]+" ?/?>[^>]+>(?P<type>[^<]+)</span>.*?<a href="(?P<url>[^"]+)">(?P<title>.+?)[ ]?(?:\[(?P<lang>Sub-ITA)\])?</a>[^>]+>[^>]+>(?:<span class="rating">IMDb\s*(?P<rating>[^>]+)</span>)?.?(?:<span class="year">(?P<year>[0-9]+)</span>)?.*?<p>(?P<plot>.*?)</p>'
typeContentDict={'movie': ['film'], 'tvshow': ['tv']}
typeActionDict={'findvideos': ['film'], 'episodes': ['tv']}
typeActionDict={'findvideos': ['film'], 'episodios': ['tv']}
else:
if item.contentType == 'movie':
@@ -75,11 +77,11 @@ def movies(item):
patron = r'<div class="poster">\s?<a href="(?P<url>[^"]+)"><img src="(?P<thumb>[^"]+)" alt="[^"]+"><\/a>[^>]+>[^>]+>[^>]+>\s*(?P<rating>[0-9.]+)<\/div>(?:<span class="quality">(?:SUB-ITA|)?(?P<quality>|[^<]+)?<\/span>)?[^>]+>[^>]+>[^>]+>[^>]+>(?P<title>.+?)[ ]?(?:\[(?P<lang>Sub-ITA)\])?<\/a>[^>]+>[^>]+>(?P<year>[^<]+)<\/span>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<plot>[^<]+)<div'
else:
# TVSHOW
action = 'episodes'
action = 'episodios'
if item.args == 'update':
action = 'findvideos'
patron = r'<div class="poster"><img src="(?P<thumb>[^"]+)"(?:[^>]+>){2}<a href="(?P<url>[^"]+)">[^>]+>(?P<episode>[\d\-x]+)(?:[^>]+>){4}(?P<title>.+?)(?:\[(?P<lang>[SsuUbBiItTaA-]{7})\])?<(?:[^>]+>){4}(?P<quality>[HDWEBRIP-]+)?(?:.+?)?/span><p class="serie"'
pagination = True
pagination = 25
def itemHook(item):
item.contentType = 'episode'
return item
@@ -93,10 +95,10 @@ def movies(item):
@support.scrape
def episodes(item):
logger.debug()
def episodios(item):
info()
patronBlock = r'<h1>.*?[ ]?(?:\[(?P<lang>.+?\]))?</h1>.+?<div class="se-a" style="display:block">\s*<ul class="episodes">(?P<block>.*?)</ul>\s*</div>\s*</div>\s*</div>\s*</div>\s*</div>'
patronBlock = r'<h1>.*?[ ]?(?:\[(?P<lang>.+?\]))?</h1>.+?<div class="se-a" style="display:block">\s*<ul class="episodios">(?P<block>.*?)</ul>\s*</div>\s*</div>\s*</div>\s*</div>\s*</div>'
patron = r'<a href="(?P<url>[^"]+)"><img src="(?P<thumb>[^"]+)">.*?'\
'<div class="numerando">(?P<episode>[^<]+).*?<div class="episodiotitle">'\
'[^>]+>(?P<title>[^<]+)<\/a>'
@@ -106,9 +108,9 @@ def episodes(item):
@support.scrape
def genres(item):
logger.debug(item)
info(item)
action='movies'
action='peliculas'
if item.args == 'genres':
patronBlock = r'<div class="sidemenu"><h2>Genere</h2>(?P<block>.*?)/li></ul></div>'
elif item.args == 'year':
@@ -124,50 +126,50 @@ def genres(item):
def search(item, text):
logger.debug(text)
info(text)
import uuid
text = text.replace(' ', '+')
item.url = host + '/?' + uuid.uuid4().hex + '=' + uuid.uuid4().hex + '&s=' + text
try:
item.args = 'search'
return movies(item)
return peliculas(item)
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
info("%s" % line)
return []
def newest(category):
logger.debug(category)
def newest(categoria):
info(categoria)
itemlist = []
item = Item()
if category == 'movie':
if categoria == 'peliculas':
item.contentType = 'movie'
item.url = host + '/film/'
elif category == 'tvshow':
elif categoria == 'series':
item.args = 'update'
item.contentType = 'tvshow'
item.url = host + '/aggiornamenti-serie/'
## elif category == 'anime':
## elif categoria == 'anime':
## item.contentType = 'tvshow'
## item.url = host + '/anime/'
try:
item.action = 'movies'
itemlist = movies(item)
item.action = 'peliculas'
itemlist = peliculas(item)
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
info("{0}".format(line))
return []
return itemlist
def findvideos(item):
logger.debug()
info()
matches = support.match(item, patron=[r'var ilinks\s?=\s?([^;]+)',r' href="#option-\d">([^\s]+)\s*([^\s]+)']).matches
itemlist = []
list_url = []
@@ -191,7 +193,7 @@ def findvideos(item):
for i, url in enumerate(list_url):
itemlist.append(support.Item(
channel=item.channel,
# title=list_servers[i],
title=list_servers[i],
url=url,
action='play',
quality=list_quality[i],

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

@@ -1,7 +1,7 @@
{
"id": "ilgeniodellostreaming_cam",
"name": "IlGenioDelloStreaming CAM",
"active": false,
"active": true,
"language": ["ita"],
"thumbnail": "ilgeniodellostreaming.png",
"banner": "ilgeniodellostreaming.png",

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

@@ -5,8 +5,9 @@
from core import support
from core.support import info
from core.item import Item
from platformcode import config, logger
from platformcode import config
host = config.get_channel_url()
headers = [['Referer', host]]
@@ -14,7 +15,7 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
film = ['/film/',
('In Sala', ['', 'movies', 'sala']),
('In Sala', ['', 'peliculas', 'sala']),
('Generi',['', 'genres', 'genres']),
('Per Lettera',['/catalog/all', 'genres', 'az']),
('Anni',['', 'genres', 'year'])]
@@ -23,71 +24,74 @@ def mainlist(item):
@support.scrape
def movies(item):
if item.args == 'sala':
patronBlock = r'insala(?P<block>.*?)<header>'
patron = r'<img src="(?P<thumb>[^"]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*(?P<rating>[^<]+)[^>]+>[^>]+>(?P<quality>[^<]+)[^>]+>[^>]+>[^>]+>[^>]+><a href="(?P<url>[^"]+)">(?P<title>[^<]+)[^>]+>[^>]+>[^>]+>(?P<year>\d{4})'
elif item.args == 'az':
patron = r'<img src="(?P<thumb>[^"]+)[^>]+>[^>]+>[^>]+>[^>]+><a href="(?P<url>[^"]+)[^>]+>(?P<title>[^<]+)<[^>]+>[^>]+>[^>]+>.*?<span class="labelimdb">(?P<rating>[^>]+)<'
def peliculas(item):
if item.text:
data = support.httptools.downloadpage(host + '/?s=' + item.text, post={'story': item.text, 'do': 'search', 'subaction': 'search'}).data
patron = '<img src="(?P<thumb>[^"]+)(?:[^>]+>){8}\s*<a href="(?P<url>[^"]+)[^>]+>(?P<title>[^<]+)(?:[^>]+>){4}IMDb\s(?P<rating>[^<]+)(?:[^>]+>){2}(?P<year>\d+)'
else:
patron = r'<img src="(?P<thumb>[^"]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*(?P<rating>[^<]+)[^>]+>[^>]+>(?P<quality>[^<]+)[^>]+>[^>]+>[^>]+>[^>]+><a href="(?P<url>[^"]+)">(?P<title>[^<]+)[^>]+>[^>]+>[^>]+>(?P<year>\d{4})[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*(?P<plot>[^<]+)<[^>]+>'
if item.args == 'sala':
patronBlock = r'insala(?P<block>.*?)<header>'
patron = r'<img src="(?P<thumb>[^"]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*(?P<rating>[^<]+)[^>]+>[^>]+>(?P<quality>[^<]+)[^>]+>[^>]+>[^>]+>[^>]+><a href="(?P<url>[^"]+)">(?P<title>[^<]+)[^>]+>[^>]+>[^>]+>(?P<year>\d{4})'
elif item.args == 'az':
patron = r'<img src="(?P<thumb>[^"]+)[^>]+>[^>]+>[^>]+>[^>]+><a href="(?P<url>[^"]+)[^>]+>(?P<title>[^<]+)<[^>]+>[^>]+>[^>]+>.*?<span class="labelimdb">(?P<rating>[^>]+)<'
else:
patron = r'<img src="(?P<thumb>[^"]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*(?P<rating>[^<]+)[^>]+>[^>]+>(?P<quality>[^<]+)[^>]+>[^>]+>[^>]+>[^>]+><a href="(?P<url>[^"]+)">(?P<title>[^<]+)[^>]+>[^>]+>[^>]+>(?P<year>\d{4})[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*(?P<plot>[^<]+)<[^>]+>'
patronNext = 'href="([^>]+)"'
patronNext = 'href="([^>]+)"'
return locals()
@support.scrape
def genres(item):
action='movies'
action='peliculas'
if item.args == 'genres':
patronBlock = r'<div class="sidemenu">\s*<h2>Genere</h2>(?P<block>.*?)</ul'
elif item.args == 'year':
item.args = 'genres'
patronBlock = r'<div class="sidemenu">\s*<h2>Anno di uscita</h2>(?P<block>.*?)</ul'
elif item.args == 'az':
patronBlock = r'<div class="movies-letter">(?P<block>.*?)<div class="clearfix">'
patronMenu = r'<a(?:.+?)?href="(?P<url>.*?)"[ ]?>(?P<title>.*?)<\/a>'
if 'genres' in item.args:
patronGenreMenu = patronMenu
return locals()
def search(item, text):
logger.debug(text)
text = text.replace(' ', '+')
item.url = host + "/search/" + text
info(text)
item.text = text
try:
return movies(item)
return peliculas(item)
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
info("%s" % line)
return []
def newest(category):
logger.debug(category)
def newest(categoria):
info(categoria)
itemlist = []
item = Item()
if category == 'movie':
if categoria == 'peliculas':
item.contentType = 'movie'
item.url = host + '/film/'
try:
item.action = 'movies'
itemlist = movies(item)
item.action = 'peliculas'
itemlist = peliculas(item)
except:
import sys
for line in sys.exc_info():
logger.error("{0}".format(line))
info("{0}".format(line))
return []
return itemlist
def findvideos(item):
logger.debug()
info()
urls = []
data = support.match(item).data
urls += support.match(data, patron=r'id="urlEmbed" value="([^"]+)').matches

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)

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

@@ -1,11 +1,11 @@
{
"id": "italiaserie",
"name": "Italia Serie",
"active": true,
"active": false,
"language": ["ita","sub-ita"],
"thumbnail": "italiaserie.png",
"bannermenu": "italiaserie.png",
"categories": ["tvshow", "sub"],
"not_active": ["include_in_newest_movie", "include_in_newest_anime"],
"categories": ["tvshow", "vos"],
"not_active": ["include_in_newest_peliculas", "include_in_newest_anime"],
"settings": []
}

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

@@ -15,30 +15,30 @@ headers = [['Referer', host]]
@support.menu
def mainlist(item):
tvshow = ['',
('Aggiornamenti', ['/aggiornamento-episodi/', 'movies', 'update']),
('Top 10', ['/top-10', 'movies', 'top']),
('Netflix {tv submenu}', ['/genere/netflix', 'movies'])
('Aggiornamenti', ['/aggiornamento-episodi/', 'peliculas', 'update']),
('Top 10', ['/top-10', 'peliculas', 'top']),
('Netflix {tv submenu}', ['/genere/netflix', 'peliculas'])
]
return locals()
@support.scrape
def movies(item):
def peliculas(item):
# debug=True
blacklist = ['Aggiornamento Episodi']
action = 'episodes'
action = 'episodios'
patron = r'<div class="post-thumb">\s*<a href="(?P<url>[^"]+)" title="(?P<title>[^"\[]+)[^>]+>\s*<img src="(?P<thumb>[^"]+)"[^>]+>'
if item.args == 'update':
pagination = True
pagination = ''
#patron = r'br />(?:[^>]+>)?(?P<title>[^]+)[^<]+<a href="(?P<url>[^"]+)">(?P<episode>[^ ]+)\s*(?P<title2>[^\(<]+)(?:\((?P<lang>[^\)]+))?'
patron = r'br[\s/]*>(?:\s*<[^>]+>)*(?P<title>[^<]+)[^<]+<a href="(?P<url>[^"]+)"[^>]*>(?:[^,]{0,80}[, ]{2})*(?P<episode>[\S]+)\s*(?P<title2>[^\(<]+)(?:\((?P<lang>[^\)]+))?'
action = 'episodes'
action = 'episodios'
if item.args == 'top':
patron = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)</a>(?:[^>]+>){3}<img.*?src="(?P<thumb>[^"]+)"[^>]+>(?:[^>]+>){5}:\s*(?P<rating>[^/]+)'
if item.args =='a-z':
pagination = True
pagination = ''
patron = r'<li ><a href="(?P<url>[^"]+)" title="(?P<title>[^"]+)"'
patronNext = r'<a class="next page-numbers" href="(.*?)">'
@@ -50,7 +50,7 @@ def movies(item):
@support.scrape
def episodes(item):
def episodios(item):
res = support.match(item, patron=r'<a href="([^"]+)">&gt;')
if res.match: data = support.match(res.match).data
else: data = res.data
@@ -66,38 +66,38 @@ def episodes(item):
@support.scrape
def category(item):
action = 'movies'
action = 'peliculas'
patron = r'<li class="cat-item.*?href="(?P<url>[^"]+)".*?>(?P<title>.*?)</a>'
return locals()
def search(item, text):
logger.debug(text)
item.url = host + "/?s=" + text
def search(item, texto):
support.info("s=", texto)
item.url = host + "/?s=" + texto
item.contentType = 'tvshow'
try:
return movies(item)
return peliculas(item)
# Continua la ricerca in caso di errore
except:
import sys
for line in sys.exc_info():
logger.error("%s" % line)
support.info("%s" % line)
return []
def newest(category):
logger.debug("newest", category)
def newest(categoria):
support.info("newest", categoria)
itemlist = []
item = Item()
try:
if category == 'tvshow':
if categoria == "series":
item.url = host + "/aggiornamento-episodi/"
item.action = "movies"
item.action = "peliculas"
item.args = "update"
item.contentType = "episode"
itemlist = movies(item)
itemlist = peliculas(item)
if itemlist[-1].action == "movies":
if itemlist[-1].action == "peliculas":
itemlist.pop()
# Continua la ricerca in caso di errore

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

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

@@ -4,7 +4,7 @@
# ------------------------------------------------------------
import requests
from core import support
from core import support, httptools
from platformcode import logger
DRM = 'com.widevine.alpha'
@@ -24,26 +24,26 @@ headers = {
@support.menu
def mainlist(item):
top = [('Dirette {bullet bold}', ['', 'live']),
('Replay {bullet bold}', ['', 'replay_channels'])]
top = [('Dirette {bold}', ['', 'live']),
('Replay {bold}', ['', 'replay_channels'])]
menu = [('Programmi TV {bullet bold}', ['/tutti-i-programmi', 'movies', '', 'tvshow']),
('Teche La7 {bullet bold}', ['/i-protagonisti', 'movies', '', 'tvshow'])]
menu = [('Programmi TV {bullet bold}', ['/tutti-i-programmi', 'peliculas', '', 'tvshow']),
('Teche La7 {bullet bold}', ['/la7teche', 'peliculas', '', 'tvshow'])]
search = ''
return locals()
def live(item):
itemlist = [item.clone(title='La7', fulltitle='La7', url= host + '/dirette-tv', action='findvideos', forcethumb = True),
item.clone(title='La7d', fulltitle='La7d', url= host + '/live-la7d', action='findvideos', forcethumb = True)]
return support.thumb(itemlist, mode='live')
itemlist = [item.clone(title=support.typo('La7', 'bold'), fulltitle='La7', url= host + '/dirette-tv', action='findvideos', forcethumb = True, no_return=True),
item.clone(title=support.typo('La7d', 'bold'), fulltitle='La7d', url= host + '/live-la7d', action='findvideos', forcethumb = True, no_return=True)]
return support.thumb(itemlist, live=True)
def replay_channels(item):
itemlist = [item.clone(title='La7', fulltitle='La7', url= host + '/rivedila7/0/la7', action='replay_menu', forcethumb = True),
item.clone(title='La7d', fulltitle='La7d', url= host + '/rivedila7/0/la7d', action='replay_menu', forcethumb = True)]
return support.thumb(itemlist, mode='live')
itemlist = [item.clone(title=support.typo('La7', 'bold'), fulltitle='La7', url= host + '/rivedila7/0/la7', action='replay_menu', forcethumb = True),
item.clone(title=support.typo('La7d', 'bold'), fulltitle='La7d', url= host + '/rivedila7/0/la7d', action='replay_menu', forcethumb = True)]
return support.thumb(itemlist, live=True)
@support.scrape
@@ -51,7 +51,7 @@ def replay_menu(item):
action = 'replay'
patron = r'href="(?P<url>[^"]+)"><div class="giorno-text">\s*(?P<day>[^>]+)</div><[^>]+>\s*(?P<num>[^<]+)</div><[^>]+>\s*(?P<month>[^<]+)<'
def itemHook(item):
item.title = '{} {} {}'.format(item.day, item.num, item.month)
item.title = support.typo(item.day + ' ' + item.num + ' ' + item.month,'bold')
return item
return locals()
@@ -61,7 +61,7 @@ def replay(item):
action = 'findvideos'
patron = r'guida-tv"><[^>]+><[^>]+>(?P<hour>[^<]+)<[^>]+><[^>]+><[^>]+>\s*<a href="(?P<url>[^"]+)"><[^>]+><div class="[^"]+" data-background-image="(?P<t>[^"]+)"><[^>]+><[^>]+><[^>]+><[^>]+>\s*(?P<name>[^<]+)<[^>]+><[^>]+><[^>]+>(?P<plot>[^<]+)<'
def itemHook(item):
item.title = '{} - {}'.format(item.hour, item.name)
item.title = support.typo(item.hour + ' - ' + item.name,'bold')
item.contentTitle = item.fulltitle = item.show = item.name
item.thumbnail = 'http:' + item.t
item.fanart = item.thumbnail
@@ -70,76 +70,63 @@ def replay(item):
return locals()
def search(item, text):
logger.debug(text)
item.url = host + '/tutti-i-programmi'
item.search = text
try:
return movies(item)
return peliculas(item)
except:
import sys
for line in sys.exc_info():
logger.error('search log:', line)
support.info('search log:', line)
return []
@support.scrape
def movies(item):
def peliculas(item):
search = item.search
disableAll = True
action = 'episodes'
action = 'episodios'
pagination = 20
disabletmdb = True
addVideolibrary = False
downloadEnabled = False
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):
prepose = ''
if item.t.startswith('//'):
prepose = 'http:'
elif item.t.startswith('/'):
prepose = host
elif not item.t.startswith('http'):
prepose = host + '/'
item.thumbnail = prepose + item.t
item.fanart = item.thumb
return item
return locals()
@support.scrape
def episodes(item):
data = support.match(item).data
def episodios(item):
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="([^"]+)">'
videlibraryEnabled = False
addVideolibrary = False
downloadEnabled = False
def itemHook(item):
if item.Thumb: item.t = item.Thumb
item.thumbnail = 'http:' + item.t if item.t.startswith('//') else item.t if item.t else item.thumbnail
if item.Title: item.title = item.Title
if item.date:
item.title = support.re.sub(r'[Pp]untata (?:del )?\d+/\d+/\d+', '', item.title)
item.title = '{} [{}]'.format(item.title, item.date)
if item.desc: item.plot = item.desc
item.forcethumb = True
item.fanart = item.thumbnail
return item
if 'la7teche' in item.url:
patron = r'<a href="(?P<url>[^"]+)">\s*<div class="holder-bg">.*?data-background-image="(?P<thumb>[^"]+)(?:[^>]+>){4}\s*(?P<title>[^<]+)(?:(?:[^>]+>){2}\s*(?P<plot>[^<]+))?'
else:
data = str(support.match(item.url, patron=r'"home-block home-block--oggi(.*?)</section>').matches)
data += httptools.downloadpage(item.url + '/video').data
patron = r'item[^>]+>\s*<a href="(?P<url>[^"]+)">.*?image="(?P<thumb>[^"]+)(?:[^>]+>){4,5}\s*(?P<title>[\d\w][^<]+)(?:(?:[^>]+>){7}\s*(?P<title2>[\d\w][^<]+))?'
patronNext = r'<a href="([^"]+)">'
return locals()
def findvideos(item):
logger.debug()
return support.server(item, itemlist=[item.clone(server='directo', action='play')])
def play(item):
logger.debug()
support.info()
if item.livefilter:
for it in live(item):
if it.fulltitle == item.livefilter:
item = it
break
data = support.match(item).data
url = support.match(data, patron=r'''["]?dash["]?\s*:\s*["']([^"']+)["']''').match
if url:
preurl = support.match(data, patron=r'preTokenUrl = "(.+?)"').match
@@ -173,5 +160,6 @@ def play(item):
match = support.match(data, patron='/content/entry/data/(.*?).mp4').match
if match:
url = 'https://awsvodpkg.iltrovatore.it/local/hls/,/content/entry/data/' + support.match(item, patron='/content/entry/data/(.*?).mp4').match + '.mp4.urlset/master.m3u8'
item = item.clone(url=url, server='directo', action='play')
return support.servertools.find_video_items(item, data=url)
item = item.clone(title='Direct', server='directo', url=url, action='play')
return support.server(item, itemlist=[item], Download=False, Videolibrary=False)

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

@@ -1,10 +1,10 @@
{
"id": "mediasetplay",
"name": "Mediaset Play",
"name": "Mediaset play infinity [free]",
"active": true,
"language": ["ita"],
"thumbnail": "mediasetplay.png",
"banner": "mediasetplay.png",
"thumbnail": "mediasetplayinfinity.png",
"banner": "mediasetplayinfinity.png",
"categories": ["movie", "tvshow", "documentary", "live"],
"not_active": ["include_in_newest"],
"default_off": ["include_in_global_search"],

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