939 Commits

Author SHA1 Message Date
stevazi 50954f50ec add workflow gitea 2025-01-17 21:41:09 +01:00
stevazi 59ad6be60e update channels 2025-01-16 00:43:17 +01:00
stevazi b22139ba2c Tlatest 2025-01-16 00:40:27 +01:00
stevazi 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 38309 additions and 29347 deletions
+30
View File
@@ -0,0 +1,30 @@
name: Update channel domains
on:
workflow_dispatch:
schedule:
- cron: '30 17 * * *'
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@v1
with:
python-version: 3.7
- 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 }}
View File
View File
+1 -1
View File
@@ -67,7 +67,7 @@ Controlla sia presente qualcosa, tra le " " di thumbnail e banner, e che le imma
Riepilogo voci: 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) (se il sito contiene film e serie, devono esserci sia movie che tvshow, se contiene solo film, solo movie)
Regular → Executable
+5 -8
View File
@@ -1,28 +1,25 @@
name: Test Suite name: Test Suite
on: on:
workflow_dispatch: workflow_dispatch:
schedule:
- cron: '00 15 * * *'
jobs: jobs:
tests: tests:
runs-on: ubuntu-latest runs-on: macos-latest
steps: steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }} - name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1 uses: actions/setup-python@v4.3.0
with: with:
python-version: 3.8 python-version: 3.9
- name: Run tests - name: Run tests
run: | run: |
export KODI_INTERACTIVE=0
./tests/run.sh ./tests/run.sh
- name: Commit & Push changes - name: Commit & Push changes
uses: dmnemec/copy_file_to_another_repo_action@v1.0.4 uses: dmnemec/copy_file_to_another_repo_action@main
env: env:
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }} API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }}
with: with:
View File
View File
Regular → Executable
+4
View File
@@ -7,3 +7,7 @@ custom_code.json
last_commit.txt last_commit.txt
__pycache__/ __pycache__/
.vscode/settings.json .vscode/settings.json
bin/
lib/abi
tests/home/
reports/
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
+8 -7
View File
@@ -1,7 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <addon id="plugin.video.kod" name="Kodi on Demand" version="1.7.7" provider-name="KoD Team">
<addon id="plugin.video.kod" name="Kodi on Demand ALPHA" version="2.0" provider-name="KoD Team">
<requires> <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> </requires>
<extension point="xbmc.python.pluginsource" library="default.py"> <extension point="xbmc.python.pluginsource" library="default.py">
<provides>video</provides> <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> <summary lang="it">Kodi on Demand è un addon di Kodi per cercare e guardare contenuti sul web.</summary>
<assets> <assets>
<icon>resources/media/logo.png</icon> <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-1.png</screenshot>
<screenshot>resources/media/screenshot-2.png</screenshot> <screenshot>resources/media/screenshot-2.png</screenshot>
<screenshot>resources/media/screenshot-3.png</screenshot> <screenshot>resources/media/screenshot-3.png</screenshot>
</assets> </assets>
<news>- Aggiunto menu globale "opzioni di KoD" <news>- fix di routine ai canali/server
- Aggiunto canale tapmovie e server annessi
- Notifica quando il tipo di vista viene salvata (con indicazione del tipo di contenuto)
</news> </news>
<description lang="it">Naviga velocemente sul web e guarda i contenuti presenti</description> <description lang="it">Naviga velocemente sul web e guarda i contenuti presenti</description>
<disclaimer>[COLOR red]The owners and submitters to this addon do not host or distribute any of the content displayed by these addons nor do they have any affiliation with the content providers.[/COLOR] <disclaimer>[COLOR red]The owners and submitters to this addon do not host or distribute any of the content displayed by these addons nor do they have any affiliation with the content providers.[/COLOR]
Regular → Executable
+29 -38
View File
@@ -1,53 +1,44 @@
{ {
"direct": { "direct": {
"altadefinizione01": "https://www.altadefinizione01.plus", "altadefinizione01": "https://altadefinizione01.pet",
"altadefinizione01_link": "https://altadefinizione01.travel", "animealtadefinizione": "http://ww38.animealtadefinizione.it",
"animealtadefinizione": "https://www.animealtadefinizione.it",
"animeforce": "https://www.animeforce.it", "animeforce": "https://www.animeforce.it",
"animeleggendari": "https://animezeus.com", "animesaturn": "https://www.animesaturn.cx",
"animesaturn": "https://www.animesaturn.it",
"animeunity": "https://www.animeunity.tv", "animeunity": "https://www.animeunity.tv",
"animeuniverse": "https://www.animeuniverse.it", "animeworld": "https://www.animeworld.so",
"animeworld": "https://www.animeworld.tv", "aniplay": "https://aniplay.co",
"aniplay": "https://aniplay.it", "casacinema": "https://casacinema.media",
"casacinema": "https://www.casacinema.page", "cb01anime": "https://cb01new.one",
"cb01anime": "https://www.cineblog01.red", "cinemalibero": "https://cinemalibero.cafe",
"cineblog01": "https://cb01.uno",
"cinemalibero": "https://cinemalibero.surf",
"cinetecadibologna": "http://cinestore.cinetecadibologna.it", "cinetecadibologna": "http://cinestore.cinetecadibologna.it",
"dinostreaming": "https://dinostreaming.it",
"discoveryplus": "https://www.discoveryplus.com", "discoveryplus": "https://www.discoveryplus.com",
"dreamsub": "https://dreamsub.stream", "dreamsub": "https://www.animeworld.so",
"dsda": "https://www.dsda.press", "eurostreaming": "https://eurostreaming.lifestyle",
"eurostreaming": "https://eurostreaming.world", "eurostreaming_actor": "https://eurostreaming.my",
"filmigratis": "https://filmigratis.org", "filmstreaming": "https://film-streaming-ita.cam",
"guardaseriecam": "https://guardaserie.cam", "guardaseriecam": "https://guardaserie.kitchen",
"guardaserieclick": "https://www.guardaserie.builders",
"guardaserieicu": "https://guardaserie.center",
"hd4me": "https://hd4me.net", "hd4me": "https://hd4me.net",
"ilcorsaronero": "https://ilcorsaronero.link", "ilcorsaronero": "https://ilcorsaronero.link",
"ilgeniodellostreaming": "https://ilgeniodellostreaming.bet", "ilgeniodellostreaming_cam": "https://ilgeniodellostreaming.foo",
"ilgeniodellostreaming_cam": "https://ilgeniodellostreaming.city", "italiafilm": "https://italia-film.biz",
"italiaserie": "https://italiaserie.men", "mediasetplay": "https://mediasetinfinity.mediaset.it",
"mediasetplay": "https://www.mediasetplay.mediaset.it", "mondoserietv": "http://ww25.mondoserietv.club/?subid1=20230304-0434-261c-9cb0-a0044930e0a9",
"mondoserietv": "https://mondoserietv.club", "paramount": "https://www.mtv.it",
"paramount": "https://www.paramountnetwork.it", "piratestreaming": "https://piratestreaming.design",
"piratestreaming": "https://www.piratestreaming.design", "plutotv": "https://pluto.tv",
"polpotv": "https://roma.polpo.tv",
"raiplay": "https://www.raiplay.it", "raiplay": "https://www.raiplay.it",
"seriehd": "https://altadefinizionecommunity.casa", "serietvu": "http://ww1.serietvu.live/?sub1=47fb879a-5325-11ee-94a7-cc35006f53d1",
"serietvonline": "https://serietvonline.art", "streamingcommunity": "https://streamingcommunity.ooo",
"serietvsubita": "http://serietvsubita.xyz", "streamingita": "https://streamingita.click",
"serietvu": "https://www.serietvu.live", "tantifilm": "https://tantifilm.name",
"streamtime": "https://t.me/s/StreamTime", "toonitalia": "https://toonitalia.xyz"
"tantifilm": "https://www.tantifilm.cfd",
"tapmovie": "https://it.tapmovie.net",
"toonitalia": "https://toonitalia.co",
"vvvvid": "https://www.vvvvid.it"
}, },
"findhost": { "findhost": {
"altadefinizione": "https://altadefinizione.nuovo.live",
"altadefinizionecommunity": "https://altaregistrazione.net", "altadefinizionecommunity": "https://altaregistrazione.net",
"animealtadefinizione": "https://www.animealtadefinizione.it", "animealtadefinizione": "https://www.animealtadefinizione.it",
"filmpertutti": "https://filmpertuttiii.nuovo.live", "cineblog01": "https://cb01.uno",
"streamingcommunity": "https://t.me/s/StreamingCommunity_nuovo_link" "filmpertutti": "https://filmpertuttiii.nuovo.live"
} }
} }
Regular → Executable
+2 -2
View File
@@ -23,7 +23,7 @@ se vanno cancellati tutti deve rimanere la voce:
"active": false, "active": false,
"thumbnail": "", "thumbnail": "",
"banner": "", "banner": "",
"categories": ["movie", "tvshow", "anime", "sub, "documentary"], "categories": ["movie", "tvshow", "anime", "vos", "documentary"],
"not_active": ["include_in_newest"], "not_active": ["include_in_newest"],
"settings": [ "settings": [
{ {
@@ -35,7 +35,7 @@ se vanno cancellati tutti deve rimanere la voce:
"visible": false "visible": false
}, },
{ {
"id": "include_in_newest_movie", "id": "include_in_newest_peliculas",
"type": "bool", "type": "bool",
"label": "@70727", "label": "@70727",
"default": false, "default": false,
Regular → Executable
+33 -29
View File
@@ -9,7 +9,7 @@
# fix: # fix:
# 1. aggiunto pagination e sistemate alcune voci # 1. aggiunto pagination e sistemate alcune voci
# 2. modificato problemi in eccezioni # 2. modificato problemi in eccezioni
# 3. aggiunta la def select # 3. aggiunta la def check
# 4. modifica alla legenda e altre aggiunte # 4. modifica alla legenda e altre aggiunte
# Questo vuole solo essere uno scheletro per velocizzare la scrittura di un canale. # Questo vuole solo essere uno scheletro per velocizzare la scrittura di un canale.
@@ -75,19 +75,20 @@ headers = [['Referer', host]]
@support.menu @support.menu
def mainlist(item): def mainlist(item):
support.info(item)
# Ordine delle voci # Ordine delle voci
# Voce FILM, puoi solo impostare l'url # Voce FILM, puoi solo impostare l'url
film = ['', # url per la voce FILM, se possibile la pagina principale con le ultime novità film = ['', # url per la voce FILM, se possibile la pagina principale con le ultime novità
#Voce Menu,['url','action','args',contentType] #Voce Menu,['url','action','args',contentType]
('Al Cinema', ['', 'movies', '']), ('Al Cinema', ['', 'peliculas', '']),
('Generi', ['', 'genres', 'genres']), ('Generi', ['', 'genres', 'genres']),
('Per Lettera', ['', 'genres', 'letters']), ('Per Lettera', ['', 'genres', 'letters']),
('Anni', ['', 'genres', 'years']), ('Anni', ['', 'genres', 'years']),
('Qualità', ['', 'genres', 'quality']), ('Qualità', ['', 'genres', 'quality']),
('Mi sento fortunato', ['', 'genres', 'lucky']), ('Mi sento fortunato', ['', 'genres', 'lucky']),
('Popolari', ['', 'movies', '']), ('Popolari', ['', 'peliculas', '']),
('Sub-ITA', ['', 'movies', '']) ('Sub-ITA', ['', 'peliculas', ''])
] ]
# Voce SERIE, puoi solo impostare l'url # 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. # 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.!!!! # AVVERTENZE: Se il titolo è trovato nella ricerca TMDB/TVDB/Altro allora le locandine e altre info non saranno quelle recuperate nel sito.!!!!
@support.scrape @support.scrape
def movies(item): def peliculas(item):
#logger.dbg() # decommentare per attivare web_pdb support.info(item)
#support.dbg() # decommentare per attivare web_pdb
action = '' action = ''
blacklist = [''] blacklist = ['']
patron = r'' patron = r''
patronBlock = r'' patronBlock = r''
patronNext = '' patronNext = ''
pagination = True pagination = ''
#debug = True # True per testare le regex sul sito #debug = True # True per testare le regex sul sito
return locals() return locals()
@support.scrape @support.scrape
def episodes(item): def episodios(item):
#logger.dbg() support.info(item)
#support.dbg()
action = '' action = ''
blacklist = [''] blacklist = ['']
patron = r'' patron = r''
patronBlock = r'' patronBlock = r''
patronNext = '' patronNext = ''
pagination = True pagination = ''
#debug = True #debug = True
return locals() return locals()
@@ -175,14 +178,15 @@ def episodes(item):
# per genere, per anno, per lettera, per qualità ecc ecc # per genere, per anno, per lettera, per qualità ecc ecc
@support.scrape @support.scrape
def genres(item): def genres(item):
#logger.dbg() support.info(item)
#support.dbg()
action = '' action = ''
blacklist = [''] blacklist = ['']
patron = r'' patron = r''
patronBlock = r'' patronBlock = r''
patronNext = '' patronNext = ''
pagination = True pagination = ''
#debug = True #debug = True
return locals() return locals()
@@ -192,18 +196,18 @@ def genres(item):
# per quei casi dove il sito non differenzia film e/o serie e/o anime # 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 # e la ricerca porta i titoli mischiati senza poterli distinguere tra loro
# andranno modificate anche le def movies e episodes ove occorre # andranno modificate anche le def peliculas e episodios ove occorre
def select(item): def check(item):
logger.debug() support.info('select --->', item)
#logger.dbg() #support.dbg()
data = httptools.downloadpage(item.url, headers=headers).data data = httptools.downloadpage(item.url, headers=headers).data
# pulizia di data, in caso commentare le prossime 2 righe # pulizia di data, in caso commentare le prossime 2 righe
data = re.sub('\n|\t', ' ', data) data = re.sub('\n|\t', ' ', data)
data = re.sub(r'>\s+<', '> <', data) data = re.sub(r'>\s+<', '> <', data)
block = scrapertools.find_single_match(data, r'') block = scrapertools.find_single_match(data, r'')
if re.findall('', data, re.IGNORECASE): if re.findall('', data, re.IGNORECASE):
logger.debug('select = ### è una serie ###') support.info('select = ### è una serie ###')
return episodes(Item(channel=item.channel, return episodios(Item(channel=item.channel,
title=item.title, title=item.title,
fulltitle=item.fulltitle, fulltitle=item.fulltitle,
url=item.url, url=item.url,
@@ -215,7 +219,7 @@ def select(item):
############## Fondo Pagina ############## Fondo Pagina
# da adattare al canale # da adattare al canale
def search(item, text): def search(item, text):
logger.debug(text) support.info('search', item)
itemlist = [] itemlist = []
text = text.replace(' ', '+') text = text.replace(' ', '+')
item.url = host + '/index.php?do=search&story=%s&subaction=search' % (text) 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. # se il canale è solo film, si può omettere, altrimenti bisgona aggiungerlo e discriminare.
item.contentType = item.contentType item.contentType = item.contentType
try: try:
return movies(item) return peliculas(item)
# Se captura la excepcion, para no interrumpir al buscador global si un canal falla # Se captura la excepcion, para no interrumpir al buscador global si un canal falla
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error('search log:', line) info('search log:', line)
return [] return []
# da adattare al canale # da adattare al canale
# inserire newest solo se il sito ha la pagina con le ultime novità/aggiunte # inserire newest solo se il sito ha la pagina con le ultime novità/aggiunte
# altrimenti NON inserirlo # altrimenti NON inserirlo
def newest(category): def newest(categoria):
logger.debug(category) support.info('newest ->', categoria)
itemlist = [] itemlist = []
item = Item() item = Item()
try: try:
if category == 'movie': if categoria == 'peliculas':
item.url = host item.url = host
item.action = 'movies' item.action = 'peliculas'
itemlist = movies(item) itemlist = peliculas(item)
if itemlist[-1].action == 'movies': if itemlist[-1].action == 'peliculas':
itemlist.pop() itemlist.pop()
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.debug('newest log: ', {0}.format(line)) support.info('newest log: ', {0}.format(line))
return [] return []
return itemlist return itemlist
@@ -261,5 +265,5 @@ def newest(category):
# sia per i siti con hdpass # sia per i siti con hdpass
#support.server(item, data='', itemlist=[], headers='', AutoPlay=True, CheckLinks=True) #support.server(item, data='', itemlist=[], headers='', AutoPlay=True, CheckLinks=True)
def findvideos(item): def findvideos(item):
logger.debug() support.info('findvideos ->', item)
return support.server(item, headers=headers) return support.server(item, headers=headers)
+20
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
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)
Regular → Executable
-2
View File
@@ -3,7 +3,6 @@
import os import os
import sys import sys
# Appends the main plugin dir to the PYTHONPATH if an internal package cannot be imported. # 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.*" # Examples: In Plex Media Server all modules are under "Code.*" package, and in Enigma2 under "Plugins.Extensions.*"
try: try:
@@ -11,4 +10,3 @@ try:
import core import core
except: except:
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))) sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")))
Regular → Executable
View File
Regular → Executable
+17 -14
View File
@@ -4,7 +4,7 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
import random import random
from core import httptools, support, config from core import httptools, support
from platformcode import logger from platformcode import logger
host = 'https://www.accuradio.com' host = 'https://www.accuradio.com'
@@ -12,29 +12,32 @@ api_url = host + '/c/m/json/{}/'
headers = [['Referer', host]] headers = [['Referer', host]]
def mainlist(item): def mainlist(item):
js = httptools.downloadpage(api_url.format('brands')).json
itemlist = [] itemlist = []
item.action = 'movies' item.action = 'peliculas'
js = httptools.downloadpage(api_url.format('brands')).json 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( itemlist.append(
item.clone(url= '{}/{}'.format(host,it.get('canonical_url','')), item.clone(url= '{}/{}'.format(host,it.get('canonical_url','')),
extraInfo = it.get('channels',''), title=support.typo(it['name'],'italic') + support.typo(it.get('channels',''),'_ [] color kod')
title=it['name'], ))
thumbnail = support.thumb('music') 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) support.channel_config(item, itemlist)
return itemlist return itemlist
@support.scrape @support.scrape
def movies(item): def peliculas(item):
tmdbEnabled = False # debug=True
action = 'playradio' action = 'playradio'
patron = r'data-id="(?P<id>[^"]+)"\s*data-oldid="(?P<oldid>[^"]+)".*?data-name="(?P<title>[^"]+)(?:[^>]+>){5}<img class="[^"]+"\s*src="(?P<thumb>[^"]+)(?:[^>]+>){6}\s*(?P<plot>[^<]+)' patron = r'data-id="(?P<id>[^"]+)"\s*data-oldid="(?P<oldid>[^"]+)".*?data-name="(?P<title>[^"]+)(?:[^>]+>){2}<img src="(?P<thumb>[^"]+)(?:[^>]+>){16}\s*(?P<plot>[^<]+)'
return locals() return locals()
@@ -66,7 +69,7 @@ def playradio(item):
def search(item, text): def search(item, text):
logger.debug(text) support.info(text)
item.url = host + '/search/' + text item.url = host + '/search/' + text
itemlist = [] itemlist = []
try: 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 artists = support.match(data, patronBlock=r'artistResults(.*?)</ul', patron=r'href="(?P<url>[^"]+)"\s*>(?P<title>[^<]+)').matches
if artists: if artists:
for url, artist in 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 item.data = data
itemlist += movies(item) itemlist += peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
+11
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
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
Regular → Executable
+1 -1
View File
@@ -5,6 +5,6 @@
"active": true, "active": true,
"thumbnail": "altadefinizione01.png", "thumbnail": "altadefinizione01.png",
"banner": "altadefinizione01.png", "banner": "altadefinizione01.png",
"categories": ["movie", "sub"], "categories": ["movie", "vos"],
"settings": [] "settings": []
} }
Regular → Executable
+50 -30
View File
@@ -2,11 +2,22 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
# Canale per altadefinizione01 # 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 import scrapertools, httptools, support
from core.item import Item from core.item import Item
from platformcode import config, logger from platformcode import config, logger
# def findhost(url): # def findhost(url):
# data = httptools.downloadpage(url).data # data = httptools.downloadpage(url).data
# host = scrapertools.find_single_match(data, '<div class="elementor-button-wrapper"> <a href="([^"]+)"') # host = scrapertools.find_single_match(data, '<div class="elementor-button-wrapper"> <a href="([^"]+)"')
@@ -21,81 +32,86 @@ headers = [['Referer', host]]
def mainlist(item): def mainlist(item):
film = [ film = [
('Al Cinema', ['/cinema/', 'movies', 'pellicola']), ('Al Cinema', ['/cinema/', 'peliculas', 'pellicola']),
('Ultimi Aggiornati-Aggiunti', ['','movies', 'update']), ('Ultimi Aggiornati-Aggiunti', ['','peliculas', 'update']),
('Generi', ['', 'genres', 'genres']), ('Generi', ['', 'genres', 'genres']),
('Lettera', ['/catalog/a/', 'genres', 'az']), ('Lettera', ['/catalog/a/', 'genres', 'orderalf']),
('Anni', ['', 'genres', 'years']), ('Anni', ['', 'genres', 'years']),
('Sub-ITA', ['/sub-ita/', 'movies', 'pellicola']) ('Sub-ITA', ['/sub-ita/', 'peliculas', 'pellicola'])
] ]
return locals() return locals()
@support.scrape @support.scrape
def movies(item): def peliculas(item):
support.info('peliculas', item)
## deflang = 'ITA'
action="findvideos" 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>[^<]+)' 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": if item.args == "search":
patronBlock = r'</script> <div class="boxgrid caption">(?P<block>.*)<div id="right_bar">' patronBlock = r'</script> <div class="boxgrid caption">(?P<block>.*)<div id="right_bar">'
elif item.args == 'update': elif item.args == 'update':
patronBlock = r'<div class="widget-title">Ultimi Film Aggiunti/Aggiornati</div>(?P<block>.*?)<div id="alt_menu">' 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>[^"]+)' 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': patronNext = '' # non ha nessuna paginazione
elif item.args == 'orderalf':
patron = r'<td class="mlnh-thumb"><a href="(?P<url>[^"]+)".*?src="(?P<thumb>[^"]+)"' \ patron = r'<td class="mlnh-thumb"><a href="(?P<url>[^"]+)".*?src="(?P<thumb>[^"]+)"' \
'.+?[^>]+>[^>]+ [^>]+[^>]+ [^>]+>(?P<title>[^<]+).*?[^>]+>(?P<year>\d{4})<' \ '.+?[^>]+>[^>]+ [^>]+[^>]+ [^>]+>(?P<title>[^<]+).*?[^>]+>(?P<year>\d{4})<' \
'[^>]+>[^>]+>(?P<quality>[A-Z]+)[^>]+> <td class="mlnh-5">(?P<lang>.*?)</td>' '[^>]+>[^>]+>(?P<quality>[A-Z]+)[^>]+> <td class="mlnh-5">(?P<lang>.*?)</td>'
else: else:
patronBlock = r'<div class="cover_kapsul ml-mask">(?P<block>.*)<div class="page_nav">' patronBlock = r'<div class="cover_kapsul ml-mask">(?P<block>.*)<div class="page_nav">'
patronNext = r'<a href="([^"]+)">&raquo;' # debug = True
patronTotalPages = r'>(\d+)(?:[^>]+>){3}&raquo;'
return locals() return locals()
@support.scrape @support.scrape
def genres(item): def genres(item):
action = "movies" support.info('genres',item)
action = "peliculas"
blacklist = ['Altadefinizione01'] blacklist = ['Altadefinizione01']
if item.args == 'genres': if item.args == 'genres':
patronBlock = r'<ul class="kategori_list">(?P<block>.*?)<div class="tab-pane fade" id="wtab2">' 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': elif item.args == 'years':
patronBlock = r'<ul class="anno_list">(?P<block>.*?)</li> </ul> </div>' patronBlock = r'<ul class="anno_list">(?P<block>.*?)</li> </ul> </div>'
patronMenu = '<li><a href="(?P<url>[^"]+)">(?P<title>.*?)</a>' 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">' patronBlock = r'<div class="movies-letter">(?P<block>.*?)<div class="clearfix">'
patronMenu = '<a title=.*?href="(?P<url>[^"]+)"><span>(?P<title>.*?)</span>' patronMenu = '<a title=.*?href="(?P<url>[^"]+)"><span>(?P<title>.*?)</span>'
#debug = True
return locals() return locals()
@support.scrape @support.scrape
def az(item): def orderalf(item):
support.info('orderalf',item)
action = 'findvideos' action = 'findvideos'
patron = r'<td class="mlnh-thumb"><a href="(?P<url>[^"]+)".*?src="(?P<thumb>[^"]+)"'\ patron = r'<td class="mlnh-thumb"><a href="(?P<url>[^"]+)".*?src="(?P<thumb>[^"]+)"'\
'.+?[^>]+>[^>]+ [^>]+[^>]+ [^>]+>(?P<title>[^<]+).*?[^>]+>(?P<year>\d{4})<'\ '.+?[^>]+>[^>]+ [^>]+[^>]+ [^>]+>(?P<title>[^<]+).*?[^>]+>(?P<year>\d{4})<'\
'[^>]+>[^>]+>(?P<quality>[A-Z]+)[^>]+> <td class="mlnh-5">(?P<lang>.*?)</td>' '[^>]+>[^>]+>(?P<quality>[A-Z]+)[^>]+> <td class="mlnh-5">(?P<lang>.*?)</td>'
patronNext = r'<span>[^<]+</span>[^<]+<a href="(.*?)">'
return locals() return locals()
def search(item, text): def search(item, text):
logger.debug(text) support.info(item, text)
itemlist = [] itemlist = []
text = text.replace(" ", "+") text = text.replace(" ", "+")
item.url = host + "/index.php?do=search&story=%s&subaction=search" % (text) item.url = host + "/index.php?do=search&story=%s&subaction=search" % (text)
item.args = "search" item.args = "search"
try: try:
return movies(item) return peliculas(item)
# Cattura la eccezione così non interrompe la ricerca globle se il canale si rompe! # Cattura la eccezione così non interrompe la ricerca globle se il canale si rompe!
except: except:
import sys import sys
@@ -103,18 +119,18 @@ def search(item, text):
logger.error("search except: %s" % line) logger.error("search except: %s" % line)
return [] return []
def newest(category): def newest(categoria):
logger.debug(category) support.info(categoria)
itemlist = [] itemlist = []
item = Item() item = Item()
try: try:
if category == "movie": if categoria == "peliculas":
item.url = host item.url = host
item.action = "movies" item.action = "peliculas"
item.contentType = 'movie' item.contentType = 'movie'
itemlist = movies(item) itemlist = peliculas(item)
if itemlist[-1].action == "movies": if itemlist[-1].action == "peliculas":
itemlist.pop() itemlist.pop()
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
@@ -125,13 +141,17 @@ def newest(category):
return itemlist return itemlist
def findvideos(item): def findvideos(item):
logger.debug() support.info('findvideos', item)
data = httptools.downloadpage(item.url).data 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: if iframe:
item.url = iframe item.url = iframe
return support.server(item) return support.server(item)
else:
itemlist = [item.clone(action="play", url=srv[0], quality=srv[1]) for srv in support.match(item, patron='<a href="#" data-link="([^"]+).*?<span class="d">([^<]+)').matches] # TODO: verificare se si puo' reinsierire il trailer youtube
return support.server(item, itemlist=itemlist, headers=headers) #itemlist = [item.clone(action="play", url=srv[0], quality=srv[1]) for srv in support.match(item, patron='<a href="#" data-link="([^"]+).*?<span class="d">([^<]+)').matches]
#itemlist = support.server(item, itemlist=itemlist, headers=headers)
#return itemlist
-10
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" :[]
}
-96
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)
+3 -3
View File
@@ -1,11 +1,11 @@
{ {
"id": "altadefinizioneclick", "id": "altadefinizioneclick",
"name": "AltadefinizioneClick", "name": "AltadefinizioneClick",
"active": true, "active": false,
"language": ["ita","sub-ita"], "language": ["ita","sub-ita"],
"thumbnail": "altadefinizioneclick.png", "thumbnail": "altadefinizioneclick.png",
"bannermenu": "altadefinizioneciclk.png", "bannermenu": "altadefinizioneciclk.png",
"categories": ["tvshow","movie","sub"], "categories": ["tvshow","movie","vos"],
"not_active":["include_in_newest_tvshow"], "not_active":["include_in_newest_series"],
"settings": [] "settings": []
} }
Regular → Executable
+117 -144
View File
@@ -1,178 +1,151 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# ------------------------------------------------------------ # ------------------------------------------------------------
# Canale per altadefinizioneclick # Canale per Altadefinizione Click
# ---------------------------------------------------------- # ----------------------------------------------------------
from platformcode import logger
from core import support from core import support
from core.item import Item from platformcode import config, logger
from platformcode import config
def findhost(url): def findhost(url):
data = support.httptools.downloadpage(url).data return support.match(url, patron=r'<div class="elementor-button-wrapper">\s*<a href="([^"]+)"').match
host = support.scrapertools.find_single_match(data, '<div class="elementor-button-wrapper">\s*<a href="([^"]+)"')
return host
host = config.get_channel_url(findhost) 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 @support.menu
def mainlist(item): def mainlist(item):
film = ['', logger.debug(item)
('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'])
]
tvshow = ['/serie-tv/'] film = ['/type/movie',
('Generi', ['/type/movie', 'genres', 'genres']),
('Anni', ['/type/movie', 'genres', 'year']),]
search = '' tvshow = ['/serie-tv/tvshow',
return locals() ('Generi', ['/serie-tv/tvshow', 'genres', 'genres']),
('Anni', ['/serie-tv/tvshow', 'genres', 'year'])]
@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'
return locals() 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 @support.scrape
def genres(item): def genres(item):
action = 'movies' logger.debug(item)
patronGenreMenu = r'<li><a href="(?P<url>[^"]+)">(?P<title>[^<]+)<' data = support.httptools.downloadpage(item.url, cloudscraper=True).data
blacklist= ['Film', 'Serie TV']
if item.args == 'genres': if item.args == 'genres':
patronBlock = r'<ul class="listSubCat" id="Film">(?P<block>.*)<ul class="listSubCat" id="Anno">' categories ={}
elif item.args == 'years': res = support.match(host + '/cerca', patron=r'for="cat-(\d+)[^>]+>([^<]+)').matches
patronBlock = r'<ul class="listSubCat" id="Anno">(?P<block>.*)<ul class="listSubCat" id="Qualita">' for _id, name in res:
elif item.args == 'quality': categories[name] = _id
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'
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() 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 @support.scrape
def episodes(item): def peliculas(item):
data = item.data 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): if item.contentType == 'movie':
itemlist.sort(key=lambda item: (item.infoLabels['season'], item.infoLabels['episode'])) action = 'findvideos'
return itemlist 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() 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): def findvideos(item):
logger.debug() itemlist = []
return support.hdpass_get_servers(item, item.data) 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)
+13 -3
View File
@@ -2,10 +2,10 @@
"id": "altadefinizionecommunity", "id": "altadefinizionecommunity",
"name": "Altadefinizione Community", "name": "Altadefinizione Community",
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"active": true, "active": false,
"thumbnail": "altadefinizionecommunity.png", "thumbnail": "altadefinizionecommunity.png",
"banner": "", "banner": "",
"categories": ["movie", "tvshow", "sub"], "categories": ["movie", "tvshow", "vos"],
"not_active": ["include_in_newest"], "not_active": ["include_in_newest"],
"settings": [ "settings": [
{ {
@@ -23,5 +23,15 @@
"label": "password", "label": "password",
"type": "text", "type": "text",
"visible": true "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"]
}
]
} }
+29 -28
View File
@@ -22,7 +22,7 @@ if host.endswith('/'):
host = host[:-1] host = host[:-1]
headers = {'Referer': host} 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 @support.menu
@@ -49,7 +49,7 @@ def search(item, text):
item.args = 'search' item.args = 'search'
item.url = host + "/search?s={}&f={}".format(text.replace(' ', '+'), item.contentType) item.url = host + "/search?s={}&f={}".format(text.replace(' ', '+'), item.contentType)
try: try:
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
@@ -87,19 +87,19 @@ def genres(item):
patronMenu = r'quality/(?P<quality_id>[^"]+)">(?P<title>[^<]+)' patronMenu = r'quality/(?P<quality_id>[^"]+)">(?P<title>[^<]+)'
patronBlock = r'Risoluzione(?P<block>.*?)</ul>' patronBlock = r'Risoluzione(?P<block>.*?)</ul>'
action = 'movies' action = 'peliculas'
return locals() return locals()
@support.scrape @support.scrape
def movies(item): def peliculas(item):
item.quality = 'HD' item.quality = 'HD'
json = {} json = {}
if not item.page: item.page = 1 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} params ={'type':item.contentType, 'anno':item.year_id, 'quality':item.quality_id, 'cat':item.cat_id, 'order':order, 'page':item.page}
# debug = True # debug = True
action = 'findvideos' if item.contentType == 'movie' else 'episodes' action = 'findvideos' if item.contentType == 'movie' else 'episodios'
try: try:
# support.dbg() # support.dbg()
@@ -132,14 +132,15 @@ def movies(item):
cat_id = support.match(data, patron=r''''cat':"(\d+)"''').match cat_id = support.match(data, patron=r''''cat':"(\d+)"''').match
if cat_id: item.cat_id = cat_id if cat_id: item.cat_id = cat_id
item.page += 1 item.page += 1
support.nextPage(itemlist, item, function_or_level='movies') support.nextPage(itemlist, item, function_or_level='peliculas')
return itemlist return itemlist
return locals() return locals()
@support.scrape @support.scrape
def episodes(item): def episodios(item):
registerOrLogin()
logger.debug(item) logger.debug(item)
# debug = True # debug = True
data = item.data data = item.data
@@ -168,9 +169,9 @@ def findvideos(item):
def play(item): def play(item):
if host in item.url: # intercetto il server proprietario if host in item.url: # intercetto il server proprietario
# if registerOrLogin(): # 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: # else:
# platformtools.playCanceled = True # platformtools.play_canceled = True
# return [] # return []
else: else:
return [item] return [item]
@@ -180,9 +181,9 @@ def resolve_url(item):
registerOrLogin() registerOrLogin()
if '/watch-unsubscribed' not in item.url and '/watch-external' not in item.url: 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="([^"]+)') 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.data = playWindow.data
item.url = videoUrl.replace('/watch-unsubscribed', '/watch-external') item.url = video_url.replace('/watch-unsubscribed', '/watch-external')
return item return item
@@ -195,33 +196,33 @@ def login():
logger.info('Login in corso') logger.info('Login in corso')
post = {'_token': '', post = {'_token': '',
'form_action':'login', 'form_action':'login',
'email': config.getSetting('username', channel='altadefinizionecommunity'), 'email': config.get_setting('username', channel='altadefinizionecommunity'),
'password':config.getSetting('password', channel='altadefinizionecommunity')} 'password':config.get_setting('password', channel='altadefinizionecommunity')}
r = support.httptools.downloadpage(host + '/login', post=post, headers={'referer': host}, cloudscraper=True) 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: 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 False
return 'id="logged"' in r.data return 'id="logged"' in r.data
def registerOrLogin(): 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(): if login():
return True 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?', 'Questo server necessita di un account, ne hai già uno oppure vuoi tentare una registrazione automatica?',
yeslabel='Accedi', nolabel='Tenta registrazione', customlabel='Annulla') yeslabel='Accedi', nolabel='Tenta registrazione', customlabel='Annulla')
if action == 1: # accedi if action == 1: # accedi
from specials import setting from specials import setting
from core.item import Item from core.item import Item
user_pre = config.getSetting('username', channel='altadefinizionecommunity') user_pre = config.get_setting('username', channel='altadefinizionecommunity')
password_pre = config.getSetting('password', channel='altadefinizionecommunity') password_pre = config.get_setting('password', channel='altadefinizionecommunity')
setting.channel_config(Item(config='altadefinizionecommunity')) setting.channel_config(Item(config='altadefinizionecommunity'))
user_post = config.getSetting('username', channel='altadefinizionecommunity') user_post = config.get_setting('username', channel='altadefinizionecommunity')
password_post = config.getSetting('password', channel='altadefinizionecommunity') password_post = config.get_setting('password', channel='altadefinizionecommunity')
if user_pre != user_post or password_pre != password_post: if user_pre != user_post or password_pre != password_post:
return registerOrLogin() return registerOrLogin()
@@ -235,7 +236,7 @@ def registerOrLogin():
randPsw = ''.join(random.choice(string.ascii_letters + string.digits) for i in range(10)) randPsw = ''.join(random.choice(string.ascii_letters + string.digits) for i in range(10))
logger.debug('email: ' + mailbox.address) logger.debug('email: ' + mailbox.address)
logger.debug('pass: ' + randPsw) 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: if not reg:
return False return False
regPost = httptools.downloadpage(register_url, post={'email': reg['email'], 'password': reg['password']}, cloudscraper=True) 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: if regPost.url == register_url:
error = scrapertools.htmlclean(scrapertools.find_single_match(regPost.data, 'Impossibile proseguire.*?</div>')) error = scrapertools.htmlclean(scrapertools.find_single_match(regPost.data, 'Impossibile proseguire.*?</div>'))
error = scrapertools.unescape(scrapertools.re.sub('\n\s+', ' ', error)) error = scrapertools.unescape(scrapertools.re.sub('\n\s+', ' ', error))
platformtools.dialogOk('AltadefinizioneCommunity', error) platformtools.dialog_ok('AltadefinizioneCommunity', error)
return False return False
if reg['email'] == mailbox.address: if reg['email'] == mailbox.address:
if "L'indirizzo email risulta già registrato" in regPost.data: if "L'indirizzo email risulta già registrato" in regPost.data:
# httptools.downloadpage(baseUrl + '/forgotPassword', post={'email': reg['email']}) # 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 return False
mail = mailbox.waitForMail() mail = mailbox.waitForMail()
if mail: if mail:
checkUrl = scrapertools.find_single_match(mail.body, '<a href="([^"]+)[^>]+>Verifica').replace(r'\/', '/') checkUrl = scrapertools.find_single_match(mail.body, '<a href="([^"]+)[^>]+>Verifica').replace(r'\/', '/')
logger.debug('CheckURL: ' + checkUrl) logger.debug('CheckURL: ' + checkUrl)
httptools.downloadpage(checkUrl, cloudscraper=True) httptools.downloadpage(checkUrl, cloudscraper=True)
config.setSetting('username', mailbox.address, channel='altadefinizionecommunity') config.set_setting('username', mailbox.address, channel='altadefinizionecommunity')
config.setSetting('password', randPsw, channel='altadefinizionecommunity') config.set_setting('password', randPsw, channel='altadefinizionecommunity')
platformtools.dialogOk('AltadefinizioneCommunity', platformtools.dialog_ok('AltadefinizioneCommunity',
'Registrato automaticamente con queste credenziali:\nemail:' + mailbox.address + '\npass: ' + randPsw) 'Registrato automaticamente con queste credenziali:\nemail:' + mailbox.address + '\npass: ' + randPsw)
else: else:
platformtools.dialogOk('AltadefinizioneCommunity', 'Impossibile registrarsi automaticamente') platformtools.dialog_ok('AltadefinizioneCommunity', 'Impossibile registrarsi automaticamente')
return False return False
else: 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') + ' e clicca sul link. Premi ok quando fatto')
logger.debug('Registrazione completata') logger.debug('Registrazione completata')
else: else:
+3 -3
View File
@@ -1,11 +1,11 @@
{ {
"id": "animealtadefinizione", "id": "animealtadefinizione",
"name": "AnimealtaDefinizione", "name": "AnimealtAdefinizione",
"active": true, "active": false,
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"thumbnail": "animealtadefinizione.png", "thumbnail": "animealtadefinizione.png",
"banner": "animealtadefinizione.png", "banner": "animealtadefinizione.png",
"categories": ["anime", "sub"], "categories": ["anime", "sub-ita"],
"default_off": ["include_in_newest"], "default_off": ["include_in_newest"],
"settings": [ "settings": [
{ {
Regular → Executable
+33 -35
View File
@@ -3,16 +3,14 @@
# Canale per animealtadefinizione # Canale per animealtadefinizione
# ---------------------------------------------------------- # ----------------------------------------------------------
from platformcode import platformtools
from core import support from core import support
from platformcode import logger
host = support.config.get_channel_url() host = support.config.get_channel_url()
headers = [['Referer', host]] headers = [['Referer', host]]
perpage_list = ['20','30','40','50','60','70','80','90','100'] perpage_list = ['20','30','40','50','60','70','80','90','100']
perpage = perpage_list[support.config.getSetting('perpage' , 'animealtadefinizione')] perpage = perpage_list[support.config.get_setting('perpage' , 'animealtadefinizione')]
epPatron = r'<td>\s*(?P<title>[^<]+)[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"' epPatron = r'<td>\s*(?P<title>[^<]+)[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>\s*<img[^>]+/Streaming'
@support.menu @support.menu
@@ -21,92 +19,91 @@ def mainlist(item):
('Tipo',['', 'menu', 'Anime']), ('Tipo',['', 'menu', 'Anime']),
('Anno',['', 'menu', 'Anno']), ('Anno',['', 'menu', 'Anno']),
('Genere', ['', 'menu','Genere']), ('Genere', ['', 'menu','Genere']),
('Ultimi Episodi',['', 'movies', 'last'])] ('Ultimi Episodi',['', 'peliculas', 'last'])]
return locals() return locals()
@support.scrape @support.scrape
def menu(item): 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>' 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>[^<]+)<' patronMenu = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)<'
if 'genere' in item.args.lower():
patronGenreMenu = patronMenu
return locals() return locals()
def search(item, text): def search(item, texto):
logger.debug(text) support.info(texto)
item.search = text item.search = texto
try: try:
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("%s" % line) support.logger.error("%s" % line)
return [] return []
def newest(category): def newest(categoria):
logger.debug(category) support.info(categoria)
item = support.Item() item = support.Item()
try: try:
if category == "anime": if categoria == "anime":
item.url = host item.url = host
item.args = "last" item.args = "last"
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("{0}".format(line)) support.logger.error("{0}".format(line))
return [] return []
@support.scrape @support.scrape
def movies(item): def peliculas(item):
if '/movie/' in item.url: if '/movie/' in item.url:
item.contentType = 'movie' item.contentType = 'movie'
action='findvideos' action='findvideos'
elif item.args == 'last': elif item.args == 'last':
item.contentType = 'episode' item.contentType = 'episode'
action='findvideos' action='episodios'
else: else:
item.contentType = 'tvshow' item.contentType = 'tvshow'
action='episodes' action='episodios'
if item.search: if item.search:
query = 's' query = 's'
searchtext = item.search searchtext = item.search
else: else:
query='category_name' query='category_name'
searchtext = item.url.split('/')[-2] searchtext = item.url.split('/')[-2]
if not item.pag: item.pag = 1
page = 1 if not item.page else item.page # debug = True
anime = True
numerationEnabled = 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('\\','')
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)
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' 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']} typeContentDict = {'movie':['movie']}
typeActionDict = {'findvideos':['movie']} typeActionDict = {'findvideos':['movie']}
def itemHook(item):
item.url = support.re.sub('episodio-[0-9-]+', '', item.url)
return item
def itemlistHook(itemlist): def itemlistHook(itemlist):
if item.search: if item.search:
itemlist = [ it for it in itemlist if ' Episodio ' not in it.title ] itemlist = [ it for it in itemlist if ' Episodio ' not in it.title ]
if len(itemlist) == int(perpage): 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 itemlist
return locals() return locals()
@support.scrape @support.scrape
def episodes(item): def episodios(item):
numerationEnabled = True anime = True
pagination = True # debug = True
pagination = int(perpage)
patron = epPatron patron = epPatron
return locals() return locals()
@@ -116,9 +113,10 @@ def findvideos(item):
if item.contentType == 'movie': if item.contentType == 'movie':
matches = support.match(item, patron=epPatron).matches matches = support.match(item, patron=epPatron).matches
for title, url in matches: for title, url in matches:
# support.dbg()
get_video_list(item, url, title, itemlist) get_video_list(item, url, title, itemlist)
else: 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) return support.server(item, itemlist=itemlist)
Regular → Executable
+1 -1
View File
@@ -2,7 +2,7 @@
"id": "animeforce", "id": "animeforce",
"name": "AnimeForce", "name": "AnimeForce",
"language": ["ita"], "language": ["ita"],
"active": true, "active": false,
"thumbnail": "animeforce.png", "thumbnail": "animeforce.png",
"banner": "animeforce.png", "banner": "animeforce.png",
"categories": ["anime"], "categories": ["anime"],
Regular → Executable
+78 -89
View File
@@ -3,8 +3,7 @@
# Canale per AnimeForce # Canale per AnimeForce
# ------------------------------------------------------------ # ------------------------------------------------------------
from core import scrapertools, support from core import support
from platformcode import logger
host = support.config.get_channel_url() host = support.config.get_channel_url()
headers = [['Referer', host]] headers = [['Referer', host]]
@@ -12,85 +11,83 @@ headers = [['Referer', host]]
@support.menu @support.menu
def mainlist(item): def mainlist(item):
anime = ['/lista-anime/', anime = ['/anime',
('In Corso',['/anime/anime-status/in-corso/', 'movies', 'status']), ('In Corso',['/anime/anime-status/in-corso/', 'peliculas', 'status']),
('Completi',['/anime/anime-status/completo/', 'movies', 'status']), ('Completi',['/anime/anime-status/completo/', 'peliculas', 'status']),
('Genere',['/anime', 'submenu', 'genre']), ('Genere',['/anime', 'submenu', 'genre']),
('Anno',['/anime', 'submenu', 'anime-year']), ('Anno',['/anime', 'submenu', 'anime-year']),
('Tipologia',['/anime', 'submenu', 'anime-type']), ('Tipologia',['/anime', 'submenu', 'anime-type']),
('Stagione',['/anime', 'submenu', 'anime-season']), ('Stagione',['/anime', 'submenu', 'anime-season']),
('Ultime Serie',['/category/anime/articoli-principali/','movies','last']) ('Ultime Serie',['/category/anime/articoli-principali/','peliculas','last'])
] ]
return locals() return locals()
@support.scrape @support.scrape
def submenu(item): def submenu(item):
action = 'movies' action = 'peliculas'
patronBlock = r'data-taxonomy="' + item.args + r'"(?P<block>.*?)</select' patronBlock = r'data-taxonomy="' + item.args + r'"(?P<block>.*?)</select'
patronMenu = r'<option class="level-\d+ (?P<u>[^"]+)"[^>]+>(?P<title>[^(]+)[^\(]+\((?P<num>\d+)' patronMenu = r'<option class="level-\d+ (?P<url>[^"]+)"[^>]+>(?P<t>[^(]+)[^\(]+\((?P<num>\d+)'
if 'genre' in item.args:
patronGenreMenu = patronMenu
def itemHook(item): def itemHook(item):
item.url += host + '/anime/' + item.args + '/' + item.u if not item.url.startswith('http'):
# item.title = support.typo(item.t, 'bold') item.url = host + '/anime/' + item.args + '/' + item.url
item.title = support.typo(item.t, 'bold')
return item return item
return locals() return locals()
def newest(category): def newest(categoria):
logger.debug(category) support.info(categoria)
itemlist = [] itemlist = []
item = support.Item() item = support.Item()
try: try:
if category == "anime": if categoria == "anime":
item.contentType = 'tvshow' item.contentType = 'tvshow'
item.url = host item.url = host
item.args = 'newest' item.args = 'newest'
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("{0}".format(line)) support.logger.error("{0}".format(line))
return [] return []
return itemlist return itemlist
def search(item, text): def search(item, text):
logger.debug(text) support.info('search',text)
item.search = text item.search = text
item.url = host + '/lista-anime/' item.url = host + '/lista-anime/'
item.contentType = 'tvshow' item.contentType = 'tvshow'
try: try:
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("%s" % line) support.logger.error("%s" % line)
return [] return []
@support.scrape @support.scrape
def movies(item): def peliculas(item):
search = item.search search = item.search
numerationEnabled = True anime = True
if 'movie' in item.url: action = 'check'
action = 'findvideos'
else:
action = 'check'
if not item.args: patron = r'<a href="(?P<url>[^"]+)"[^>]+>\s*<img src="(?P<thumb>[^"]+)" alt="(?P<title>.*?)(?: Sub| sub| SUB|")'
pagination = True
patron = r'<a\s*href="(?P<url>[^"]+)"\s*title="(?P<title>[^"]+)">' if search:
else: patron = r'<a href="(?P<url>[^"]+)"\s*title="(?P<title>.*?)(?: Sub| sub| SUB|")'
patron = r'<a href="(?P<url>[^"]+)"[^>]+>\s*<img src="(?P<thumb>[^"]+)" alt="(?P<title>.*?)(?: Sub| sub| SUB|")'
if item.args == 'newest': item.action = 'findvideos' if item.args == 'newest': item.action = 'findvideos'
patronNext = '<li class="page-item disabled">(?:[^>]+>){4}<a class="page-link" href="([^"]+)'
def itemHook(item): def itemHook(item):
if 'sub-ita' in item.url: if 'sub-ita' in item.url:
if item.args != 'newest': item.title = item.title + support.typo('Sub-ITA','_ [] color kod')
item.contentLanguage = 'Sub-ITA' item.contentLanguage = 'Sub-ITA'
return item return item
@@ -98,76 +95,68 @@ def movies(item):
def check(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 item.data = m.data
if 'movie' in m.match: if 'movie' in m.match:
item.contentType = 'movie' item.contentType = 'movie'
return findvideos(item) return findvideos(item)
else: else:
return episodes(item) return episodios(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
@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): def findvideos(item):
logger.debug() support.info(item)
itemlist = [] itemlist = []
if item.data:
if 'adf.ly' in item.url: url = support.match(item.data, patron=r'<a\s*href="([^"]+)"\s*title="[^"]+"\s*class="btn btn-dark mb-1">').match
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: else:
url = host url = item.url
for u in item.url.split('/'):
if u and 'animeforce' not in u and 'http' not in u:
url += '/' + u
if 'php?' in url: # if 'adf.ly' in item.url:
url = support.httptools.downloadpage(url, only_headers=True, follow_redirects=False).headers.get("location") # from servers.decrypters import adfly
url = support.match(url, patron=r'class="button"><a href=(?:")?([^" ]+)', headers=headers).match # url = adfly.get_long_url(item.url)
else:
if item.data: url = item.data # elif 'bit.ly' in item.url:
url = support.match(url, patron=r'data-href="([^"]+)" target').match # url = support.httptools.downloadpage(item.url, only_headers=True, follow_redirects=False).headers.get("location")
if not url: url = support.match(url, patron=[r'<source src=(?:")?([^" ]+)',r'name="_wp_http_referer" value="([^"]+)"']).match
if url.startswith('//'): url = 'https:' + url # else:
elif url.startswith('/'): url = 'https:/' + url # url = host
if 'vvvvid' in url: itemlist.append(item.clone(action="play", title='VVVVID', url=url, server='vvvvid')) # for u in item.url.split('/'):
else: itemlist.append(item.clone(action="play", title=support.config.getLocalizedString(30137), url=url, server='directo')) # 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) return support.server(item, itemlist=itemlist)
-11
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": []
}
-142
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)
Regular → Executable
View File
Regular → Executable
+33 -39
View File
@@ -4,22 +4,23 @@
# ---------------------------------------------------------- # ----------------------------------------------------------
from core import support from core import support
from platformcode import logger
host = support.config.get_channel_url() host = support.config.get_channel_url()
__channel__ = 'animesaturn' __channel__ = 'animesaturn'
cookie = support.config.getSetting('cookie', __channel__) cookie = support.config.get_setting('cookie', __channel__)
headers = {'X-Requested-With': 'XMLHttpRequest', 'Cookie': cookie} headers = {'X-Requested-With': 'XMLHttpRequest', 'Cookie': cookie}
def get_cookie(data): def get_cookie(data):
global cookie, headers global cookie, headers
cookie = support.match(data, patron=r'document.cookie="([^\s]+)').match 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]] headers = [['Cookie', cookie]]
def get_data(item): 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 data = support.match(item.url, headers=headers, follow_redirects=True).data
if 'ASCookie' in data: if 'ASCookie' in data:
get_cookie(data) get_cookie(data)
@@ -34,40 +35,40 @@ def mainlist(item):
('ITA',['', 'submenu', '/filter?language%5B0%5D=1']), ('ITA',['', 'submenu', '/filter?language%5B0%5D=1']),
('SUB-ITA',['', 'submenu', '/filter?language%5B0%5D=0']), ('SUB-ITA',['', 'submenu', '/filter?language%5B0%5D=0']),
('Più Votati',['/toplist','menu', 'top']), ('Più Votati',['/toplist','menu', 'top']),
('In Corso',['/animeincorso','movies','incorso']), ('In Corso',['/animeincorso','peliculas','incorso']),
('Ultimi Episodi',['/fetch_pages.php?request=episodes&d=1','movies','updated'])] ('Ultimi Episodi',['/fetch_pages.php?request=episodes&d=1','peliculas','updated'])]
return locals() return locals()
def search(item, text): def search(item, texto):
logger.debug(text) support.info(texto)
item.url = host + '/animelist?search=' + text item.url = host + '/animelist?search=' + texto
item.contentType = 'tvshow' item.contentType = 'tvshow'
try: try:
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("%s" % line) support.logger.error("%s" % line)
return [] return []
def newest(category): def newest(categoria):
logger.debug(category) support.info()
itemlist = [] itemlist = []
item = support.Item() item = support.Item()
try: try:
if category == "anime": if categoria == "anime":
item.url = host + '/fetch_pages.php?request=episodes&d=1' item.url = host + '/fetch_pages.php?request=episodes&d=1'
item.args = "updated" item.args = "updated"
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("{0}".format(line)) support.logger.error("{0}".format(line))
return [] return []
return itemlist return itemlist
@@ -79,7 +80,7 @@ def submenu(item):
action = 'filter' action = 'filter'
patronMenu = r'<h5 class="[^"]+">(?P<title>[^<]+)[^>]+>[^>]+>\s*<select id="(?P<parameter>[^"]+)"[^>]+>(?P<data>.*?)</select>' patronMenu = r'<h5 class="[^"]+">(?P<title>[^<]+)[^>]+>[^>]+>\s*<select id="(?P<parameter>[^"]+)"[^>]+>(?P<data>.*?)</select>'
def itemlistHook(itemlist): 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 itemlist[:-1]
return locals() return locals()
@@ -88,15 +89,15 @@ def filter(item):
itemlist = [] itemlist = []
matches = support.match(item.data if item.data else item.url, patron=r'<option value="(?P<value>[^"]+)"[^>]*>(?P<title>[^<]+)').matches 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: 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')) 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, mode='genre') support.thumb(itemlist, genre=True)
return itemlist return itemlist
@support.scrape @support.scrape
def menu(item): 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")' 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' item.args = 'top'
def itemHook(item2): def itemHook(item2):
item2.url = item.url item2.url = item.url
@@ -106,8 +107,8 @@ def menu(item):
@support.scrape @support.scrape
def movies(item): def peliculas(item):
numerationEnabled = True anime = True
deflang= 'Sub-ITA' deflang= 'Sub-ITA'
action = 'check' action = 'check'
@@ -129,7 +130,7 @@ def movies(item):
action = 'findvideos' action = 'findvideos'
def itemlistHook(itemlist): def itemlistHook(itemlist):
if page: 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 return itemlist
elif 'filter' in item.args: elif 'filter' in item.args:
page = support.match(data, patron=r'totalPages:\s*(\d+)').match page = support.match(data, patron=r'totalPages:\s*(\d+)').match
@@ -138,11 +139,11 @@ def movies(item):
if item.nextpage: item.nextpage += 1 if item.nextpage: item.nextpage += 1
else: item.nextpage = 2 else: item.nextpage = 2
if page and item.nextpage < int(page): 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 return itemlist
else: else:
pagination = True # pagination = ''
if item.args == 'incorso': if item.args == 'incorso':
patron = r'<a href="(?P<url>[^"]+)"[^>]+>(?P<title>[^<(]+)(?:\s*\((?P<year>\d+)\))?(?:\s*\((?P<lang>[A-za-z-]+)\))?</a>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*<img width="[^"]+" height="[^"]+" src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<plot>[^<]+)<' patron = r'<a href="(?P<url>[^"]+)"[^>]+>(?P<title>[^<(]+)(?:\s*\((?P<year>\d+)\))?(?:\s*\((?P<lang>[A-za-z-]+)\))?</a>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*<img width="[^"]+" height="[^"]+" src="(?P<thumb>[^"]+)"[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<plot>[^<]+)<'
else: else:
@@ -155,26 +156,27 @@ def movies(item):
def check(item): def check(item):
movie = support.match(item, patron=r'Episodi:</b> (\d*) Movie') movie = support.match(item, patron=r'Episodi:</b> (\d*) Movie')
if movie.match: if movie.match:
episodes = episodes(item) episodes = episodios(item)
if len(episodes) > 0: if len(episodes) > 0:
it = episodes[0].clone(contentType = 'movie', contentTitle=item.fulltitle, contentSerieName='') it = episodes[0].clone(contentType = 'movie', contentTitle=item.fulltitle, contentSerieName='')
return findvideos(it) return findvideos(it)
else: else:
item.contentType = 'tvshow' item.contentType = 'tvshow'
return episodes(item) return episodios(item)
@support.scrape @support.scrape
def episodes(item): def episodios(item):
if item.contentType != 'movie': numerationEnabled = True if item.contentType != 'movie': anime = True
patron = r'episodi-link-button">\s*<a href="(?P<url>[^"]+)"[^>]+>\s*(?P<title>[^<]+)</a>' patron = r'episodi-link-button">\s*<a href="(?P<url>[^"]+)"[^>]+>\s*(?P<title>[^\d<]+(?P<episode>\d+))\s*</a>'
return locals() return locals()
def findvideos(item): def findvideos(item):
logger.debug() support.info()
itemlist = [] itemlist = []
links = [] links = []
main_url = support.match(item, patron=r'<a href="([^"]+)">[^>]+>[^>]+>G').match 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 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')) itemlist.append(item.clone(action="play", title='Primario', url=main_url, server='directo'))
@@ -185,16 +187,8 @@ def findvideos(item):
links.append(link) links.append(link)
return support.server(item, data=links, itemlist=itemlist) return support.server(item, data=links, itemlist=itemlist)
def play(item): def play(item):
if item.server == 'directo': if item.server == 'directo':
item.url = support.match(item.url, patron=r'(?:source type="[^"]+"\s*src=|file:[^"]+)"([^"]+)').match item.url = support.match(item.url, patron=r'(?:source type="[^"]+"\s*src=|file:[^"]+)"([^"]+)').match
return[item] return[item]
Regular → Executable
View File
Regular → Executable
+268 -244
View File
@@ -1,244 +1,268 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# ------------------------------------------------------------ # ------------------------------------------------------------
# Canale per AnimeUnity # Canale per AnimeUnity
# ------------------------------------------------------------ # ------------------------------------------------------------
import cloudscraper, json, copy, inspect import cloudscraper, json, copy, inspect
from core import jsontools, support, config from core import jsontools, support, httptools, scrapertools
from core.httptools import downloadpage from platformcode import autorenumber
from platformcode import autorenumber, logger
# support.dbg()
session = cloudscraper.create_scraper() host = support.config.get_channel_url()
response = httptools.downloadpage(host + '/archivio')
host = support.config.get_channel_url() csrf_token = support.match(response.data, patron='name="csrf-token" content="([^"]+)"').match
response = session.get(host + '/archivio') headers = {'content-type': 'application/json;charset=UTF-8',
csrf_token = support.match(response.text, patron='name="csrf-token" content="([^"]+)"').match 'x-csrf-token': csrf_token,
headers = {'content-type': 'application/json;charset=UTF-8', 'Cookie' : '; '.join([x.name + '=' + x.value for x in response.cookies])}
'Referer': host,
'x-csrf-token': csrf_token,
'Cookie' : '; '.join([x.name + '=' + x.value for x in response.cookies])} @support.menu
def mainlist(item):
@support.menu top = [('Ultimi Episodi', ['', 'news'])]
def mainlist(item):
top = [('Ultimi Episodi', ['', 'news'])] menu = [('Anime {bullet bold}',['', 'menu', {}, 'tvshow']),
('Film {submenu}',['', 'menu', {'type': 'Movie'}]),
menu = [('Anime {bullet bold}',['', 'menu', {}, 'tvshow']), ('TV {submenu}',['', 'menu', {'type': 'TV'}, 'tvshow']),
('Film {submenu}',['', 'menu', {'type': 'Movie'}]), ('OVA {submenu} {tv}',['', 'menu', {'type': 'OVA'}, 'tvshow']),
('TV {submenu}',['', 'menu', {'type': 'TV'}, 'tvshow']), ('ONA {submenu} {tv}',['', 'menu', {'type': 'ONA'}, 'tvshow']),
('OVA {submenu} {tv}',['', 'menu', {'type': 'OVA'}, 'tvshow']), ('Special {submenu} {tv}',['', 'menu', {'type': 'Special'}, 'tvshow'])]
('ONA {submenu} {tv}',['', 'menu', {'type': 'ONA'}, 'tvshow']), search =''
('Special {submenu} {tv}',['', 'menu', {'type': 'Special'}, 'tvshow'])] return locals()
search =''
return locals() def menu(item):
item.action = 'peliculas'
ITA = copy.copy(item.args)
def menu(item): ITA['title'] = '(ita)'
item.action = 'movies' InCorso = copy.copy(item.args)
ITA = copy.copy(item.args) InCorso['status'] = 'In Corso'
ITA['title'] = '(ita)' Terminato = copy.copy(item.args)
InCorso = copy.copy(item.args) Terminato['status'] = 'Terminato'
InCorso['status'] = 'In Corso' itemlist = [item.clone(title=support.typo('Tutti','bold')),
Terminato = copy.copy(item.args) item.clone(title=support.typo('ITA','bold'), args=ITA),
Terminato['status'] = 'Terminato' item.clone(title=support.typo('Genere','bold'), action='genres'),
itemlist = [item.clone(title=support.typo('Tutti','bold')), item.clone(title=support.typo('Anno','bold'), action='years')]
item.clone(title='ITA', args=ITA), if item.contentType == 'tvshow':
item.clone(title='Genere', action='genres'), itemlist += [item.clone(title=support.typo('In Corso','bold'), args=InCorso),
item.clone(title='Anno', action='years')] item.clone(title=support.typo('Terminato','bold'), args=Terminato)]
if item.contentType == 'tvshow': itemlist +=[item.clone(title=support.typo('Cerca...','bold'), action='search', thumbnail=support.thumb('search'))]
itemlist += [item.clone(title='In Corso', args=InCorso), return itemlist
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):
support.info()
# support.dbg()
def genres(item): itemlist = []
logger.debug()
itemlist = [] genres = json.loads(support.match(response.data, patron='genres="([^"]+)').match.replace('&quot;','"'))
genres = json.loads(support.match(response.text, patron='genres="([^"]+)').match.replace('&quot;','"')) for genre in genres:
item.args['genres'] = [genre]
for genre in genres: itemlist.append(item.clone(title=support.typo(genre['name'],'bold'), action='peliculas'))
item.args['genres'] = [genre] return support.thumb(itemlist)
itemlist.append(item.clone(title=genre['name'], action='movies'))
return support.thumb(itemlist) def years(item):
support.info()
def years(item): itemlist = []
logger.debug()
itemlist = [] from datetime import datetime
next_year = datetime.today().year + 1
from datetime import datetime oldest_year = int(support.match(response.data, patron='anime_oldest_date="([^"]+)').match)
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, next_year + 1))):
item.args['year']=year
for year in list(reversed(range(oldest_year, current_year + 1))): itemlist.append(item.clone(title=support.typo(year,'bold'), action='peliculas'))
item.args['year']=year return itemlist
itemlist.append(item.clone(title=year, action='movies'))
return itemlist
def search(item, text):
support.info('search', item)
def search(item, text): if not item.args:
logger.debug(text) item.args = {'title':text}
if not item.args: else:
item.args = {'title':text} item.args['title'] = text
else: item.search = text
item.args['title'] = text
item.search = text try:
return peliculas(item)
try: # Continua la ricerca in caso di errore
return movies(item) except:
# Continua la ricerca in caso di errore import sys
except: for line in sys.exc_info():
import sys support.info('search log:', line)
for line in sys.exc_info(): return []
logger.debug('search log:', line)
return []
def newest(categoria):
support.info(categoria)
def newest(category): itemlist = []
logger.debug(category) item = support.Item()
itemlist = [] item.url = host
item = support.Item()
item.url = host try:
itemlist = news(item)
try:
itemlist = news(item) if itemlist[-1].action == 'news':
itemlist.pop()
if itemlist[-1].action == 'news': # Continua la ricerca in caso di errore
itemlist.pop() except:
# Continua la ricerca in caso di errore import sys
except: for line in sys.exc_info():
import sys support.info(line)
for line in sys.exc_info(): return []
logger.debug(line)
return [] return itemlist
return itemlist def news(item):
support.info()
def news(item): item.contentType = 'episode'
logger.debug() itemlist = []
item.contentType = 'episode'
itemlist = [] fullJs = json.loads(support.match(httptools.downloadpage(item.url).data, headers=headers, patron=r'items-json="([^"]+)"').match.replace('&quot;','"'))
import cloudscraper js = fullJs['data']
session = cloudscraper.create_scraper()
for it in js:
fullJs = json.loads(support.match(session.get(item.url).text, headers=headers, patron=r'items-json="([^"]+)"').match.replace('&quot;','"')) if it.get('anime', {}).get('title') or it.get('anime', {}).get('title_eng'):
# logger.debug(jsontools.dump(fullJs)) title_name = it['anime']['title'] if it.get('anime', {}).get('title') else it['anime']['title_eng']
js = fullJs['data'] pattern = r'[sS](?P<season>\d+)[eE](?P<episode>\d+)'
match = scrapertools.find_single_match(it['file_name'], pattern)
for it in js: full_episode = ''
itemlist.append( if match:
item.clone(title=it['anime']['title'], season, episode = match
contentTitle = it['anime']['title'], full_episode = ' - S' + season + ' E' + episode
contentEpisodeNumber = int(it['number']), else:
fulltitle=it['anime']['title'], pattern = r'[._\s]Ep[._\s]*(?P<episode>\d+)'
thumbnail=it['anime']['imageurl'], episode = scrapertools.find_single_match(it['file_name'], pattern)
forcethumb = True, if episode:
videoUrl=it['scws_id'], full_episode = ' - E' + episode
plot=it['anime']['plot'], itemlist.append(
action='findvideos') item.clone(title = support.typo(title_name + full_episode, 'bold'),
) fulltitle = it['anime']['title'],
if fullJs.get('next_page_url'): thumbnail = it['anime']['imageurl'],
support.nextPage(itemlist, item, 'news', next_page=fullJs['next_page_url'], total_pages=int(fullJs['last_page_url'].split('=')[-1])) forcethumb = True,
return itemlist scws_id = it.get('scws_id', ''),
url = '{}/anime/{}-{}'.format(item.url, it['anime']['id'],it['anime']['slug']),
plot = it['anime']['plot'],
def movies(item): action = 'findvideos')
logger.debug() )
itemlist = [] 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']))
page = item.page if item.page else 0 return itemlist
item.args['offset'] = page * 30
order = support.config.getSetting('order', item.channel) def peliculas(item):
if order: support.info()
order_list = [ "Standard", "Lista A-Z", "Lista Z-A", "Popolarità", "Valutazione" ] itemlist = []
item.args['order'] = order_list[order]
page = item.page if item.page else 0
payload = json.dumps(item.args) item.args['offset'] = page * 30
js = session.post(host + '/archivio/get-animes', headers=headers, data=payload).json()
records = js['records'] order = support.config.get_setting('order', item.channel)
total_pages = int(js['tot'] / 30) if order:
order_list = [ "Standard", "Lista A-Z", "Lista Z-A", "Popolarità", "Valutazione" ]
for it in records: item.args['order'] = order_list[order]
logger.debug(jsontools.dump(it))
lang = support.match(it['title'], patron=r'\(([It][Tt][Aa])\)').match payload = json.dumps(item.args)
title = support.re.sub(r'\s*\([^\)]+\)', '', it['title']) records = httptools.downloadpage(host + '/archivio/get-animes', headers=headers, post=payload).json['records']
# support.dbg()
if 'ita' in lang.lower(): language = 'ITA'
else: language = 'Sub-ITA' for it in records:
if not it['title']:
itm = item.clone(title=title, it['title'] = ''
contentLanguage = language, lang = support.match(it['title'], patron=r'\(([It][Tt][Aa])\)').match
type = it['type'], title = support.re.sub(r'\s*\([^\)]+\)', '', it['title'])
thumbnail = it['imageurl'],
plot = it['plot'], if 'ita' in lang.lower(): language = 'ITA'
url = '{}/{}-{}'.format(item.url, it['id'], it['slug']) else: language = 'Sub-ITA'
)
# itm.contentLanguage = language if title:
# itm.type = it['type'] itm = item.clone(title=support.typo(title,'bold') + support.typo(language,'_ [] color kod') + (support.typo(it['title_eng'],'_ ()') if it['title_eng'] else ''))
# itm.thumbnail = it['imageurl'] else:
# itm.plot = it['plot'] itm = item.clone(title=support.typo(it['title_eng'],'bold') + support.typo(language,'_ [] color kod'))
# itm.url = item.url itm.contentLanguage = language
itm.type = it['type']
if it['episodes_count'] == 1: itm.thumbnail = it['imageurl']
itm.contentType = 'movie' itm.plot = it['plot']
itm.fulltitle = itm.show = itm.contentTitle = title itm.url = '{}/anime/{}-{}'.format(item.url, it.get('id'), it.get('slug'))
itm.contentSerieName = ''
itm.action = 'play' if it['episodes_count'] == 1:
item.forcethumb=True itm.contentType = 'movie'
itm.videoUrl = it['episodes'][0]['scws_id'] itm.fulltitle = itm.show = itm.contentTitle = title
itm.contentSerieName = ''
else: itm.action = 'findvideos'
itm.contentType = 'tvshow' itm.scws_id = it['episodes'][0].get('scws_id', '')
itm.contentTitle = '' # itm.video_url = it['episodes'][0].get('link', '')
itm.fulltitle = itm.show = itm.contentSerieName = title
itm.action = 'episodes' else:
itm.episodes = it['episodes'] if 'episodes' in it else it['scws_id'] itm.contentType = 'tvshow'
# itm.videoUrl = item.url itm.contentTitle = ''
itm.fulltitle = itm.show = itm.contentSerieName = title
itemlist.append(itm) itm.action = 'episodios'
itm.episodes = it['episodes'] if 'episodes' in it else it.get('scws_id', '')
autorenumber.start(itemlist)
if len(itemlist) == 30: itemlist.append(itm)
support.nextPage(itemlist, item, 'movies', page=page + 1, total_pages=total_pages)
autorenumber.start(itemlist)
return 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))
def episodes(item):
logger.debug() return itemlist
itemlist = []
# title = 'Parte ' if item.type.lower() == 'movie' else 'Episodio ' def episodios(item):
for it in item.episodes: support.info()
itemlist = []
episode2 = it['number'].split('.')[-1] title = 'Parte' if item.type.lower() == 'movie' else 'Episodio'
episode = it['number'].split('.')[0] for it in item.episodes:
itemlist.append( itemlist.append(
item.clone(episodes = [], item.clone(title=support.typo('{}. {} {}'.format(it['number'], title, it['number']), 'bold'),
contentEpisodeNumber=int(float(it['number'])), episode = it['number'],
episodeExtra = '.' + it['number'].split('.')[-1] if '.' in it['number'] else '', fulltitle=item.title,
action='play', show=item.title,
contentType='episode', contentTitle='',
forcethumb=True, contentSerieName=item.contentSerieName,
videoUrl=it['scws_id'])) thumbnail=item.thumbnail,
plot=item.plot,
if inspect.stack()[1][3] not in ['find_episodes']: action='findvideos',
autorenumber.start(itemlist, item) contentType='episode',
support.videolibrary(itemlist, item) url = '{}/{}'.format(item.url, it['id'])
support.download(itemlist, item) )
return itemlist # video_url=it.get('link', ''))
)
def play(item): if inspect.stack(0)[1][3] not in ['find_episodes']:
from time import time autorenumber.start(itemlist, item)
from base64 import b64encode support.videolibrary(itemlist, item)
from hashlib import md5 support.download(itemlist, item)
return itemlist
# Calculate Token
client_ip = support.httptools.downloadpage('https://scws.xyz/videos/{}'.format(item.videoUrl), headers=headers).json.get('client_ip')
expires = int(time() + 172800) def findvideos(item):
token = b64encode(md5('{}{} Yc8U6r8KjAKAepEA'.format(expires, client_ip).encode('utf-8')).digest()).decode('utf-8').replace('=', '').replace('+', '-').replace('/', '_') # if item.scws_id:
# from time import time
url = 'https://scws.xyz/master/{}?token={}&expires={}&n=1'.format(item.videoUrl, token, expires) # from base64 import b64encode
# from hashlib import md5
return [item.clone(server='directo', url=url, manifest='hls')] #
# 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
Regular → Executable
+3 -3
View File
@@ -1,11 +1,11 @@
{ {
"id": "animeuniverse", "id": "animeuniverse",
"name": "AnimeUniverse", "name": "AnimeHDitalia",
"active": true, "active": false,
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"thumbnail": "animeuniverse.png", "thumbnail": "animeuniverse.png",
"banner": "animeuniverse.png", "banner": "animeuniverse.png",
"categories": ["anime", "sub"], "categories": ["anime", "sub-ita"],
"default_off": ["include_in_newest"], "default_off": ["include_in_newest"],
"settings": [ "settings": [
{ {
Regular → Executable
+24 -26
View File
@@ -4,14 +4,13 @@
# ---------------------------------------------------------- # ----------------------------------------------------------
from core import support from core import support
from platformcode import logger
host = support.config.get_channel_url() host = support.config.get_channel_url()
headers = {} headers = {}
perpage_list = ['20','30','40','50','60','70','80','90','100'] perpage_list = ['20','30','40','50','60','70','80','90','100']
perpage = perpage_list[support.config.getSetting('perpage' , 'animeuniverse')] perpage = perpage_list[support.config.get_setting('perpage' , 'animeuniverse')]
epPatron = r'<td>\s*(?P<title>[^ <]+)\s*(?P<episode>\d+)?[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"' epPatron = r'<td>\s*(?P<title>[^<]+)[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>\s*<img [^>]+Streaming'
@support.menu @support.menu
@@ -20,52 +19,50 @@ def mainlist(item):
('Tipo',['', 'menu', 'Anime']), ('Tipo',['', 'menu', 'Anime']),
('Anno',['', 'menu', 'Anno']), ('Anno',['', 'menu', 'Anno']),
('Genere', ['', 'menu','Genere']), ('Genere', ['', 'menu','Genere']),
('Ultimi Episodi',['/2/', 'movies', 'last']), ('Ultimi Episodi',['/2/', 'peliculas', 'last']),
('Hentai', ['/hentai/', 'movies'])] ('Hentai', ['/hentai/', 'peliculas'])]
return locals() return locals()
@support.scrape @support.scrape
def menu(item): def menu(item):
action = 'movies' action = 'peliculas'
patronBlock = item.args + r'</a>\s*<ul class="sub-menu">(?P<block>.*?)</ul>' patronBlock = item.args + r'</a>\s*<ul class="sub-menu">(?P<block>.*?)</ul>'
patronMenu = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)<' patronMenu = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)<'
if 'genere' in item.args.lower():
patronGenreMenu = patronMenu
return locals() return locals()
def search(item, text): def search(item, texto):
logger.debug(text) support.info(texto)
item.search = text item.search = texto
try: try:
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("%s" % line) support.logger.error("%s" % line)
return [] return []
def newest(category): def newest(categoria):
logger.debug(category) support.info(categoria)
item = support.Item() item = support.Item()
try: try:
if category == "anime": if categoria == "anime":
item.url = host item.url = host
item.args = "last" item.args = "last"
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("{0}".format(line)) support.logger.error("{0}".format(line))
return [] return []
@support.scrape @support.scrape
def movies(item): def peliculas(item):
query = '' query = ''
if '/mos/' in item.url: if '/mos/' in item.url:
item.contentType = 'movie' item.contentType = 'movie'
@@ -77,7 +74,7 @@ def movies(item):
action='findvideos' action='findvideos'
else: else:
item.contentType = 'tvshow' item.contentType = 'tvshow'
action='episodes' action='episodios'
if item.search: if item.search:
query = 's' query = 's'
searchtext = item.search searchtext = item.search
@@ -86,7 +83,7 @@ def movies(item):
searchtext = item.url.split('/')[-2] if item.url != host else '' searchtext = item.url.split('/')[-2] if item.url != host else ''
if not item.pag: item.pag = 1 if not item.pag: item.pag = 1
numerationEnabled = False anime=True
# blacklist=['Altri Hentai'] # 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('\\','') 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)?(?:"| \[)' 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): def itemlistHook(itemlist):
if len(itemlist) == int(perpage): if len(itemlist) == int(perpage):
item.pag += 1 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 itemlist
return locals() return locals()
@@ -102,10 +99,11 @@ def movies(item):
@support.scrape @support.scrape
def episodes(item): def episodios(item):
numerationEnabled = True anime = True
pagination = True pagination = int(perpage)
patron = epPatron patron = epPatron
# debug = True
return locals() return locals()
@@ -116,7 +114,7 @@ def findvideos(item):
for title, url in matches: for title, url in matches:
get_video_list(url, title, itemlist) get_video_list(url, title, itemlist)
else: 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) return support.server(item, itemlist=itemlist)
Regular → Executable
+10 -1
View File
@@ -5,8 +5,17 @@
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"thumbnail": "animeworld.png", "thumbnail": "animeworld.png",
"banner": "animeworld.png", "banner": "animeworld.png",
"categories": ["anime", "sub"], "categories": ["anime", "vos"],
"settings": [ "settings": [
{
"id": "lang",
"type": "list",
"label": "Lingua di Ricerca",
"default": 0,
"enabled": true,
"visible": true,
"lvalues": [ "Tutte", "Ita", "Sub-Ita"]
},
{ {
"id": "order", "id": "order",
"type": "list", "type": "list",
Regular → Executable
+58 -58
View File
@@ -4,56 +4,55 @@
# thanks to fatshotty # thanks to fatshotty
# ---------------------------------------------------------- # ----------------------------------------------------------
from core import httptools, support, jsontools from core import httptools, support, config, jsontools
from platformcode import logger
host = support.config.get_channel_url() host = support.config.get_channel_url()
__channel__ = 'animeworld' __channel__ = 'animeworld'
cookie = support.config.getSetting('cookie', __channel__) cookie = support.config.get_setting('cookie', __channel__)
headers = [['Cookie', cookie]] headers = [['Cookie', cookie]]
def get_cookie(data): def get_cookie(data):
global cookie, headers global cookie, headers
cookie = support.match(data, patron=r'document.cookie="([^\s]+)').match 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]] headers = [['Cookie', cookie]]
def get_data(item): def get_data(item):
data = '' # support.dbg()
if item.url: url = httptools.downloadpage(item.url, headers=headers, follow_redirects=True, only_headers=True).url
url = httptools.downloadpage(item.url, headers=headers, follow_redirects=True, only_headers=True).url data = support.match(url, headers=headers, follow_redirects=True).data
data = support.match(url, headers=headers, follow_redirects=True).data if 'SecurityAW' in data:
if 'AWCookieVerify' in data: get_cookie(data)
get_cookie(data) data = get_data(item)
data = get_data(item)
return data return data
def order(): def order():
# Seleziona l'ordinamento dei risultati # Seleziona l'ordinamento dei risultati
return str(support.config.getSetting("order", __channel__)) return str(support.config.get_setting("order", __channel__))
@support.menu @support.menu
def mainlist(item): def mainlist(item):
anime=['/filter?sort=', anime=['/filter?sort=',
('ITA',['/filter?dub=1&sort=', 'menu', '1']), ('ITA',['/filter?dub=1&sort=', 'menu', 'dub=1']),
('SUB-ITA',['/filter?dub=0&sort=', 'menu', '0']), ('SUB-ITA',['/filter?dub=0&sort=', 'menu', 'dub=0']),
('In Corso', ['/ongoing', 'movies','noorder']), ('In Corso', ['/ongoing', 'peliculas','noorder']),
('Ultimi Episodi', ['/updated', 'movies', 'updated']), ('Ultimi Episodi', ['/updated', 'peliculas', 'updated']),
('Nuove Aggiunte',['/newest', 'movies','noorder' ]), ('Nuove Aggiunte',['/newest', 'peliculas','noorder' ]),
('Generi',['/?d=1','genres',])] ('Generi',['/?d=1','genres',])]
return locals() return locals()
@support.scrape @support.scrape
def genres(item): def genres(item):
action = 'movies' action = 'peliculas'
data = get_data(item) data = get_data(item)
patronBlock = r'dropdown[^>]*>\s*Generi\s*<span.[^>]+>(?P<block>.*?)</ul>' patronBlock = r'dropdown[^>]*>\s*Generi\s*<span.[^>]+>(?P<block>.*?)</ul>'
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): def itemHook(item):
item.url = host + '/filter?' + item.name + '=' + item.value + '&sort=' item.url = host + '/filter?' + item.name + '=' + item.value + '&sort='
@@ -65,66 +64,65 @@ def genres(item):
def menu(item): def menu(item):
action = 'submenu' action = 'submenu'
data = get_data(item) data = get_data(item)
patronMenu = r'<button[^>]+>\s*(?P<title>[A-Za-z0-9]+)\s*<span.[^>]+>(?P<other>.*?)</ul>' patronMenu=r'<button[^>]+>\s*(?P<title>[A-Za-z0-9]+)\s*<span.[^>]+>(?P<other>.*?)</ul>'
genre = False
def itemlistHook(itemlist): def itemlistHook(itemlist):
for item in itemlist: itemlist.insert(0, item.clone(title=support.typo('Tutti','bold'), action='peliculas'))
item.title += ' {anime}' itemlist.append(item.clone(title=support.typo('Cerca...','bold'), action='search', search=True, thumbnail=support.thumb('search.png')))
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')))
return itemlist return itemlist
return locals() return locals()
@support.scrape @support.scrape
def submenu(item): def submenu(item):
action = 'movies' action = 'peliculas'
data = item.other data = item.other
# debug=True
patronMenu = r'<input.*?name="(?P<name>[^"]+)" value="(?P<value>[^"]+)"\s*>[^>]+>(?P<title>[^<]+)<\/label>' patronMenu = r'<input.*?name="(?P<name>[^"]+)" value="(?P<value>[^"]+)"\s*>[^>]+>(?P<title>[^<]+)<\/label>'
def itemHook(item): def itemHook(item):
item.url = host + '/filter?' + item.name + '=' + item.value + '&dub=' + item.args + ('&sort=' if item.name != 'sort' else '') item.url = '{}/filter?{}={}&{}{}'.format(host, item.name, item.value, item.args, ('&sort=' if item.name != 'sort' else ''))
return item return item
return locals() return locals()
def newest(category): def newest(categoria):
logger.debug(category) support.info(categoria)
item = support.Item() item = support.Item()
lang = config.get_setting('lang', channel=item.channel)
try: try:
if category == "anime": if categoria == "anime":
item.url = host + '/updated' item.url = host
item.args = "updated" item.args = "updated"
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("{0}".format(line)) support.logger.error("{0}".format(line))
return [] return []
def search(item, texto): def search(item, text):
logger.debug(texto) support.info(text)
if item.search: if item.search:
item.url = host + '/filter?dub=' + item.args + '&keyword=' + texto + '&sort=' item.url = '{}/filter?{}&keyword={}&sort='.format(host, item.args, text)
else: else:
item.args = 'noorder' lang = ['?', '?dub=1&', '?dub=0&'][config.get_setting('lang', channel=item.channel)]
item.url = host + '/search?keyword=' + texto item.url = '{}/filter{}&keyword={}&sort='.format(host, lang, text)
item.contentType = 'tvshow' item.contentType = 'tvshow'
try: try:
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("%s" % line) support.logger.error("%s" % line)
return [] return []
@support.scrape @support.scrape
def movies(item): def peliculas(item):
numerationEnabled = True data = get_data(item)
# debug = True anime = True
if item.args not in ['noorder', 'updated'] and not item.url[-1].isdigit(): item.url += order() # usa l'ordinamento di configura canale if item.args not in ['noorder', 'updated'] and not item.url[-1].isdigit(): item.url += order() # usa l'ordinamento di configura canale
data = get_data(item) data = get_data(item)
@@ -134,42 +132,42 @@ def movies(item):
action='findvideos' action='findvideos'
else: 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>)?' 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 # Controlla la lingua se assente
patronNext=r'<a href="([^"]+)" class="[^"]+" id="go-next' patronNext=r'<a href="([^"]+)" class="[^"]+" id="go-next'
patronTotalPages=r'<span class="total">(\d+)</span>'
typeContentDict={'movie':['movie', 'special']} typeContentDict={'movie':['movie', 'special']}
typeActionDict={'findvideos':['movie', 'special']} typeActionDict={'findvideos':['movie', 'special']}
def itemHook(item): def itemHook(item):
if not item.contentLanguage: if not item.contentLanguage:
if 'dub=1' in item.url or item.l == 'dub': if 'dub=1' in item.url or item.l == 'dub':
item.contentLanguage = 'ITA' item.contentLanguage = 'ITA'
# item.title += support.typo(item.contentLanguage,'_ [] color kod') item.title += support.typo(item.contentLanguage,'_ [] color kod')
else: else:
item.contentLanguage = 'Sub-ITA' item.contentLanguage = 'Sub-ITA'
# item.title += support.typo(item.contentLanguage,'_ [] color kod') item.title += support.typo(item.contentLanguage,'_ [] color kod')
return item return item
return locals() return locals()
@support.scrape @support.scrape
def episodes(item): def episodios(item):
data = get_data(item) data = get_data(item)
numerationEnabled = True anime = True
# pagination = True pagination = 50
patronBlock= r'<div class="server\s*active\s*"(?P<block>.*?)(?:<div class="server|<link)' 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>[^<]+))?' patron = r'<li[^>]*>\s*<a.*?href="(?P<url>[^"]+)"[^>]*>(?P<episode>[^-<]+)(?:-(?P<episode2>[^<]+))?'
# def itemHook(item): def itemHook(item):
# item.title = item.fulltitle item.number = support.re.sub(r'\[[^\]]+\]', '', item.title)
# return item item.title += support.typo(item.fulltitle,'-- bold')
return item
action='findvideos' action='findvideos'
return locals() return locals()
def findvideos(item): def findvideos(item):
import time import time
logger.debug() support.info(item)
itemlist = [] itemlist = []
urls = [] urls = []
# resp = support.match(get_data(item), headers=headers, patron=r'data-name="(\d+)">([^<]+)<') # resp = support.match(get_data(item), headers=headers, patron=r'data-name="(\d+)">([^<]+)<')
@@ -177,9 +175,8 @@ def findvideos(item):
data = resp.data data = resp.data
for ID, name in resp.matches: for ID, name in resp.matches:
# if not item.number: item.number = support.match(item.title, patron=r'(\d+) -').match 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 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: if match:
epID, epurl = match epID, epurl = match
# if 'vvvvid' in name.lower(): # if 'vvvvid' in name.lower():
@@ -189,8 +186,11 @@ def findvideos(item):
title = support.match(url, patron=r'http[s]?://(?:www.)?([^.]+)', string=True).match title = support.match(url, patron=r'http[s]?://(?:www.)?([^.]+)', string=True).match
itemlist.append(item.clone(action="play", title=title, url=url, server='directo')) itemlist.append(item.clone(action="play", title=title, url=url, server='directo'))
else: 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 title = support.match(json['grabber'], patron=r'server\d+.([^.]+)', string=True).match
if title: itemlist.append(item.clone(action="play", title=title, url=json['grabber'].split('=')[-1], server='directo')) if title: itemlist.append(item.clone(action="play", title=title, url=json['grabber'].split('=')[-1], server='directo'))
else: urls.append(json['grabber']) else: urls.append(json['grabber'])
# support.info(urls)
return support.server(item, urls, itemlist) return support.server(item, urls, itemlist)
Regular → Executable
+3 -3
View File
@@ -1,11 +1,11 @@
{ {
"id": "aniplay", "id": "aniplay",
"name": "AniPlay", "name": "AniPlay",
"active": true, "active": false,
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"thumbnail": "aniplay.png", "thumbnail": "aniplay.png",
"banner": "aniplay.png", "banner": "aniplay.png",
"categories": ["anime", "sub"], "categories": ["anime", "vos"],
"settings": [ "settings": [
{ {
"id": "sort", "id": "sort",
@@ -34,4 +34,4 @@
"lvalues": ["10", "20", "30", "40", "50", "60", "80", "90"] "lvalues": ["10", "20", "30", "40", "50", "60", "80", "90"]
} }
] ]
} }
Regular → Executable
+61 -61
View File
@@ -1,5 +1,5 @@
from platformcode import config, logger, autorenumber 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 from inspect import stack
import sys import sys
@@ -9,9 +9,9 @@ else:
from concurrent_py2 import futures from concurrent_py2 import futures
host = config.get_channel_url() host = config.get_channel_url()
sort = ['views', 'title', 'episodeNumber', 'startDate', 'endDate', 'createdDate'][config.getSetting('sort', 'aniplay')] sort = ['views', 'title', 'episodeNumber', 'startDate', 'endDate', 'createdDate'][config.get_setting('sort', 'aniplay')]
order = 'asc' if config.getSetting('order', 'aniplay') else 'desc' order = 'asc' if config.get_setting('order', 'aniplay') else 'desc'
perpage = [10, 20, 30 ,40, 50, 60, 70, 80, 90][config.getSetting('perpage', 'aniplay')] perpage = [10, 20, 30 ,40, 50, 60, 70, 80, 90][config.get_setting('perpage', 'aniplay')]
@support.menu @support.menu
@@ -27,35 +27,38 @@ def mainlist(item):
def submenu_az(item): def submenu_az(item):
itemlist = [] itemlist = []
for letter in ['0-9'] + list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'): 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', url= host + '/api/anime/find-by-char',
action= 'movies', action= 'peliculas',
variable= '&character=' + letter, variable= '&character=' + letter,
thumbnail=support.thumb('az'))) thumbnail=support.thumb('az')))
return itemlist return itemlist
def submenu_year(item): def submenu_year(item):
itemlist = [] itemlist = []
from datetime import date from datetime import date
current = date.today().year 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 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): 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', action= 'submenu_season',
variable= year, variable= year,
thumbnail=support.thumb('year'))) thumbnail=support.thumb('year')))
return itemlist return itemlist
def submenu_top(item): def submenu_top(item):
itemlist = [] itemlist = []
links = {'Top del giorno':'daily-top', 'Top della settimana':'weekly-top', 'Top del mese':'monthly-top'} links = {'Top del giorno':'daily-top', 'Top della settimana':'weekly-top', 'Top del mese':'monthly-top'}
for label in links: for label in links:
link = links[label] link = links[label]
itemlist.append(item.clone(title = label, itemlist.append(item.clone(title = support.typo(label, 'bold'),
action= 'submenu_top_of', action= 'submenu_top_of',
variable= link)) variable= link))
return itemlist return itemlist
def submenu_season(item): def submenu_season(item):
itemlist = [] itemlist = []
seasons = {'winter':'Inverno', 'spring':'Primavera', 'summer':'Estate', 'fall':'Autunno'} seasons = {'winter':'Inverno', 'spring':'Primavera', 'summer':'Estate', 'fall':'Autunno'}
@@ -65,12 +68,13 @@ def submenu_season(item):
s = season['season'].split('.')[-1] s = season['season'].split('.')[-1]
title = seasons[s] title = seasons[s]
itemlist.append(item.clone(title=title, itemlist.append(item.clone(title=title,
url = '{}/api/seasonal-view/{}-{}'.format(host, s, item.variable), url = '{}/api/seasonal-view/{}-{}'.format(host, s, item.variable),
thumbnail = support.thumb(s), thumbnail = support.thumb(s),
action = 'movies', action = 'peliculas',
variable='')) variable=''))
return itemlist return itemlist
def submenu_top_of(item): def submenu_top_of(item):
itemlist = [] itemlist = []
url= '{}/api/home/{}'.format(host, item.variable) url= '{}/api/home/{}'.format(host, item.variable)
@@ -80,72 +84,69 @@ def submenu_top_of(item):
title = fulltitle.split('(')[0].strip() title = fulltitle.split('(')[0].strip()
scrapedlang = scrapertools.find_single_match(fulltitle, r'\(([^\)]+)') scrapedlang = scrapertools.find_single_match(fulltitle, r'\(([^\)]+)')
lang = scrapedlang.upper() if scrapedlang else 'Sub-ITA' 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, itemlist.append(item.clone(title=long_title,
id=anime['animeId'], url = '{}/anime/{}'.format(host, anime['animeId']),
url = '{}/api/anime/{}'.format(host, anime['animeId']), video_url = '{}/api/anime/{}'.format(host, anime['animeId']),
thumbnail = get_thumbnail(anime, 'animeHorizontalImages'), thumbnail = get_thumbnail(anime, 'animeHorizontalImages'),
action = 'episodes', action = 'episodios',
variable=anime['animeId'])) variable=anime['animeId']))
return itemlist return itemlist
def search(item, texto): def search(item, texto):
logger.debug(texto) support.info(texto)
item.url = host + '/api/anime/advanced-search' item.url = host + '/api/anime/advanced-search'
item.variable = '&query=' + texto item.variable = '&query=' + texto
try: try:
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("%s" % line) support.logger.error("%s" % line)
return [] return []
def newest(category): def newest(categoria):
logger.debug(category) support.info(categoria)
item = support.Item() item = support.Item()
try: try:
if category == "anime": if categoria == "anime":
return latest_added(item) return latest_added(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("{0}".format(line)) support.logger.error("{0}".format(line))
return [] return []
def latest_added(item): def latest_added(item):
itemlist = [] itemlist = []
page = item.page if item.page else 0 page = item.page if item.page else 0
url= '{}/api/home/latest-episodes?page={}'.format(host, page) url= '{}/api/home/latest-episodes?page={}'.format(host, page)
js = httptools.downloadpage(url).json js = httptools.downloadpage(url).json
for episode in js: for episode in js:
logger.debug(jsontools.dump(episode)) title = episode['title'] if episode['title'] else ''
title = episode['title'] if episode['title'] else episode['animeTitle']
animeTitle, lang = get_lang(episode['animeTitle']) animeTitle, lang = get_lang(episode['animeTitle'])
quality = 'Full HD' if episode['fullHd'] else 'HD' 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') image = get_thumbnail(episode, 'episodeImages')
itemlist.append(item.clone(title=title, itemlist.append(item.clone(title=long_title,
fulltitle=title, fulltitle=title,
animeId = episode['animeId'], url='{}/play/{}'.format(host, episode['id']),
id=episode['id'],
contentType = 'episode', contentType = 'episode',
contentTitle = title, contentTitle = title,
contentSerieName = animeTitle, contentSerieName = animeTitle,
contentLanguage = lang, contentLanguage = lang,
quality = quality, quality = quality,
contentEpisodeNumber = int(float(episode['episodeNumber'])), contentEpisodeNumber = int(float(episode['episodeNumber'])),
animeUrl = '{}/api/anime/{}'.format(host, episode['animeId']), video_url = '{}/api/episode/{}'.format(host, episode['id']),
thumbnail = image, thumbnail = image,
fanart = image, fanart = image,
action = 'findvideos')) action = 'findvideos'))
@@ -156,7 +157,7 @@ def latest_added(item):
return itemlist return itemlist
def movies(item): def peliculas(item):
logger.debug() logger.debug()
itemlist = [] 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 js = httptools.downloadpage('{}?page={}&size={}{}&sort={},{}&sort=id'.format(item.url, page, perpage, item.variable, sort, order)).json
for it in js: for it in js:
logger.debug(jsontools.dump(js))
title, lang = get_lang(it['title']) title, lang = get_lang(it['title'])
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, fulltitle = title,
show = title, show = title,
contentLanguage = lang, contentLanguage = lang,
contentType = 'movie' if it['type'] == 'Movie' else 'tvshow', contentType = 'movie' if it['type'] == 'Movie' else 'tvshow',
contentTitle = title, contentTitle = title,
contentSerieName = title if it['type'] == 'Serie' else '', contentSerieName = title if it['type'] == 'Serie' else '',
action ='findvideos' if it['type'] == 'Movie' else 'episodes',# '' if not active else 'findvideos' if it['type'] == 'Movie' else 'episodes', action ='findvideos' if it['type'] == 'Movie' else 'episodios',
plot = it['storyline'], plot = it['storyline'],
year = it['startDate'].split('-')[0], url = '{}/anime/{}'.format(host, it['id']),
url = '{}/api/anime/{}'.format(host, it['id']), video_url = '{}/api/anime/{}'.format(host, it.get('animeId', it.get('id'))),
thumbnail = get_thumbnail(it), thumbnail = get_thumbnail(it),
fanart = get_thumbnail(it, 'horizontalImages'))) fanart = get_thumbnail(it, 'horizontalImages')))
@@ -188,12 +192,13 @@ def movies(item):
return itemlist return itemlist
def episodes(item): def episodios(item):
logger.debug() logger.debug()
itemlist = [] itemlist = []
if not item.video_url:
item.video_url = item.url.replace('/anime/', '/api/anime/')
# url = '{}/api/anime/{}'.format(host, item.id) # url = '{}/api/anime/{}'.format(host, item.id)
json = httptools.downloadpage(item.url, CF=False ).json json = httptools.downloadpage(item.video_url, CF=False ).json
if type(json) == list: if type(json) == list:
item.show_renumber = False item.show_renumber = False
@@ -207,8 +212,7 @@ def episodes(item):
title = it['name'] title = it['name']
itemlist.append(item.clone(title = title, itemlist.append(item.clone(title = title,
contentTitle = title, video_url = '{}/api/anime/{}/season/{}'.format(host, it['animeId'], it['id']),
id= '{}/season/{}'.format(it['animeId'], it['id']),
contentType = 'season', contentType = 'season',
action = 'list_episodes', action = 'list_episodes',
plot = json['storyline'], plot = json['storyline'],
@@ -245,8 +249,7 @@ def list_episodes(item, json=None):
itemlist = [] itemlist = []
if not json: if not json:
url = '{}/api/anime/{}'.format(host, item.id) json = httptools.downloadpage(item.video_url, CF=False ).json
json = httptools.downloadpage(url, CF=False ).json
episodes = json['episodes'] if 'episodes' in json else json episodes = json['episodes'] if 'episodes' in json else json
episodes.sort(key=lambda ep: int(ep['episodeNumber'].split('.')[0])) episodes.sort(key=lambda ep: int(ep['episodeNumber'].split('.')[0]))
@@ -259,13 +262,12 @@ def list_episodes(item, json=None):
else: else:
episode = '{:02d}'.format(int(it['episodeNumber'].split('.')[0])) 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') image = get_thumbnail(it, 'episodeImages')
itemlist.append(item.clone(title = it['title'], itemlist.append(item.clone(title = title,
contentTitle = it['title'], url= '{}/play/{}'.format(host, it['id']),
id= it['id'], video_url= '{}/api/episode/{}'.format(host, it['id']),
url= 'api/episode/{}'.format(it['id']),
contentType = 'episode', contentType = 'episode',
contentEpisodeNumber = int(it['episodeNumber'].split('.')[0]), contentEpisodeNumber = int(it['episodeNumber'].split('.')[0]),
contentSeason = item.contentSeason if item.contentSeason else '', contentSeason = item.contentSeason if item.contentSeason else '',
@@ -284,20 +286,18 @@ def list_episodes(item, json=None):
def findvideos(item): def findvideos(item):
logger.debug() logger.debug()
url = '{}/api/{}/{}'.format(host, 'episode' if item.contentType != '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', []): item.url = res['videoUrl']
json = httptools.downloadpage('{}/api/episode/{}'.format(host, json['episodes'][0]['id'])).json item.server = 'directo'
videourl = json['episodeVideo'] if '.m3u' in item.url:
item.manifest = 'hls'
itemlist = [item.clone(title=config.getLocalizedString(30137), return support.server(item, itemlist=[item])
url=videourl,
server='directo')]
return support.server(item, itemlist=itemlist)
def get_thumbnail(data, prop = 'verticalImages', key = 'full'): def get_thumbnail(data, prop = 'verticalImages', key = 'full'):
Regular → Executable
+2 -2
View File
@@ -2,10 +2,10 @@
"id": "casacinema", "id": "casacinema",
"name": "Casacinema", "name": "Casacinema",
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"active": true, "active": false,
"thumbnail": "casacinema.png", "thumbnail": "casacinema.png",
"banner": "casacinema.png", "banner": "casacinema.png",
"categories": ["tvshow", "movie","sub"], "categories": ["tvshow", "movie","vos"],
"settings": [ "settings": [
] ]
} }
Regular → Executable
+37 -47
View File
@@ -5,7 +5,6 @@
from core import support from core import support
from platformcode import logger
host = support.config.get_channel_url() host = support.config.get_channel_url()
headers = [['Referer', host]] headers = [['Referer', host]]
@@ -15,11 +14,10 @@ headers = [['Referer', host]]
def mainlist(item): def mainlist(item):
film = ['/category/film', film = ['/category/film',
('Generi', ['', 'genres', 'genres']), ('Generi', ['', 'genres', 'genres']),
('Sub-ITA', ['/category/sub-ita/', 'movies', 'sub'])
] ]
tvshow = ['/category/serie-tv', tvshow = ['/category/serie-tv',
('Novità', ['/aggiornamenti-serie-tv', 'movies', '']), ('Novità', ['/aggiornamenti-serie-tv', 'peliculas', '']),
] ]
search = '' search = ''
@@ -29,47 +27,47 @@ def mainlist(item):
@support.scrape @support.scrape
def genres(item): def genres(item):
action = 'movies' action = 'peliculas'
blacklist = ['PRIME VISIONI', 'ULTIME SERIE TV', 'ULTIMI FILM'] 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">' patronBlock = r'<div class="container home-cats">(?P<block>.*?)<div class="clear">'
return locals() return locals()
def select(item): def check(item):
item.data = support.match(item).data item.data = support.match(item).data
if 'continua con il video' in item.data.lower(): if 'episodi e stagioni' in item.data.lower():
logger.debug('select = ### è un film ###') support.info('select = ### è una serie ###')
item.contentType = 'tvshow'
return episodios(item)
else:
support.info('select = ### è un film ###')
item.contentType = 'movie' item.contentType = 'movie'
return findvideos(item) return findvideos(item)
else:
logger.debug('select = ### è una serie ###')
item.contentType = 'tvshow'
return episodes(item)
def search(item, text): def search(item, text):
logger.debug(text) support.info(text)
text = text.replace(' ', '+') text = text.replace(' ', '+')
item.url = host + '/?s=' + text item.url = host + '/?a=b&s=' + text
item.args = 'search' item.args = 'search'
try: try:
return movies(item) return peliculas(item)
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error(line) support.info('search log:', line)
return [] return []
def newest(category): def newest(categoria):
itemlist = [] itemlist = []
item = support.Item() item = support.Item()
item.args = 'newest' item.args = 'newest'
try: try:
if category == 'tvshow': if categoria == 'series':
item.contentType = 'tvshow' item.contentType = 'tvshow'
item.url = host+'/aggiornamenti-serie-tv' item.url = host+'/aggiornamenti-serie-tv'
@@ -77,66 +75,63 @@ def newest(category):
item.contentType = 'movie' item.contentType = 'movie'
item.url = host+'/category/film' item.url = host+'/category/film'
item.action = 'movies' item.action = 'peliculas'
itemlist = movies(item) itemlist = peliculas(item)
if itemlist[-1].action == 'movies': if itemlist[-1].action == 'peliculas':
itemlist.pop() itemlist.pop()
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error(line) support.info("%s" % line)
return [] return []
return itemlist return itemlist
@support.scrape @support.scrape
def movies(item): def peliculas(item):
# debug = True
if item.contentType == 'movie': if item.contentType == 'movie':
action = 'findvideos' action = 'findvideos'
elif item.contentType == 'tvshow': elif item.contentType == 'tvshow':
action = 'episodes' action = 'episodios'
pagination = True pagination = ''
else: else:
action = 'select' action = 'check'
if item.args == 'newest': if item.args == 'newest':
patron = r'<li><a href="(?P<url>[^"]+)"[^=]+="(?P<thumb>[^"]+)"><div>\s*?<div[^>]+>(?P<title>[^\(\[<]+)(?:\[(?P<quality1>HD)\])?[ ]?(?:\(|\[)?(?P<lang>[sS]ub-[iI][tT][aA])?(?:\)|\])?[ ]?(?:\[(?P<quality>.+?)\])?[ ]?(?:\((?P<year>\d+)\))?<(?:[^>]+>.+?(?:title="Nuovi episodi">(?P<episode>\d+x\d+)[ ]?(?P<lang2>Sub-Ita)?|title="IMDb">(?P<rating>[^<]+)))?' patron = r'<li><a href="(?P<url>[^"]+)"[^=]+="(?P<thumb>[^"]+)"><div>\s*?<div[^>]+>(?P<title>[^\(\[<]+)(?:\[(?P<quality1>HD)\])?[ ]?(?:\(|\[)?(?P<lang>[sS]ub-[iI][tT][aA])?(?:\)|\])?[ ]?(?:\[(?P<quality>.+?)\])?[ ]?(?:\((?P<year>\d+)\))?<(?:[^>]+>.+?(?:title="Nuovi episodi">(?P<episode>\d+x\d+)[ ]?(?P<lang2>Sub-Ita)?|title="IMDb">(?P<rating>[^<]+)))?'
else: else:
# patron = r'<li><a href="(?P<url>[^"]+)"[^=]+="(?P<thumb>[^"]+)"><div>\s*?<div[^>]+>(?P<title>[^\(\[<]+)(?:\[(?P<quality1>HD)\])?\s?(?:[\(\[])?(?P<lang>[sS]ub-[iI][tT][aA])?(?:[\)\]])?\s?(?:\[(?P<quality>.+?)\])?\s?(?:\((?P<year>\d+)\))?<'
patron = r'<li><a href="(?P<url>[^"]+)"[^=]+="(?P<thumb>[^"]+)"><div>\s*?<div[^>]+>(?P<title>[^\(\[<]+)(?P<title2>\([\D*]+\))?(?:\[(?P<quality1>HD)\])?\s?(?:[\(\[])?(?P<lang>[sS]ub-[iI][tT][aA])?(?:[\)\]])?\s?(?:\[(?P<quality>.+?)\])?\s?(?:\((?P<year>\d+)\))?(?:\(\D{2}\s\d{4}\))?<' patron = r'<li><a href="(?P<url>[^"]+)"[^=]+="(?P<thumb>[^"]+)"><div>\s*?<div[^>]+>(?P<title>[^\(\[<]+)(?P<title2>\([\D*]+\))?(?:\[(?P<quality1>HD)\])?\s?(?:[\(\[])?(?P<lang>[sS]ub-[iI][tT][aA])?(?:[\)\]])?\s?(?:\[(?P<quality>.+?)\])?\s?(?:\((?P<year>\d+)\))?(?:\(\D{2}\s\d{4}\))?<'
patronNext = r'<a href="([^"]+)"\s*>Pagina' patronNext = r'<a href="([^"]+)"\s*>Pagina'
patronTotalPages = r'>(\d+)(?:[^>]+>){4}Pagina'
def itemHook(item): def itemHook(item):
if item.quality1: if item.quality1:
item.quality = 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: if item.lang2:
item.contentLanguage = item.lang2 item.contentLanguage = item.lang2
# item.title += support.typo(item.lang2, '_ [] color kod') item.title += support.typo(item.lang2, '_ [] color kod')
# if item.args == 'novita': if item.args == 'novita':
# item.title = item.title item.title = item.title
# if 'wp-content' in item.thumbnail and not item.infoLabels['year']:
# item.infoLabels['year'] = item.thumbnail.split('/')[5]
return item return item
return locals() return locals()
@support.scrape @support.scrape
def episodes(item): def episodios(item):
if item.data: if item.data:
data = item.data data = item.data
action = 'findvideos' action = 'findvideos'
item.contentType = 'tvshow' item.contentType = 'tvshow'
blacklist = [''] blacklist = ['']
patron = r'(?P<episode>\d+(?:&#215;|×)?\d+\-\d+|\d+(?:&#215;|×)\d+)[;]?(?:(?P<title>[^<]+)<(?P<data>.*?)|(\2[ ])(?:<(\3.*?)))(?:<br />|</p>)' patron = r'"season-no">(?P<season>\d+)x(?P<episode>\d+)(?:[^>]+>){5}\s*(?P<title>[^<]+)(?P<data>.*?)</table>'
patronBlock = r'<strong>(?P<block>(?:.+?Stagione*.+?(?P<lang>[Ii][Tt][Aa]|[Ss][Uu][Bb][\-]?[iI][tT][aA]))?(?:.+?|</strong>)(/?:</span>)?</p>.*?</p>)' 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() return locals()
@@ -144,12 +139,7 @@ def findvideos(item):
if item.contentType != 'movie': if item.contentType != 'movie':
links = support.match(item.data, patron=r'href="([^"]+)"').matches links = support.match(item.data, patron=r'href="([^"]+)"').matches
else: else:
matchData = item.data if item.data else item matchData = item.data if item.data else support.match(item.url, headers=headers).data
links = support.match(matchData, patron=r'(?:SRC|href)="([^"]+)"', patronBlock=r'<div class="col-md-10">(.+?)<div class="ads">').matches links = support.match(matchData, patron=r'data-id="([^"]+)"').matches
data = ''
from lib.unshortenit import unshorten_only return support.server(item, links)
for link in links:
logger.debug('URL=',link)
url, c = unshorten_only(link.replace('#', 'speedvideo.net'))
data += url + '\n'
return support.server(item, data)
Regular → Executable
+9 -9
View File
@@ -1,10 +1,10 @@
{ {
"id": "cb01anime", "id": "cb01anime",
"name": "Cb01anime", "name": "Cb01anime",
"language": ["ita", "sub, "sub-ita"], "language": ["ita", "vos", "sub-ita"],
"active": true, "active": false,
"thumbnail": "cb01anime.png", "thumbnail": "cb01anime.png",
"banner": "cb01anime.png", "banner": "cb01anime.png",
"categories": ["anime"], "categories": ["anime"],
"settings": [] "settings": []
} }
Regular → Executable
+16 -18
View File
@@ -5,7 +5,6 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
from core import support from core import support
from platformcode import logger
host = support.config.get_channel_url() + '/cb01-anime-cartoon' host = support.config.get_channel_url() + '/cb01-anime-cartoon'
@@ -19,7 +18,7 @@ def mainlist(item):
anime = [('Genere',['','menu', '2']), anime = [('Genere',['','menu', '2']),
('Per Lettera',['','menu', '1']), ('Per Lettera',['','menu', '1']),
('Per Anno',['','menu', '3']), ('Per Anno',['','menu', '3']),
('Ultimi Anime Aggiornati',['','movies', 'newest'])] ('Ultimi Anime Aggiornati',['','peliculas', 'newest'])]
return locals() return locals()
@@ -28,9 +27,7 @@ def menu(item):
blacklist = ['Anime per Genere', 'Anime per Anno', 'Anime per Lettera'] blacklist = ['Anime per Genere', 'Anime per Anno', 'Anime per Lettera']
patronBlock = r'<select name="select%s"(?P<block>.*?)</select>' % item.args patronBlock = r'<select name="select%s"(?P<block>.*?)</select>' % item.args
patronMenu = r'<option value="(?P<url>[^"]+)">(?P<title>[^<]+)</option>' patronMenu = r'<option value="(?P<url>[^"]+)">(?P<title>[^<]+)</option>'
if '2' in item.args: action = 'peliculas'
patronGenreMenu = patronMenu
action = 'movies'
def itemHook(item): def itemHook(item):
item.url = item.url.replace('cb01-anime/','cb01-anime-cartoon/') item.url = item.url.replace('cb01-anime/','cb01-anime-cartoon/')
return item return item
@@ -38,37 +35,37 @@ def menu(item):
def search(item, texto): def search(item, texto):
logger.debug(texto) support.info(texto)
item.url = host + "/search/" + texto item.url = host + "/search/" + texto
try: try:
return movies(item) return peliculas(item)
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error(line) support.info('search log:', line)
return [] return []
def newest(category): def newest(categoria):
logger.debug(category) support.info(categoria)
itemlist = [] itemlist = []
item = support.Item() item = support.Item()
try: try:
if category == "anime": if categoria == "anime":
item.url = host item.url = host
item.args = 'newest' item.args = 'newest'
itemlist = movies(item) itemlist = peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("{0}".format(line)) support.logger.error("{0}".format(line))
return [] return []
return itemlist return itemlist
@support.scrape @support.scrape
def movies(item): def peliculas(item):
# debug=True # debug=True
blacklist = Blacklist blacklist = Blacklist
item.contentType = 'tvshow' item.contentType = 'tvshow'
@@ -81,19 +78,20 @@ def movies(item):
return locals() return locals()
def check(item): def check(item):
# support.dbg()
item.url = support.match(item, patron=r'(?:<p>|/>)(.*?)(?:<br|</td>|</p>)', patronBlock=r'Streaming:(.*?)</tr>').matches item.url = support.match(item, patron=r'(?:<p>|/>)(.*?)(?:<br|</td>|</p>)', patronBlock=r'Streaming:(.*?)</tr>').matches
if 'Episodio' in str(item.url): if 'Episodio' in str(item.url):
item.contentType = 'tvshow' item.contentType = 'tvshow'
item.action ='episodes' item.action ='episodios'
return episodes(item) return episodios(item)
else: else:
item.contentType = 'movie' item.contentType = 'movie'
item.action = 'findvideos' item.action = 'findvideos'
return findvideos(item) return findvideos(item)
@support.scrape @support.scrape
def episodes(item): def episodios(item):
logger.debug('EPISODIOS ', item.data) support.info('EPISODIOS ', item.data)
data = '' data = ''
matches = item.data matches = item.data
season = 1 season = 1
Regular → Executable
+1 -1
View File
@@ -5,6 +5,6 @@
"active": true, "active": true,
"thumbnail": "cb01.png", "thumbnail": "cb01.png",
"banner": "cb01.png", "banner": "cb01.png",
"categories": ["tvshow", "movie", "sub", "documentary"], "categories": ["tvshow", "movie", "vos", "documentary"],
"settings": [] "settings": []
} }
Regular → Executable
+112 -122
View File
@@ -2,21 +2,20 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
# Canale per cineblog01 # Canale per cineblog01
# ------------------------------------------------------------ # ------------------------------------------------------------
import re import re
from core import scrapertools, httptools, servertools, support from core import scrapertools, httptools, servertools, support
from platformcode import logger, config from platformcode import logger, config
# def findhost(url): def findhost(url):
# host = httptools.downloadpage(url, follow_redirect=True).url host = httptools.downloadpage(url, follow_redirect=True).url
# if host == 'https://cb01.uno/': if host == 'https://cb01.uno/':
# host = support.match(host, patron=r'<a href="([^"]+)').match host = support.match(host, patron=r'<a href="([^"]+)').match
# return host return host
host = config.get_channel_url() host = config.get_channel_url(findhost)
headers = [['Referer', host]] headers = [['Referer', host]]
@@ -24,20 +23,22 @@ headers = [['Referer', host]]
def mainlist(item): def mainlist(item):
film = [ film = [
('HD', ['', 'menu', 'Film HD Streaming']), ('HD', ['', 'menu', 'Film HD Streaming']),
('Generi', ['', 'menu', 'Film per Genere']), ('Genere', ['', 'menu', 'Film per Genere']),
('Anni', ['', 'menu', 'Film per Anno']), ('Anni', ['', 'menu', 'Film per Anno']),
('Paese', ['', 'menu', 'Film per Paese']), ('Popolari per Genere', ['', 'menu', 'Film Popolari']),
('Ultimi Aggiornati', ['/ultimi-100-film-aggiornati/', 'movies', 'newest']), ('Ultimi Aggiunti', ['/ultimi-100-film-aggiunti/', 'peliculas', 'newest']),
('Ultimi Aggiunti', ['/lista-film-ultimi-100-film-aggiunti/', 'movies', 'newest']) ('Popolari', ['/category/film-popolari/']),
('Italiani', ['/category/nazione/italia/'])
# ('Film in Lista', ['/lista-film/', 'peliculas', 'newest'])
] ]
tvshow = ['/serietv/', tvshow = ['/serietv/',
('Per Lettera', ['/serietv/', 'menu', 'Serie-Tv per Lettera']), ('Per Lettera', ['/serietv/', 'menu', 'Serie-TV x Lettera']),
('Per Genere', ['/serietv/', 'menu', 'Serie-Tv per Genere']), ('Per Genere', ['/serietv/', 'menu', 'Serie-TV x Genere']),
('Per anno', ['/serietv/', 'menu', 'Serie-Tv per Anno']), ('Per anno', ['/serietv/', 'menu', 'Serie-TV x Anno']),
('Ultime Aggiornate', ['/serietv/ultime-100-serie-tv-aggiornate/', 'movies', 'newest']) ('Ultime Aggiunte', ['/serietv/ultime-100-serie-tv-aggiunte/', 'peliculas', 'newest'])
] ]
docu = [('Documentari {bullet bold}', ['/category/documentario/', 'movies']), docu = [('Documentari {bullet bold}', ['/category/documentario/', 'peliculas']),
('HD {submenu} {documentari}', ['/category/hd-alta-definizione/documentario-hd/', 'movies']) ('HD {submenu} {documentari}', ['/category/hd-alta-definizione/documentario-hd/', 'peliculas'])
] ]
return locals() return locals()
@@ -45,28 +46,27 @@ def mainlist(item):
@support.scrape @support.scrape
def menu(item): def menu(item):
# debug = True
patronBlock = item.args + r'<span.*?><\/span>.*?<ul.*?>(?P<block>.*?)<\/ul>' patronBlock = item.args + r'<span.*?><\/span>.*?<ul.*?>(?P<block>.*?)<\/ul>'
patronMenu = r'href="?(?P<url>[^">]+)"?>(?P<title>.*?)<\/a>' patronMenu = r'href="?(?P<url>[^">]+)"?[^>]+>(?P<title>[^<»]+)'
if 'genere' in item.args.lower(): action = 'peliculas'
patronGenreMenu = patronMenu
action = 'movies'
return locals() return locals()
def newest(category): def newest(categoria):
logger.debug(category) support.info(categoria)
item = support.Item() item = support.Item()
try: try:
if category == 'tvshow': if categoria == "series":
item.contentType = 'tvshow' item.contentType = 'tvshow'
item.url = host + '/serietv/' # aggiornamento-quotidiano-serie-tv/' item.url = host + '/serietv/' # aggiornamento-quotidiano-serie-tv/'
else: else:
item.contentType = 'movie' item.contentType = 'movie'
item.url = host + '/lista-film-ultimi-100-film-aggiunti/' item.url = host + '/ultimi-100-film-aggiunti/'
item.args = "newest" item.args = "newest"
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
@@ -76,13 +76,12 @@ def newest(category):
def search(item, text): def search(item, text):
logger.info("search", text)
logger.info("search", item, text)
if item.contentType == 'tvshow': item.url = host + '/serietv' if item.contentType == 'tvshow': item.url = host + '/serietv'
else: item.url = host else: item.url = host
try: try:
item.url = item.url + "/search/" + text.replace(' ', '+') item.url = item.url + "/search/" + text.replace(' ', '+')
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
@@ -93,8 +92,8 @@ def search(item, text):
@support.scrape @support.scrape
def movies(item): def peliculas(item):
# debug = True #debug = True
# esclusione degli articoli 'di servizio' # esclusione degli articoli 'di servizio'
# curYear = datetime.date.today().year # curYear = datetime.date.today().year
# blacklist = ['BENVENUTI', 'Richieste Serie TV', 'CB01.UNO &#x25b6; TROVA L&#8217;INDIRIZZO UFFICIALE ', # blacklist = ['BENVENUTI', 'Richieste Serie TV', 'CB01.UNO &#x25b6; TROVA L&#8217;INDIRIZZO UFFICIALE ',
@@ -104,26 +103,25 @@ def movies(item):
# 'Auguri di Buon Natale e Felice Anno Nuovo! &#8211; ' + str(curYear) + '!'] # 'Auguri di Buon Natale e Felice Anno Nuovo! &#8211; ' + str(curYear) + '!']
if 'newest' in item.args: if 'newest' in item.args:
pagination = True pagination = ''
patronBlock = r'sequex-page-left(?P<block>.*?)sequex-page-right' patronBlock = r'sequex-page-left(?P<block>.*?)sequex-page-right'
if '/serietv/' not in item.url: 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' action = 'findvideos'
else: 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>[^<]+)<' 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: 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' action = 'findvideos'
else: 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>[^<]+)' 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' item.contentType = 'tvshow'
patronNext = '<a class="?page-link"? href="?([^>"]+)"?><i class="fa fa-angle-right">' patronNext = '<a class="?page-link"? href="?([^>"]+)"?><i class="fa fa-angle-right">'
patronTotalPages = '(\d+[\.]?\d+)</option>\s*</sele'
def itemHook(item): def itemHook(item):
if item.quality2: if item.quality2:
@@ -134,117 +132,109 @@ def movies(item):
return locals() return locals()
@support.scrape
def episodes(item): def episodios(item):
@support.scrape @support.scrape
def listed(item, data): def folder(item, url):
actLike = 'episodes' """
disableAll = True 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'<tr><td>(?P<title>[^<]+)<td><span [^>].+?><a [^>]+href="(?P<url>[^"]+)[^>]+>'
patron = r'(?:/>|<p>|<strong>)(?P<data>.*?(?P<episode>[0-9]+(?:&#215;|×)[0-9]+)\s*(?P<title2>.*?)?(?:\s*&#8211;|\s*-|\s*<).*?)(?:<\/p>|<br)' sceneTitle = True
# debug = True
def itemHook(item):
item.serieFolder = True
return item
return locals() return locals()
@support.scrape # debugBlock=True
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()
data = support.match(item.url, headers=headers).data 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) 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[^>]*>'
itemlist.extend(folder(item, data) if 'TUTTE LE' in data or 'TUTTA LA' in data else []) 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':{}} for key, value in title_dict.items():
seasons = [] itlist.append(value)
for it in itemlist: itlist = sorted(itlist, key=lambda it: (it.contentLanguage, int(it.order)))
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.extend(folderItemlist)
itlist = [] return itlist
for season in sorted(seasons): return locals()
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
def findvideos(item): 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() 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=""): itemlist = []
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))
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 # Estrae i contenuti - Streaming HD
data = httptools.downloadpage(item.url).data load_links(itemlist, '<strong>Streamin?g HD[^<]+</strong>(.*?)cbtable', "Streaming HD", "HD")
data = re.sub('\n|\t', '', data)
# Estrae i contenuti - Streaming # Estrae i contenuti - Streaming 3D
load_links(itemlist, '<strong>Streamin?g:</strong>(.*?)cbtable', "Streaming", "SD") load_links(itemlist, '<strong>Streamin?g 3D[^<]+</strong>(.*?)cbtable', "Streaming 3D")
# Estrae i contenuti - Streaming HD # Extract the quality format
load_links(itemlist, '<strong>Streamin?g HD[^<]+</strong>(.*?)cbtable', "Streaming HD", "HD") patronvideos = r'([\w.]+)</strong></div></td>'
return support.server(item, itemlist=itemlist, patronTag=patronvideos)
# Estrae i contenuti - Streaming 3D # Estrae i contenuti - Download
load_links(itemlist, '<strong>Streamin?g 3D[^<]+</strong>(.*?)cbtable', "Streaming 3D") # load_links(itemlist, '<strong>Download:</strong>(.*?)<tableclass=cbtable height=30>', "aqua", "Download")
itemlist = support.server(item, itemlist=itemlist) # Estrae i contenuti - Download HD
# Extract the quality format # load_links(itemlist, '<strong>Download HD[^<]+</strong>(.*?)<tableclass=cbtable width=100% height=20>', "azure", "Download HD")
patronvideos = r'([\w.]+)</strong></div></td>'
support.addQualityTag(item, itemlist, data, patronvideos)
return itemlist
# Estrae i contenuti - Download def findvid_serie(item):
# load_links(itemlist, '<strong>Download:</strong>(.*?)<tableclass=cbtable height=30>', "aqua", "Download") logger.debug()
data = re.sub(r'((?:<p>|<strong>)?[^\d]*\d*(?:&#215;|×)[0-9]+[^<]+)', '', item.other)
# Estrae i contenuti - Download HD return support.server(item, data=data)
# load_links(itemlist, '<strong>Download HD[^<]+</strong>(.*?)<tableclass=cbtable width=100% height=20>', "azure", "Download HD")
def play(item): def play(item):
Regular → Executable
+2 -2
View File
@@ -2,10 +2,10 @@
"id": "cinemalibero", "id": "cinemalibero",
"name": "Cinemalibero", "name": "Cinemalibero",
"language": ["ita"], "language": ["ita"],
"active": true, "active": false,
"thumbnail": "cinemalibero.png", "thumbnail": "cinemalibero.png",
"banner": "cinemalibero.png", "banner": "cinemalibero.png",
"categories": ["movie","tvshow","anime"], "categories": ["movie","tvshow","anime"],
"not_active": ["include_in_newest_anime", "include_in_newest_movie"], "not_active": ["include_in_newest_anime", "include_in_newest_peliculas"],
"settings": [] "settings": []
} }
Regular → Executable
+152 -58
View File
@@ -7,8 +7,15 @@ import re
from core import httptools, support, scrapertools from core import httptools, support, scrapertools
from core.item import Item from core.item import Item
from core.support import typo
from platformcode import config, logger 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 # rimanda a .today che contiene tutti link a .plus
# def findhost(url): # def findhost(url):
@@ -29,15 +36,15 @@ headers = [['Referer', host]]
def mainlist(item): def mainlist(item):
film = ['/category/film/', film = ['/category/film/',
('Novità', ['', 'movies', 'update']), ('Novità', ['', 'peliculas', 'update']),
('Generi', ['', 'genres'])] ('Generi', ['', 'genres'])]
tvshow = ['/category/serie-tv/'] tvshow = ['/category/serie-tv/']
anime = ['/category/anime-giapponesi/'] anime = ['/category/anime-giapponesi/']
## Sport = [(support.typo('Sport', 'bullet bold'), ['/category/sport/', 'movies', 'sport', 'tvshow'])] ## Sport = [(support.typo('Sport', 'bullet bold'), ['/category/sport/', 'peliculas', 'sport', 'tvshow'])]
news = [('Ultimi episodi Serie/Anime', ['/aggiornamenti-serie-tv/', 'movies', 'update', 'tvshow'])] news = [('Ultimi episodi Serie/Anime', ['/aggiornamenti-serie-tv/', 'peliculas', 'update', 'tvshow'])]
search = '' search = ''
@@ -45,22 +52,24 @@ def mainlist(item):
@support.scrape @support.scrape
def movies(item): def peliculas(item):
# debug = True # debug = True
action = 'check' action = 'check'
patronBlock = r'<div class="container">.*?class="col-md-12[^"]*?">(?P<block>.*?)<div class=(?:"container"|"bg-dark ")>' patronBlock = r'<div class="container">.*?class="col-md-12[^"]*?">(?P<block>.*?)<div class=(?:"container"|"bg-dark ")>'
if item.args == 'newest': 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\-]+)?\)?)?' 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': 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': if item.args == 'update':
patronBlock = r'<section id="slider">(?P<block>.*?)</section>' 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': elif item.contentType == 'tvshow':
# action = 'episodios'
if item.args == 'update': 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>)' 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: 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>[^\)< ]+))?' 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: else:
@@ -77,8 +86,8 @@ def movies(item):
item.title += support.typo(item.lang2, '_ [] color kod') item.title += support.typo(item.lang2, '_ [] color kod')
if item.args == 'update': if item.args == 'update':
item.title = item.title.replace('-', ' ') item.title = item.title.replace('-', ' ')
if item.args == 'search': # if item.args == 'search':
item.contentType = 'undefined' # item.contentType = 'tvshow' if 'serie-' in item.url else 'movie'
return item return item
@@ -86,50 +95,97 @@ def movies(item):
return locals() return locals()
@support.scrape @support.scrape
def episodes(item): def episodios(item):
data=item.data data = item.data
# debug=True # debug=True
if item.args == 'anime': if item.args == 'anime':
logger.debug("Anime :", item) 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))|(?P<data>.+)'
patron = r'<a target=(?P<url>[^>]+>(?P<title>Episodio\s(?P<episode>\d+))(?::)?(?:(?P<title2>[^<]+))?.*?(?:<br|</p))'
patronBlock = r'(?:Stagione (?P<season>\d+))?(?:</span><br />|</span></p>|strong></p>)(?P<block>.*?)(?:<div style="margin-left|<span class="txt_dow">)' patronBlock = r'(?:Stagione (?P<season>\d+))?(?:</span><br />|</span></p>|strong></p>)(?P<block>.*?)(?:<div style="margin-left|<span class="txt_dow">)'
# item.contentType = 'tvshow' item.contentType = 'tvshow'
elif item.args == 'serie': 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) logger.debug("Serie :", item)
patron = r'(?:>| )(?P<episode>\d+(?:x|×|&#215;)\d+)[;]?[ ]?(?:(?P<title>[^<-]+)(?P<data>.*?)|(\2[ ])(?:<(\3.*?)))(?:</a><br /|</a></p|$)' patron = r'(?:/>|<p>)\s*(?:(?P<episode>\d+(?:x|×|&#215;)\d+|Puntata \d+)(?:-(?P<episode2>\d+))?[;]?[ ]?(?P<title>[^<-]+))?(?P<data>.*?)(?:<br|</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)' patronBlock = r'Stagione\s(?:[Uu]nica)?(?:(?P<lang>iTA|ITA|Sub-ITA|Sub-iTA))?.*?</strong>(?P<block>.+?)(?:strong>|<div class="at-below)'
# item.contentType = 'tvshow' item.contentType = 'tvshow'
else: else:
patron = r'(?P<title>\s*[0-9]{2}/[0-9]{2}/[0-9]{4})(?P<data>.*?)(?:<br|</p)' patron = r'(?P<title>\s*[0-9]{2}/[0-9]{2}/[0-9]{4})(?P<data>.*?)(?:<br|</p)'
def itemHook(item): def itemHook(it):
if not scrapertools.find_single_match(item.title, r'(\d+x\d+)'): if not scrapertools.find_single_match(it.title, r'(\d+x\d+)'):
item.title = re.sub(r'(\d+) -', '1x\\1', item.title) it.title = re.sub(r'(\d+) -', '1x\\1', it.title)
return item 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() return locals()
@support.scrape @support.scrape
def genres(item): def genres(item):
action='peliculas'
action='movies'
patron_block=r'<div id="bordobar" class="dropdown-menu(?P<block>.*?)</li>' 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() return locals()
def search(item, texto): def search(item, texto):
logger.debug(item.url,texto) logger.debug(item.url,texto)
item.contentType = 'undefined'
texto = texto.replace(' ', '+') texto = texto.replace(' ', '+')
item.url = host + "/?s=" + texto item.url = host + "/?s=" + texto
# item.contentType = 'tv' # item.contentType = 'tv'
item.args = 'search' item.args = 'search'
try: try:
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
@@ -137,18 +193,19 @@ def search(item, texto):
logger.error("%s" % line) logger.error("%s" % line)
return [] return []
def newest(category):
logger.debug('newest ->', category) def newest(categoria):
logger.debug('newest ->', categoria)
itemlist = [] itemlist = []
item = Item() item = Item()
item.args = 'newest' item.args = 'newest'
try: try:
if category == 'tvshow' or category == 'anime': if categoria == 'series' or categoria == 'anime':
item.args = 'update' item.args = 'update'
item.url = host+'/aggiornamenti-serie-tv/' item.url = host+'/aggiornamenti-serie-tv/'
item.contentType = 'tvshow' item.contentType = 'tvshow'
item.action = 'movies' item.action = 'peliculas'
itemlist = movies(item) itemlist = peliculas(item)
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
@@ -159,40 +216,77 @@ def newest(category):
def check(item): def check(item):
logger.debug()
data = support.match(item.url, headers=headers).data data = support.match(item.url, headers=headers).data
if 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': if 'serie tv' in ck or 'anime' in ck or 'wrestling wwe' in ck :# in ['serie tv', 'wrestling wwe', 'anime']:
item.contentType = 'tvshow' if 'anime' in ck:
item.args = 'serie' item.args = 'anime'
item.data = data elif 'sport' in ck or 'wrestling' in ck:
return episodes(item) item.args = 'sport'
else:
elif ck == 'anime': item.args = 'serie'
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:
item.contentType = 'tvshow' item.contentType = 'tvshow'
item.data = data item.data = data
itemlist = episodes(item) itemlist = episodios(item)
if not itemlist: if not itemlist:
item.contentType = 'movie'
item.data = data item.data = data
return findvideos(item) return findvideos(item)
return itemlist else:
item.contentType = 'movie'
item.data = data
# item.action = 'findvideos'
return findvideos(item)
return itemlist
def findvideos(item): 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() logger.debug()
item.data = item.data.replace('http://rapidcrypt.net/verys/', '').replace('http://rapidcrypt.net/open/', '') #blocca la ricerca # support.dbg()
return support.server(item, data=item.data) 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
Regular → Executable
+1 -1
View File
@@ -6,6 +6,6 @@
"thumbnail": "cinetecadibologna.png", "thumbnail": "cinetecadibologna.png",
"banner": "cinetecadibologna.png", "banner": "cinetecadibologna.png",
"categories": ["documentary"], "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": [] "settings": []
} }
Regular → Executable
+8 -8
View File
@@ -2,9 +2,9 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
# Canale per cinetecadibologna # Canale per cinetecadibologna
# ------------------------------------------------------------ # ------------------------------------------------------------
from core.item import Item
from core import support from core import support
from platformcode import logger
host = support.config.get_channel_url() host = support.config.get_channel_url()
@@ -22,7 +22,7 @@ def mainlist(item):
@support.scrape @support.scrape
def menu(item): def menu(item):
action = 'movies' action = 'peliculas'
if 'epoche' in item.url: if 'epoche' in item.url:
patronMenu =r'<li>\s*<a href="(?P<url>[^"]+)">(?P<title>[^>]+)<' patronMenu =r'<li>\s*<a href="(?P<url>[^"]+)">(?P<title>[^>]+)<'
elif 'percorsi' in item.url: elif 'percorsi' in item.url:
@@ -34,23 +34,23 @@ def menu(item):
def search(item, text): def search(item, text):
logger.debug(text) support.info(text)
item.args = 'noorder' item.args = 'noorder'
item.url = host + '/ricerca/type_ALL/ricerca_' + text item.url = host + '/ricerca/type_ALL/ricerca_' + text
item.contentType = 'movie' item.contentType = 'movie'
try: try:
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("%s" % line) support.logger.error("%s" % line)
return [] return []
@support.scrape @support.scrape
def movies(item): def peliculas(item):
if 'alfabetico' in item.url: if 'alfabetico' in item.url:
patron = r'<img src="(?P<thumb>[^"]+)"[^>]+>\s*[^>]+>\s*<div[^>]+>\s*<div[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>(?:\[)?(?P<title>[^\]<]+)(?:\]|<)' patron = r'<img src="(?P<thumb>[^"]+)"[^>]+>\s*[^>]+>\s*<div[^>]+>\s*<div[^>]+>[^>]+>\s*<a href="(?P<url>[^"]+)"[^>]+>(?:\[)?(?P<title>[^\]<]+)(?:\]|<)'
else: else:
@@ -62,13 +62,13 @@ def movies(item):
def findvideos(item): def findvideos(item):
logger.debug() support.info()
itemlist = [] itemlist = []
matches = support.match(item, patron=r'filename: "(.*?)"').matches matches = support.match(item, patron=r'filename: "(.*?)"').matches
for url in 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) return support.server(item, itemlist=itemlist)
+11
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
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
Regular → Executable
View File
Regular → Executable
+221 -132
View File
@@ -2,30 +2,34 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
# Canale per Rai Play # Canale per Rai Play
# ------------------------------------------------------------ # ------------------------------------------------------------
import functools
import requests import requests, uuid
from core import support from core import jsontools, support, httptools
from platformcode import logger from platformcode import logger, config
typo = support.typo
session = requests.Session() session = requests.Session()
session.request = functools.partial(session.request, timeout=httptools.HTTPTOOLS_DEFAULT_DOWNLOAD_TIMEOUT)
host = support.config.get_channel_url() 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'] # 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"]
api = "https://disco-api.discoveryplus.it" token = session.get('{}/token?deviceId={}&realm=dplay&shortlived=true'.format(domain, deviceId)).json()['data']['attributes']['token']
headers = {'User-Agent': 'Mozilla/50.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0', session.headers = {'User-Agent': httptools.get_user_agent(), #'Mozilla/50.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0',
'Referer': host, 'Referer': host,
'Cookie' : 'st=' + token} 'Origin': host,
'Cookie': 'st={}'.format(token),
def Dict(item): 'content-type': 'application/json',
global pdict 'x-disco-client': 'WEB:UNKNOWN:dplus_us:2.46.0',
pdict = session.get(api + '/cms/routes/{}?decorators=viewingHistory&include=default'.format(item.args), headers=headers).json()['included'] 'x-disco-params': 'realm=dplay,siteLookupKey=dplus_it'}
@support.menu @support.menu
def mainlist(item): def mainlist(item):
top = [('Dirette {bullet bold}', ['', 'live']), top = [('Dirette {bold}', ['', 'live']),
('Programmi {bullet bold tv}', ['', 'movies', 'programmi']), ('Programmi {bullet bold tv}', ['', 'programs', 'programmi'])]
('Generi {bullet bold tv}', ['', 'genres'])]
search = '' search = ''
@@ -34,158 +38,243 @@ def mainlist(item):
def search(item, text): def search(item, text):
itemlist = [] itemlist = []
item.args = 'search'
item.text = text item.text = text
try: try:
itemlist = movies(item) itemlist = peliculas(item)
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("%s" % line) logger.error(line)
return itemlist return itemlist
def live(item): def live(item):
logger.debug() 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)) itemlist =[]
return support.thumb(itemlist, mode='live') # 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): def genres(item):
item.action = 'movies' logger.debug()
itemlist = [
item.clone(title='Attualità e inchiesta', args='genere/attualita-e-inchiesta'), itemlist = []
item.clone(title='Beauty and style', args='genere/beauty-and-style'), data = session.get('{}/cms/collections/{}?include=default'. format(domain, item.id)).json()['included']
item.clone(title='Serie TV', args='genere/serie-tv'), collection = {k['id']: k['relationships'].get('show', k['relationships'].get('collection'))['data']['id'] for k in data if k['type'] == 'collectionItem'}
item.clone(title='Casa', args='genere/casa'),
item.clone(title='Comedy', args='genere/comedy'), included = {}
item.clone(title='Crime', args='genere/crime'), for key in data:
item.clone(title='Documentari', args='genere/documentari'), if key.get('relationships', {}).get('items') and key['type'] == 'collection' and key['attributes']['title'] not in ['A-Z', 'I più visti']:
# item.clone(title='Discovery + Originals', args='genere/discoveryplus-original'), included[key['attributes']['title']] = [k['id'] for k in key['relationships']['items']['data']]
item.clone(title='Food', args='genere/food'),
item.clone(title='Medical', args='genere/medical'), for title, values in included.items():
item.clone(title='Motori', args='genere/motori'), itemlist.append(item.clone(title=title, action='peliculas', filter=[collection[k] for k in values]))
item.clone(title='Natura', args='genere/natura'),
item.clone(title='Paranormal', args='genere/paranormal'), itemlist.sort(key=lambda it: it.title)
item.clone(title='People', args='genere/people'),
item.clone(title='Real Adventure', args='genere/real-adventure'), return support.thumb(itemlist, genre=True)
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'), def channels(item):
item.clone(title='Sport', args='genere/sport'), logger.debug()
item.clone(title='Talent Show', args='genere/talent-show'),
] 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 return itemlist
def movies(item): def peliculas(item):
logger.debug() logger.debug()
itemlist =[] 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: else:
pdict = session.get('{}/cms/routes/{}?decorators=viewingHistory&include=default'.format(api, item.args), headers=headers).json()['included'] data = session.get('{}/cms/collections/{}?include=default'.format(domain, item.id)).json()['included']
images = list(filter(lambda x: x['type'] == 'image', pdict))
for key in pdict: images = {key['id'] : key['attributes']['src'] for key in data if key['type'] == 'image'}
if key['type'] == 'show' and 'Free' in str(key.get('relationships',{}).get('contentPackages',{}).get('data',[])):
title = key['attributes']['name'] for key in data:
plot = key['attributes'].get('description','') if key['type'] == 'show' and 'Free' in str(key.get('relationships',{}).get('contentPackages',{}).get('data',[])) and key['attributes']['episodeCount']:
url = '{}/programmi/{}'.format(host, key['attributes']['alternateId'])
seasons = key['attributes']['seasonNumbers'] if item.filter and key['id'] not in item.filter:
thumbs = [image['attributes']['src'] for image in images if image['id'] == key['relationships']['images']['data'][0]['id']] continue
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']] thumbId = key['relationships'].get('images',{}).get('data', [{},{},{}])[2].get('id', '')
fanart = fanarts[0] if fanarts else item.fanart fanartId = key['relationships'].get('images',{}).get('data', [{}])[0].get('id', '')
itemlist.append( itemlist.append(
item.clone(title=title, item.clone(title=typo(key['attributes']['name'],'bold'),
fulltitle=title, plot=key['attributes'].get('description',''),
plot=plot, programid=key['attributes']['alternateId'],
url=url, seasons=key['attributes']['seasonNumbers'],
programid=key['attributes']['alternateId'], action='seasons',
id=key['id'], thumbnail=images[thumbId] if thumbId else item.thumbnail,
seasons=seasons, fanart=images[fanartId] if fanartId else item.fanart,
action='episodes', contentType='tvshow'))
thumbnail=thumb,
fanart=fanart, itemlist.sort(key=lambda it: it.title)
contentType='tvshow'))
if not itemlist:
from core.item import Item
itemlist = [Item(title='Nessun Contenuto Free Disponibile', thumbnail=support.thumb('info'))]
return itemlist return itemlist
def episodes(item): def seasons(item):
logger.debug() 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: itemlist = []
if key['type'] == 'collection' and key.get('attributes',{}).get('component',{}).get('id', '') == 'tabbed-content': data = session.get('{}/cms/routes/show/{}?include=default'.format(domain, item.programid)).json()['included']
mandatory = key['attributes']['component'].get('mandatoryParams','')
if not mandatory: return [support.Item(title='CONTENUTO PLUS')] for key in data:
if key['type'] == 'collection' and 'filters' in key['attributes']['component']:
for option in key['attributes']['component']['filters'][0]['options']: for option in key['attributes']['component']['filters'][0]['options']:
url = '{}/cms/collections/{}?decorators=viewingHistory&include=default&{}&{}'.format(api, key['id'], mandatory, option['parameter']) itemlist.append(item.clone(title="Stagione {}".format(option['value']),
seasons = [] season=int(option['value']),
season = {} seasonparams=option['parameter'],
try: showparams=key['attributes']['component']['mandatoryParams'],
season = session.get(url, headers=headers).json() id=key['id'],
seasons.append(season['included']) contentType='season',
pages = season['data'].get('meta',{}).get('itemsTotalPages', 0) action='episodios'))
if pages: break
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
for season in seasons: if key['type'] == 'collection' and 'title' in key['attributes']:
for episode in season: itemlist.append(
if episode['type'] == 'video' and 'Free' in episode['attributes']['packages']: item.clone(title=typo(key['attributes']['title'],'bold'),
title = '{}x{:02d} - {}'.format(option['id'], episode['attributes']['episodeNumber'], episode['attributes']['name']) plot=key['attributes'].get('description',''),
plot = episode['attributes']['description'] programid=key['attributes']['alias'],
itemlist.append( id=key['id'],
item.clone(title=title, action='episodios',
fulltitle=title, contentType='season'))
plot=plot,
id=episode['id'],
action='findvideos',
contentType='episode',
season=option['id'],
episode=episode['attributes']['episodeNumber'],
forcethumb=True,
no_return=True))
if itemlist: itemlist.sort(key=lambda it: (int(it.season), int(it.episode)))
return itemlist 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): def findvideos(item):
logger.debug() logger.debug()
return support.server(item, itemlist=[item.clone(server='directo', action='play')])
def play(item): content = 'video' if item.contentType == 'episode' else 'channel'
if item.livefilter:
item.id = liveDict()[item.livefilter]['id'] post = {content + 'Id': item.id,
item.fulltitle = item.livefilter 'deviceInfo': {
item.forcethumb = True 'adBlocker': 'true',
item.no_return = True 'drmSupported': 'true',
support.thumb(item, mode='live') 'hwDecodingCapabilities': [],
if item.contentType == 'episode': data = session.get('{}/playback/v2/videoPlaybackInfo/{}?usePreAuth=true'.format(api, item.id), headers=headers).json().get('data',{}).get('attributes',{}) 'screen':{
else: data = session.get('{}/playback/v2/channelPlaybackInfo/{}?usePreAuth=true'.format(api, item.id), headers=headers).json().get('data',{}).get('attributes',{}) 'width':1920,
if data.get('protection', {}).get('drm_enabled',True): 'height':1080
item.url = data['streaming']['dash']['url'] },
'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.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: else:
item.url = data['streaming']['hls']['url'] item.url = data['streaming'][0]['url']
item.manifest = 'hls' item.manifest = 'hls'
return [item]
return support.server(item, itemlist=[item], Download=False, Videolibrary=False)
Regular → Executable
+3 -3
View File
@@ -2,9 +2,9 @@
"id": "dreamsub", "id": "dreamsub",
"name": "DreamSub", "name": "DreamSub",
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"active": true, "active": false,
"thumbnail": "dreamsub.png", "thumbnail": "dreamsub.png",
"banner": "dreamsub.png", "banner": "dreamsub.png",
"categories": ["anime", "sub"], "categories": ["anime", "vos"],
"settings": [] "settings": []
} }
Regular → Executable
+31 -29
View File
@@ -4,21 +4,22 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
from core import support from core import support
from platformcode import logger
host = support.config.get_channel_url() host = support.config.get_channel_url()
headers = [['Referer', host]] headers = [['Referer', host]]
@support.menu @support.menu
def mainlist(item): def mainlist(item):
support.info(item)
anime = ['/search?typeY=tv', anime = ['/search?typeY=tv',
('Movie', ['/search?typeY=movie', 'movies', '', 'movie']), ('Movie', ['/search?typeY=movie', 'peliculas', '', 'movie']),
('OAV', ['/search?typeY=oav', 'movies', '', 'tvshow']), ('OAV', ['/search?typeY=oav', 'peliculas', '', 'tvshow']),
('Spinoff', ['/search?typeY=spinoff', 'movies', '', 'tvshow']), ('Spinoff', ['/search?typeY=spinoff', 'peliculas', '', 'tvshow']),
('Generi', ['','menu','Generi']), ('Generi', ['','menu','Generi']),
('Stato', ['','menu','Stato']), ('Stato', ['','menu','Stato']),
('Ultimi Episodi', ['', 'movies', ['last', 'episodiRecenti']]), ('Ultimi Episodi', ['', 'peliculas', ['last', 'episodiRecenti']]),
('Ultimi Aggiornamenti', ['', 'movies', ['last', 'episodiNuovi']]) ('Ultimi Aggiornamenti', ['', 'peliculas', ['last', 'episodiNuovi']])
] ]
return locals() return locals()
@@ -27,15 +28,14 @@ def mainlist(item):
@support.scrape @support.scrape
def menu(item): def menu(item):
item.contentType = '' item.contentType = ''
action = 'movies' action = 'peliculas'
patronBlock = r'<div class="filter-header"><b>%s</b>(?P<block>.*?)<div class="filter-box">' % item.args 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>' 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): def itemHook(item):
support.info(item.type)
for Type, ID in support.match(item.other, patron=r'data-type="([^"]+)" data-id="([^"]+)"').matches: for Type, ID in support.match(item.other, patron=r'data-type="([^"]+)" data-id="([^"]+)"').matches:
item.url = host + '/search?' + Type + 'Y=' + ID item.url = host + '/search?' + Type + 'Y=' + ID
return item return item
@@ -43,52 +43,52 @@ def menu(item):
def search(item, text): def search(item, text):
logger.debug(text) support.info(text)
text = text.replace(' ', '+') text = text.replace(' ', '+')
item.url = host + '/search/' + text item.url = host + '/search/' + text
item.args = 'search' item.args = 'search'
try: try:
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error('search log:', line) support.info('search log:', line)
return [] return []
def newest(category): def newest(categoria):
logger.debug(category) support.info(categoria)
item = support.Item() item = support.Item()
try: try:
if category == "anime": if categoria == "anime":
item.url = host item.url = host
item.args = ['last', 'episodiNuovi'] item.args = ['last', 'episodiNuovi']
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("{0}".format(line)) support.logger.error("{0}".format(line))
return [] return []
@support.scrape @support.scrape
def movies(item): def peliculas(item):
# debug = True # debug = True
numerationEnabled = True anime = True
if 'movie' in item.url: if 'movie' in item.url:
item.contentType = 'movie' item.contentType = 'movie'
action = 'findvideos' action = 'findvideos'
else: else:
item.contentType = 'tvshow' item.contentType = 'tvshow'
action = 'episodes' action = 'episodios'
if len(item.args) > 1 and item.args[0] == 'last': if len(item.args) > 1 and item.args[0] == 'last':
patronBlock = r'<div id="%s"[^>]+>(?P<block>.*?)<div class="vistaDettagliata"' % item.args[1] 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: 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})' 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="([^"]+)">' patronNext = '<li class="currentPage">[^>]+><li[^<]+<a href="([^"]+)">'
@@ -102,33 +102,35 @@ def movies(item):
@support.scrape @support.scrape
def episodes(item): def episodios(item):
numerationEnabled = True anime = True
pagination = True # debug = True
pagination = 100
if item.data: if item.data:
data = 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() return locals()
def findvideos(item): def findvideos(item):
itemlist = [] itemlist = []
logger.debug() support.info()
# support.dbg()
matches = support.match(item, patron=r'href="([^"]+)"', patronBlock=r'<div style="white-space: (.*?)<div id="main-content"') 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': if not matches.matches and item.contentType != 'episode':
item.data = matches.data item.data = matches.data
item.contentType = 'tvshow' item.contentType = 'tvshow'
return episodes(item) return episodios(item)
if 'vvvvid' in matches.data: 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')) itemlist.append(item.clone(action="play", title='VVVVID', url=support.match(matches.data, patron=r'(http://www.vvvvid[^"]+)').match, server='vvvvid'))
else: else:
logger.debug('VIDEO') support.info('VIDEO')
for url in matches.matches: for url in matches.matches:
lang = url.split('/')[-2] lang = url.split('/')[-2]
if 'ita' in lang.lower(): if 'ita' in lang.lower():
-10
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": []
}
-140
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)
Regular → Executable
+3 -3
View File
@@ -1,10 +1,10 @@
{ {
"id": "eurostreaming", "id": "eurostreaming",
"name": "Eurostreaming", "name": "Eurostreaming",
"active": true, "active": false,
"language": ["ita","sub-ita"], "language": ["ita", "sub-ita"],
"thumbnail": "eurostreaming.png", "thumbnail": "eurostreaming.png",
"banner": "eurostreaming.png", "banner": "eurostreaming.png",
"categories": ["tvshow","anime","sub"], "categories": ["tvshow", "anime", "vos"],
"settings": [] "settings": []
} }
Regular → Executable
+30 -22
View File
@@ -6,7 +6,6 @@
from core import support from core import support
from core.item import Item from core.item import Item
from platformcode import logger
# def findhost(url): # def findhost(url):
# permUrl = httptools.downloadpage(url, follow_redirects=False, only_headers=True).headers # permUrl = httptools.downloadpage(url, follow_redirects=False, only_headers=True).headers
@@ -18,38 +17,41 @@ headers = [['Referer', host]]
@support.menu @support.menu
def mainlist(item): def mainlist(item):
support.info()
tvshow = [] tvshow = []
anime = ['/category/anime-cartoni-animati/'] anime = ['/category/anime-cartoni-animati/']
mix = [('Aggiornamenti {bullet bold} {TV}', ['/aggiornamento-episodi/', 'movies', 'newest']), mix = [('Aggiornamenti {bullet bold} {TV}', ['/aggiornamento-episodi-nuovi/', 'peliculas', 'newest']),
('Archivio {bullet bold} {TV}', ['/category/serie-tv-archive/', 'movies'])] ('Archivio {bullet bold} {TV}', ['/category/serie-tv-archive/', 'peliculas'])]
search = '' search = ''
return locals() return locals()
@support.scrape @support.scrape
def movies(item): def peliculas(item):
# debug = True # debug = True
action = 'episodes' action = 'episodios'
if item.args == 'newest': if item.args == 'newest':
item.contentType = 'episode' 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>' 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: 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>' 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>' patronNext=r'a class="next page-numbers" href="?([^>"]+)">Avanti &raquo;</a>'
return locals() return locals()
@support.scrape @support.scrape
def episodes(item): def episodios(item):
# debug = True # debug = True
data = support.match(item, headers=headers).data data = support.match(item, headers=headers).data
if 'clicca qui per aprire' in data.lower(): data = support.match(support.match(data, patron=r'"go_to":"([^"]+)"').match.replace('\\',''), headers=headers).data if 'clicca qui per aprire' in data.lower(): data = support.match(support.match(data, patron=r'"go_to":"([^"]+)"').match.replace('\\',''), headers=headers).data
elif 'clicca qui</span>' in data.lower(): data = support.match(support.match(data, patron=r'<h2 style="text-align: center;"><a href="([^"]+)">').match, headers=headers).data elif 'clicca qui</span>' in data.lower(): data = support.match(support.match(data, patron=r'<h2 style="text-align: center;"><a href="([^"]+)">').match, headers=headers).data
patronBlock = r'</span>(?P<block>[a-zA-Z\s]+\d+(.+?)?(?:\()?(?P<lang>ITA|SUB ITA)(?:\))?.*?)</div></div>' patronBlock = r'</span>(?P<block>[a-zA-Z\s]+\d+(.+?)?(?:\()?(?P<lang>ITA|SUB ITA)(?:\))?.*?)</div></div>'
patron = r'(?P<season>\d+)&#\d+;(?P<episode>\d+(?:-\d+)?)\s*(?:</strong>|<em>)?\s*(?P<title>.*?)(?:–|-.+?-|–.+?–|–|em|.)?(?:/em.*?)?(?:<a (?P<data>.*?))<br />' patron = r'(?P<season>\d+)&#215;(?P<episode>\d+)(</strong>)*(?P<title>.*?)<(?P<other>.*?br/>)'
def itemHook(i): def itemHook(i):
i.url = item.url i.url = item.url
@@ -58,44 +60,50 @@ def episodes(item):
return locals() return locals()
def search(item, text): def search(item, texto):
logger.debug(text) support.info()
item.url = "%s/?s=%s" % (host, text) item.url = "%s/?s=%s" % (host, texto)
item.contentType = 'tvshow' item.contentType = 'tvshow'
try: try:
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error(line) support.info(line)
return [] return []
def newest(category): def newest(categoria):
logger.debug() support.info()
itemlist = [] itemlist = []
item = Item() item = Item()
item.contentType = 'tvshow' item.contentType = 'tvshow'
item.args = 'newest' item.args = 'newest'
try: try:
item.url = "%s/aggiornamento-episodi/" % host item.url = "%s/aggiornamento-episodi-nuovi/" % host
item.action = "movies" item.action = "peliculas"
itemlist = movies(item) itemlist = peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("{0}".format(line)) support.info("{0}".format(line))
return [] return []
return itemlist return itemlist
def findvideos(item): def findvideos(item):
logger.debug() support.info()
return support.server(item, item.data) 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
+10
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
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
-11
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": []
}
-208
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
-11
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": []
}
-82
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()
-35
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
}
]
}
-151
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)
Regular → Executable
+1 -1
View File
@@ -5,6 +5,6 @@
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"thumbnail": "filmpertutti.png", "thumbnail": "filmpertutti.png",
"banner": "filmpertutti.png", "banner": "filmpertutti.png",
"categories": ["tvshow","movie"], "categories": ["anime", "tvshow","movie"],
"settings": [] "settings": []
} }
Regular → Executable
+109 -79
View File
@@ -3,27 +3,32 @@
# Canale per filmpertutti.py # Canale per filmpertutti.py
# ------------------------------------------------------------ # ------------------------------------------------------------
from core import support from core import httptools, support, scrapertools
from core.item import Item from core.item import Item
from platformcode import config, logger from platformcode import config, logger
def findhost(url): 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) host = config.get_channel_url(findhost)
headers = [['Referer', host]] headers = [['Referer', host]]
@support.menu @support.menu
def mainlist(item): def mainlist(item):
film = ['/category/film/', film = ['/category/film/feed/',
('Generi', ['/category/film/', 'genres', 'lettersF']) ('Film al cinema', ['/category/ora-al-cinema/feed/', 'peliculas']),
('Generi', ['/', 'genres']),
('Saghe', ['/', 'genres', 'saghe']),
] ]
tvshow = ['/category/serie-tv/', tvshow = ['/category/serie-tv/feed/',
('Aggiornamenti', ['/aggiornamenti-serie-tv/', 'movies', 'newest']), ]
('Per Lettera', ['/category/serie-tv/', 'genres', 'lettersS'])
anime = ['/category/anime/feed/',
('SUB-ITA',['/category/anime-sub-ita/feed/', 'peliculas']),
] ]
search = '' search = ''
@@ -31,125 +36,150 @@ def mainlist(item):
@support.scrape @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': if not item.parent_url:
patronBlock = r'<ul class="posts">(?P<block>.*)<\/ul>' item.parent_url = item.url
patron = r'<li><a href="(?P<url>[^"]+)" data-thumbnail="(?P<thumb>[^"]+)">.*?<div class="title[^"]*">(?P<title>.+?)(?:\[(?P<lang>Sub-ITA)\])?(?:[ ]\[?(?P<quality>[HD]+)?\])?(?:[ ]\((?P<year>\d+)\)?)?<\/div>'
patronNext = r'<a href="([^"]+)[^>]+>Pagina'
else:
patronBlock = r'<ul class="posts">(?P<block>.*)<div class="clear[^"]*">'
patron = r'<li>\s?<a href="(?P<url>[^"]+)" data-thumbnail="(?P<thumb>[^"]+)">.*?<div class="title[^"]*">(?P<title>.+?)(?:\s\[(?P<quality>HD)\])?<\/div>\s*<div class="episode[^"]*"[^>]+>(?P<episode>[^<(]+)(?:\((?P<lang>[a-zA-Z\-]+)\))?'
if item.args == 'search': if item.args == 'genres':
action = 'check' action = 'check'
elif item.contentType == 'tvshow':
action = 'episodes' item.nextpage = item.page + 1
elif item.contentType == 'movie': nextPageUrl = "{}/?paged={}".format(item.parent_url, item.nextpage)
action ='findvideos' patron= r'<item>\s<title>(?P<title>[^<]+?)\s*(\((?P<lang>Sub-[a-zA-Z]+)*\))?\s*(\[(?P<quality>[A-Z]*)\])?\s*(\((?P<year>[0-9]{4})\))?</title>.*?<link>(?P<url>.*?)</link>'
def fullItemlistHook(itemlist):
if len(itemlist) < 10:
return itemlist[:-1:]
else:
return itemlist
else: else:
action = 'check' action = 'check'
patron= r'<article class=\"elementor-post.*?(<img .*?src=\"(?P<thumb>[^\"]+).*?)?<h3 class=\"elementor-post__title\".*?<a href=\"(?P<url>[^\"]+)\" >\s*(?P<title>[^<]+?)\s*(\((?P<lang>Sub-[a-zA-Z]+)*\))?\s*(\[(?P<quality>[A-Z]*)\])?\s*(\((?P<year>[0-9]{4})\))?\s+<'
def itemHook(item):
item.title = item.title.replace(' - La Serie', '')
return item
return locals() return locals()
@support.scrape def episodios(item):
def episodes(item): item.quality = ''
# debug=True data = item.data if item.data else httptools.downloadpage(item.url).data
data = support.match(item.url, headers=headers).data itemlist = []
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 itemHook(i): for it in support.match(data, patron=[r'div class=\"single-season.*?(?P<id>season_[0-9]+).*?>Stagione:\s(?P<season>[0-9]+).*?(\s-\s(?P<lang>[a-zA-z]+?))?<']).matches:
i.url = item.url block = support.match(data, patron = r'div id=\"'+ it[0] +'\".*?</div').match
i.title.replace('&#215;','x') for ep in support.match(block, patron=[r'<li><a href=\"(?P<url>[^\"]+).*?img\" src=\"(?P<thumb>[^\"]+).*?title\">(?P<episode>[0-9]+)\.\s+(?P<title>.*?)</span>']).matches:
if not i.contentLanguage: itemlist.append(item.clone(contentType = 'episode',
i.contentLanguage = 'ITA' action='findvideos',
return i thumb=ep[1],
return locals() episode=ep[2],
season=it[1],
contentSeason=it[1],
contentEpisodeNumber=ep[2],
title = support.format_longtitle(support.cleantitle(ep[3]), season = it[1], episode = ep[2], lang= it[3]),
url = scrapertools.unescape(ep[0]), data = '')
)
if config.get_setting('episode_info') and not support.stackCheck(['add_tvshow', 'get_newest']):
support.tmdb.set_infoLabels_itemlist(itemlist, seekTmdb=True)
support.check_trakt(itemlist)
support.videolibrary(itemlist, item)
if (config.get_setting('downloadenabled')):
support.download(itemlist, item)
return itemlist
@support.scrape @support.scrape
def genres(item): def genres(item):
action = 'peliculas'
blacklist = ['Tutti i film',]
wantSaga = True if item.args == 'saghe' else False
item.args = 'genres'
if item.args == 'lettersF': patronBlock = r'<nav class="elementor-nav-menu--main (?P<block>.*?)</nav>'
item.contentType = 'movie' patronMenu = r'<li class="menu-item.*?<a href="(?P<url>https:\/\/.*?)".*?>(?P<title>.*?)</a></li>'
else:
item.contentType = 'tvshow'
action = 'movies' def itemHook(item):
patronBlock = r'<select class="cats">(?P<block>.*?)<\/select>' item.url = "{}/feed/".format(item.url)
patronGenreMenu = r'<option data-src="(?P<url>[^"]+)">(?P<title>[^<]+)<\/option>' return item
def itemlistHook(itemlist):
itl = []
for item in itemlist:
isSaga = item.fulltitle.startswith('Saga')
if len(item.fulltitle) != 3:
if (isSaga and wantSaga) or (not isSaga and not wantSaga):
itl.append(item)
return itl
return locals() return locals()
def check(item): def check(item):
logger.debug() item.data = httptools.downloadpage(item.url).data
patron=r'class="taxonomy category"\s*><span property="name">([^>]+)</span></a><meta property="position" content="2">' if 'season-details' in item.data.lower():
block = support.match(item.url, patron=patron,headers=headers).match item.contentType = 'tvshow'
if block.lower() != 'film': return episodios(item)
logger.debug('### è una Serie ###')
item.contentType='tvshow'
return episodes(item)
else: else:
logger.debug(' ### è un Film ###') item.contentType = 'movie'
item.contentType='movie'
return findvideos(item) return findvideos(item)
def search(item, texto): def search(item, text):
logger.debug() item.url = "{}/?{}".format(host, support.urlencode({'s': text}))
item.url = host + "/?s=" + texto
item.args = 'search' item.args = 'search'
try: try:
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("%s" % line) logger.error("search except: %s" % line)
return [] return []
def newest(category): def newest(categoria):
logger.debug() support.info()
itemlist = [] itemlist = []
item = Item() item = Item()
try: try:
if category == "movie": if categoria == "peliculas":
item.url = host + "/category/film/" item.url = host + "/category/film/feed/"
item.action = "movies" item.action = "peliculas"
item.extra = "movie" item.extra = "movie"
item.contentType = 'movie' item.contentType = 'movie'
itemlist = movies(item) itemlist = peliculas(item)
else: else:
item.url = host + "/aggiornamenti-serie-tv/" item.url = host + "/category/serie-tv/feed/"
item.action = "movies" item.action = "peliculas"
item.args = "newest" item.args = "newest"
item.contentType = 'tvshow' item.contentType = 'tvshow'
itemlist = movies(item) itemlist = peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("{0}".format(line)) support.info("{0}".format(line))
return [] return []
return itemlist return itemlist
def findvideos(item): def findvideos(item):
video_url = item.url
if item.contentType == 'movie': if item.contentType == 'movie':
data = support.match(item.url, patron=r'<a target="_blank" rel="nofollow" href="([^"]+)">').matches video_url = support.match(item.url, patron=r'<a href="([^"]+)" rel="nofollow">').match
return support.server(item, data=data, patronTag='Versione: <[^>]+>([^<]+)')
else: video_url = support.match(video_url, patron=r'<iframe src=\"(https://.*?)\"').match
return support.server(item, item.data)
if (video_url == ''):
return []
itemlist = [item.clone(action="play", url=srv) for srv in support.match(video_url, patron='<div class=\"megaButton\" meta-type=\"v\" meta-link=\"([^\"]+).*?(?=>)>').matches]
itemlist = support.server(item,itemlist=itemlist)
return itemlist
+10
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
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)
Regular → Executable
+1 -1
View File
@@ -2,7 +2,7 @@
"id": "guardaseriecam", "id": "guardaseriecam",
"name": "GuardaSerie Cam", "name": "GuardaSerie Cam",
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"active": false, "active": true,
"thumbnail": "https://raw.githubusercontent.com/32Dexter/DexterRepo/master/media/guardaserie_live.png", "thumbnail": "https://raw.githubusercontent.com/32Dexter/DexterRepo/master/media/guardaserie_live.png",
"banner": "", "banner": "",
"categories": ["tvshow"], "categories": ["tvshow"],
Regular → Executable
+14 -12
View File
@@ -11,6 +11,7 @@
# possibilità di miglioramento: inserire menu per genere - lista serie tv e gestire le novità # possibilità di miglioramento: inserire menu per genere - lista serie tv e gestire le novità
from core import support from core import support
from core.support import info
from platformcode import logger, config from platformcode import logger, config
host = config.get_channel_url() host = config.get_channel_url()
@@ -28,42 +29,43 @@ def mainlist(item):
@support.scrape @support.scrape
def list(item): def list(item):
patronMenu = r'<a title="(?P<title>[^"]+)" href="(?P<url>[^"]+)' patronMenu = r'<a title="(?P<title>[^"]+)" href="(?P<url>[^"]+)'
action = 'movies' action = 'peliculas'
return locals() return locals()
@support.scrape @support.scrape
def movies(item): def peliculas(item):
patron = r'<div class="mlnh-thumb"><a href="(?P<url>[^"]+).*?title="(?P<title>[^"]+).*?src="(?P<thumb>[^"]+).*?hdn">(?P<year>[0-9]{4})' # debug = True
patronNext = 'pagenavi.*?<span>.</span>.*?<a href="([^"]+)' patron = r'<div class="mlnh-thumb"><a href="(?P<url>[^"]+)[^>]+title="(?P<title>[^"]+).*?<img src="(?P<thumb>[^"]+).*?hdn">[^<]*(?P<year>[0-9]{4})'
action = 'episodes' patronNext = 'pagenavi.*?<a href="([^"]+)">\d+'
action = 'episodios'
return locals() return locals()
@support.scrape @support.scrape
def episodes(item): def episodios(item):
patronBlock = r'<div class="tab-pane fade" id="season-(?P<season>.)"(?P<block>.*?)</div>' patronBlock = r'<div class="tab-pane fade" id="season-(?P<season>.)"(?P<block>.*?)</ul>\s*</div>'
patron = r'<a href="#" allowfullscreen data-link="(?P<url>[^"]+).*?title="(?P<title>[^"]+)(?P<lang>[sS][uU][bB]-?[iI][tT][aA])?\s*">(?P<episode>[^<]+)' patron = r'(?P<data><a href="#" allowfullscreen data-link="[^"]+.*?title="(?P<title>[^"]+)(?P<lang>[sS][uU][bB]-?[iI][tT][aA])?\s*">(?P<episode>[^<]+).*?</li>)'
action = 'findvideos' action = 'findvideos'
# debug = True # debug = True
return locals() return locals()
def search(item, text): def search(item, text):
logger.debug('search', text) support.info('search', text)
item.contentType = 'tvshow' item.contentType = 'tvshow'
itemlist = [] itemlist = []
text = text.replace(' ', '+') text = text.replace(' ', '+')
item.url = host + '/index.php?story=%s&do=search&subaction=search' % (text) item.url = host + '/index.php?story=%s&do=search&subaction=search' % (text)
try: try:
return movies(item) return peliculas(item)
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error('search log:', line) info('search log:', line)
return [] return []
def findvideos(item): def findvideos(item):
logger.debug() logger.debug()
return support.server(item, item.url) return support.server(item, item.data)
Regular → Executable
+4 -4
View File
@@ -1,15 +1,15 @@
{ {
"id": "guardaserieclick", "id": "guardaserieclick",
"name": "GuardaSerie.click", "name": "GuardaSerie.click",
"active": true, "active": false,
"language": ["ita", "sub-ita"], "language": ["ita", "vos"],
"thumbnail": "guardaserieclick.png", "thumbnail": "guardaserieclick.png",
"bannermenu": "guardaserieclick.png", "bannermenu": "guardaserieclick.png",
"categories": ["tvshow", "anime"], "categories": ["tvshow", "anime"],
"not_active": ["include_in_newest_movie", "include_in_newest_anime"], "not_active": ["include_in_newest_peliculas", "include_in_newest_anime"],
"settings": [ "settings": [
{ {
"id": "include_in_newest_movie", "id": "include_in_newest_peliculas",
"type": "bool", "type": "bool",
"label": "@70727", "label": "@70727",
"default": false, "default": false,
Regular → Executable
+35 -34
View File
@@ -16,7 +16,8 @@
from core import support from core import support
from core.item import Item from core.item import Item
from platformcode import config, logger from platformcode import config
from core.support import info
host = config.get_channel_url() host = config.get_channel_url()
headers = [['Referer', host]] headers = [['Referer', host]]
@@ -25,28 +26,28 @@ headers = [['Referer', host]]
@support.menu @support.menu
def mainlist(item): def mainlist(item):
tvshow = ['', tvshow = ['',
('Aggiornamenti', ['', 'movies', 'update']), ('Aggiornamenti', ['', 'peliculas', 'update']),
('Generi', ['', 'genres', 'genres']), ('Generi', ['', 'genres', 'genres']),
('News Sub-ITA', ['', 'movies', 'ined']), ('News Sub-ITA', ['', 'peliculas', 'ined']),
('Anime/Cartoni', ["/category/animazione/", 'movies', 'genres']) ('Anime/Cartoni', ["/category/animazione/", 'peliculas', 'genres'])
] ]
return locals() return locals()
##@support.scrape ##@support.scrape
##def movies(item): ##def peliculas(item):
#### import web_pdb; web_pdb.set_trace() #### 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">' ## block = r'(?P<block>.*?)<div\s+class="btn btn-lg btn-default btn-load-other-series">'
## ##
## if item.args == 'ined': ## if item.args == 'ined':
## deflang = 'SUB-ITA' ## deflang = 'SUB-ITA'
## patronBlock = r'<span\s+class="label label-default label-title-typology">'+block ## 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>.+?)<' ## 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': ## elif item.args == 'update':
## patronBlock = r'<div\s+class="container-fluid greybg title-serie-lastep title-last-ep fixed-title-wrapper containerBottomBarTitle">'+block ## 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>[^<]+)<' ## 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': ## elif item.args == 'nolost':
## patronBlock = r'<h2 class="title-typology styck-top" meta-class="title-serie-danonperd">'+block ## 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>.+?)<' ## 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': ## elif item.args == 'classic':
## patronBlock = r'<h2 class="title-typology styck-top" meta-class="title-serie-classiche">'+block ## 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>.+?)<' ## 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: ## else:
## patronBlock = r'<div\s+class="container container-title-serie-new container-scheda" meta-slug="new">'+block ## 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>.+?)<' ## 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 ## debug = True
## return locals() ## return locals()
@support.scrape @support.scrape
def movies(item): def peliculas(item):
## import web_pdb; web_pdb.set_trace() ## import web_pdb; web_pdb.set_trace()
logger.debug('movies ->\n', item) info('peliculas ->\n', item)
action = 'episodes' action = 'episodios'
blacklist = ['DMCA'] blacklist = ['DMCA']
if item.args == 'genres' or item.args == 'search': if item.args == 'genres' or item.args == 'search':
@@ -90,36 +91,36 @@ def movies(item):
else: else:
end_block = r'(?P<block>.*?)<div\s+class="btn btn-lg btn-default btn-load-other-series">' 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>.+?)<' 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': if item.args == 'ined':
deflang = 'SUB-ITA' deflang = 'SUB-ITA'
patronBlock = r'<span\s+class="label label-default label-title-typology">' + end_block 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>.+?)<' ## 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': elif item.args == 'update':
patronBlock = r'<div\s+class="container-fluid greybg title-serie-lastep title-last-ep fixed-title-wrapper containerBottomBarTitle">' + end_block 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>.+?)<' patron = r'href="(?P<url>[^"]+)".*?>\s<img\s.*?src="(?P<thumb>[^"]+)"\s/>[^>]+>[^>]+>\s[^>]+>.+?class="strongText">(?P<title>.+?)<'
# elif item.args == 'nolost': # elif item.args == 'nolost':
# patronBlock = r'<h2 class="title-typology styck-top" meta-class="title-serie-danonperd">' + end_block # patronBlock = r'<h2 class="title-typology styck-top" meta-class="title-serie-danonperd">' + end_block
# pagination = True # pagination = 25
# elif item.args == 'classic': # elif item.args == 'classic':
# patronBlock = r'<h2 class="title-typology styck-top" meta-class="title-serie-classiche">' + end_block # 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>.+?)<' ## 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': ## elif item.args == 'anime':
## ##
else: else:
patronBlock = r'<div\s+class="container container-title-serie-new container-scheda" meta-slug="new">' + end_block 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>.+?)<' ## 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) # support.regexDbg(item, patronBlock, headers)
# debug = True # debug = True
return locals() return locals()
@support.scrape @support.scrape
def episodes(item): def episodios(item):
logger.debug() info()
action = 'findvideos' 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>[^>]+)">' 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 @support.scrape
def genres(item): def genres(item):
logger.debug() info()
action = 'movies' action = 'peliculas'
patronMenu = r'<li>\s<a\shref="(?P<url>[^"]+)"[^>]+>(?P<title>[^<]+)</a></li>' patronMenu = r'<li>\s<a\shref="(?P<url>[^"]+)"[^>]+>(?P<title>[^<]+)</a></li>'
patron_block = r'<ul\sclass="dropdown-menu category">(?P<block>.*?)</ul>' patron_block = r'<ul\sclass="dropdown-menu category">(?P<block>.*?)</ul>'
# debug = True # debug = True
@@ -145,42 +146,42 @@ def genres(item):
def search(item, text): def search(item, text):
logger.debug(text) info(text)
item.url = host + "/search/" + text item.url = host + "/?s=" + text
item.contentType = 'tvshow' item.contentType = 'tvshow'
item.args = 'search' item.args = 'search'
try: try:
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("%s" % line) info("%s" % line)
return [] return []
def newest(category): def newest(categoria):
logger.debug() info()
itemlist = [] itemlist = []
item = Item() item = Item()
item.contentType = 'tvshow' item.contentType = 'tvshow'
item.args = 'update' item.args = 'update'
try: try:
if category == 'tvshow': if categoria == "series":
item.url = host item.url = host
item.action = "movies" item.action = "peliculas"
itemlist = movies(item) itemlist = peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("{0}".format(line)) info("{0}".format(line))
return [] return []
return itemlist return itemlist
def findvideos(item): def findvideos(item):
logger.debug('--->', item) info('--->', item)
return support.server(item, item.url) return support.server(item, item.url)
Regular → Executable
+1 -1
View File
@@ -2,7 +2,7 @@
"id": "guardaserieicu", "id": "guardaserieicu",
"name": "Guarda Serie Icu", "name": "Guarda Serie Icu",
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"active": true, "active": false,
"thumbnail": "https://raw.githubusercontent.com/32Dexter/DexterRepo/master/media/guarda_serie.jpg", "thumbnail": "https://raw.githubusercontent.com/32Dexter/DexterRepo/master/media/guarda_serie.jpg",
"banner": "", "banner": "",
"categories": ["tvshow"], "categories": ["tvshow"],
Regular → Executable
+22 -16
View File
@@ -10,50 +10,56 @@
# possibilità di miglioramento: gestire le novità (sezione Ultimi episodi sul sito) # possibilità di miglioramento: gestire le novità (sezione Ultimi episodi sul sito)
from core.support import info
from core import support from core import support
from platformcode import config, logger from platformcode import config
host = config.get_channel_url() host = config.get_channel_url()
headers = [['Referer', host]] headers = [['Referer', host]]
@support.menu @support.menu
def mainlist(item): def mainlist(item):
tvshow = ['/serie'] tvshow = ['/serie']
return locals() 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 @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>' 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]+)' patron = r'<a href="(?P<url>[^"]+)">\s*Episodio\s*(?P<episode>[0-9]+)'
return locals() return locals()
def search(item, text): def search(item, text):
logger.debug(text) info(text)
item.contentType = 'tvshow' item.contentType = 'tvshow'
item.url = host + "/?s=" + text item.url = host + "/?s=" + text
try: try:
item.args = 'search' item.args = 'search'
return movies(item) return peliculas(item)
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("%s" % line) info("%s" % line)
return [] return []
def findvideos(item): def findvideos(item):
logger.debug('findvideos', item) support.info('findvideos', item)
data = support.match(item, headers=headers, patron=r'div class="movieplay">([^>]+)').matches data = support.match(item, headers=headers, patron=r'div class="movieplay">([^>]+)').matches
return support.server(item, data=data ) return support.server(item, data=data )
Regular → Executable
+1 -1
View File
@@ -5,7 +5,7 @@
"active": true, "active": true,
"thumbnail": "hd4me.png", "thumbnail": "hd4me.png",
"banner": "hd4me.png", "banner": "hd4me.png",
"categories": ["movie", "sub"], "categories": ["movie", "vos"],
"not_active": ["include_in_newest"], "not_active": ["include_in_newest"],
"settings": [] "settings": []
} }
Regular → Executable
+10 -9
View File
@@ -4,7 +4,6 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
from core import support from core import support
from platformcode import logger
host = support.config.get_channel_url() host = support.config.get_channel_url()
@@ -20,22 +19,22 @@ def mainlist(item):
@support.scrape @support.scrape
def movies(item): def peliculas(item):
# debug = True # debug = True
if item.args == 'alternative': 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>[^"]+)' patron = r'<a title="(?P<title>[^\(]+)\(\s*(?P<year>\d+)\)\s\D+(?P<quality>\d+p).{3}(?P<lang>[^ ]+).*?[^"]+"\s*href="(?P<url>[^"]+)'
else: 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="([^"]+)' patronNext = r'current(?:[^>]*>){2}\s*<a class="[^"]+"\s* href="([^"]+)'
return locals() return locals()
@support.scrape @support.scrape
def genre(item): def genre(item):
action = 'movies' action = 'peliculas'
blacklist =['prova '] 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): def itemHook(item):
if item.fulltitle in ['Classici Disney', 'Studio Ghibli', 'Pixar']: if item.fulltitle in ['Classici Disney', 'Studio Ghibli', 'Pixar']:
item.args = 'alternative' item.args = 'alternative'
@@ -44,19 +43,21 @@ def genre(item):
def search(item, text): def search(item, text):
logger.debug(text) support.info(text)
item.url = host + '/?s=' + text item.url = host + '/?s=' + text
try: try:
return movies(item) return peliculas(item)
# Cattura la eccezione così non interrompe la ricerca globle se il canale si rompe! # Cattura la eccezione così non interrompe la ricerca globle se il canale si rompe!
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("search except: %s" % line) support.logger.error("search except: %s" % line)
return [] return []
def findvideos(item): def findvideos(item):
url = support.match(item, patron=r'<a class=["]?bot1["]? href="([^"]+)"').match url = support.match(item, patron=r'<a class=["]?bot1["]? href="([^"]+)"').match
if not url.startswith('http'):
url = host + url
url = support.httptools.downloadpage(url, followredirect=True).url url = support.httptools.downloadpage(url, followredirect=True).url
return support.server(item, url) return support.server(item, url)
Regular → Executable
View File
Regular → Executable
+29 -53
View File
@@ -3,83 +3,59 @@
# Canale per ilcorsaronero # Canale per ilcorsaronero
# ------------------------------------------------------------ # ------------------------------------------------------------
from core import support from core import support, httptools
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
host = support.config.get_channel_url() host = support.config.get_channel_url()
logger.debug('HOST',host) support.info('HOST',host)
# host = 'https://ilcorsaronero.xyz'
headers = [['Referer', host]] headers = [['Referer', host]]
@support.menu @support.menu
def mainlist(item): def mainlist(item):
menu = [ menu = [
('BDRiP {film}', ['/categoria.php?active=0&category=1&order=data&by=DESC&page=', 'movies', [0, 'movie', True], 'undefined']), ('Film {film}', ['/cat/film', 'peliculas', [0, 'movie', True], 'undefined']),
('Cerca BDRiP... {submenu} {film}', ['/torrent-ita/1/', 'search', ['search', 'movie', True], 'movie']), ('Serie TV', ['/cat/serie-tv', 'peliculas', [0 , 'tvshow', True], 'undefined']),
('DVD {film}', ['/categoria.php?active=0&category=20&order=data&by=DESC&page=', 'movies', [0, 'movie', True], 'undefined']), ('Animazione', ['/cat/animazione', 'peliculas', [0 , 'anime', True], 'undefined']),
('Cerca DVD... {submenu} {film}', ['/torrent-ita/20/', 'search', ['search', 'movie', True], 'movie']), ('Documentari', ['/cat/altro/documentari', 'peliculas', [0 , 'documentary', True], 'undefined']),
('Screener {film}', ['/categoria.php?active=0&category=19&order=data&by=DESC&page=', 'movies', [0, 'movie', True], 'undefined']), ('Programmi TV', ['/cat/altro/programmi-tv', 'peliculas', [0 , 'tvshow', True], 'tvshow']),
('Cerca Screener.. {submenu} {film}', ['/torrent-ita/19/', 'search', ['search', 'movie', True], 'movie']), ('Video Musica', ['/cat/musica/video-musicali', 'peliculas', [0 , 'music', False], 'undefined']),
('Serie TV', ['/categoria.php?active=0&category=15&order=data&by=DES&page=', 'movies', [0 , 'tvshow', True], 'tvshow']), ('Videocorsi', ['/cat/altro/videocorsi', 'peliculas', [0 , 'music', False], 'undefined'])
('Cerca Serie TV.. {submenu}', ['/torrent-ita/15/', 'search', ['search', 'tvshow',True], 'tvshow']),
('Anime', ['/categoria.php?active=0&category=5&order=data&by=DESC&page=', '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]])
] ]
search = ''
return locals() return locals()
@support.scrape @support.scrape
def movies(item): def peliculas(item):
# debug = True debug = False
sceneTitle = item.args[2] action = 'findvideos'
if item.args[1] in ['tvshow', 'anime', 'music', 'other']: sceneTitle = item.args[2]
patron = r'>[^"<]+'
else:
patron = r'>(?P<quality>[^"<]+)'
patron += r'</td> <TD[^>]+><A class="tab" HREF="(?P<url>[^"]+)"\s*>(?P<title>[^<]+)<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<size>[^<]+)<[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>(?P<seed>[^<]+)'
if 'search' not in item.args: def itemHook(item):
item.url += str(item.args[0]) if not sceneTitle:
def itemlistHook(itemlist): item.title = item.title.replace('_', ' ')
args = item.args item.fulltitle = item.fulltitle.replace('_', ' ')
args[0] += 1 item.title = support.scrapertools.decodeHtmlentities(support.urlparse.unquote(item.title))
support.nextPage(itemlist, item, 'movies', next_page=item.url, total_pages=15)
return itemlist 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() return locals()
def search(item, text): def search(item, text):
logger.debug( text) item.url = "{}/search?{}".format(host, support.urlencode({'q': text}))
if 'all' in item.args: item.args = 'search'
item.url += text
else:
item.url += text + '.html'
try: try:
return movies(item) return peliculas(item)
# Cattura l' eccezione così non interrompe la ricerca globle se il canale si rompe!
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("search except: %s" % line) logger.error("search except: %s" % line)
return [] return []
def findvideos(item): def findvideos(item):
if item.contentType == 'tvshow': item.contentType = 'episode' if item.contentType == 'tvshow': item.contentType = 'episode'
Videolibrary = True if 'movie' in item.args else False Videolibrary = True if 'movie' in item.args else False
+2 -2
View File
@@ -1,10 +1,10 @@
{ {
"id": "ilgeniodellostreaming", "id": "ilgeniodellostreaming",
"name": "IlGenioDelloStreaming", "name": "IlGenioDelloStreaming",
"active": true, "active": false,
"language": ["ita", "sub-ita"], "language": ["ita", "sub-ita"],
"thumbnail": "ilgeniodellostreaming.png", "thumbnail": "ilgeniodellostreaming.png",
"banner": "ilgeniodellostreaming.png", "banner": "ilgeniodellostreaming.png",
"categories": ["movie", "tvshow", "anime", "sub"], "categories": ["movie", "tvshow", "anime", "vos"],
"settings": ["include_in_newest_anime"] "settings": ["include_in_newest_anime"]
} }
+32 -30
View File
@@ -6,27 +6,29 @@
from core import support from core import support
from core.support import info
from core.item import Item from core.item import Item
from platformcode import config, logger from platformcode import config
host = config.get_channel_url() host = config.get_channel_url()
headers = [['Referer', host]] headers = [['Referer', host]]
@support.menu @support.menu
def mainlist(item): def mainlist(item):
support.info(item)
film = ['/film/', film = ['/film/',
('Generi',['', 'genres', 'genres']), ('Generi',['', 'genres', 'genres']),
('Per Lettera',['/film-a-z/', 'genres', 'letter']), ('Per Lettera',['/film-a-z/', 'genres', 'letter']),
('Anni',['', 'genres', 'year']), ('Anni',['', 'genres', 'year']),
('Popolari',['/trending/?get=movies', 'movies', 'populared']), ('Popolari',['/trending/?get=movies', 'peliculas', 'populared']),
('Più Votati', ['/ratings/?get=movies', 'movies', 'populared']) ('Più Votati', ['/ratings/?get=movies', 'peliculas', 'populared'])
] ]
tvshow = ['/serie/', tvshow = ['/serie/',
('Aggiornamenti', ['/aggiornamenti-serie/', 'movies', 'update']), ('Aggiornamenti', ['/aggiornamenti-serie/', 'peliculas', 'update']),
('Popolari',['/trending/?get=tv', 'movies', 'populared']), ('Popolari',['/trending/?get=tv', 'peliculas', 'populared']),
('Più Votati', ['/ratings/?get=tv', 'movies', 'populared']) ('Più Votati', ['/ratings/?get=tv', 'peliculas', 'populared'])
] ]
@@ -34,7 +36,7 @@ def mainlist(item):
] ]
Tvshow = [ Tvshow = [
('Show TV {bullet bold}', ['/tv-show/', 'movies', '', 'tvshow']) ('Show TV {bullet bold}', ['/tv-show/', 'peliculas', '', 'tvshow'])
] ]
search = '' search = ''
@@ -43,8 +45,8 @@ def mainlist(item):
@support.scrape @support.scrape
def movies(item): def peliculas(item):
logger.debug() info()
# debugBlock = True # debugBlock = True
# debug=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>' 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']} typeContentDict={'movie': ['film'], 'tvshow': ['tv']}
typeActionDict={'findvideos': ['film'], 'episodes': ['tv']} typeActionDict={'findvideos': ['film'], 'episodios': ['tv']}
else: else:
if item.contentType == 'movie': 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' 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: else:
# TVSHOW # TVSHOW
action = 'episodes' action = 'episodios'
if item.args == 'update': if item.args == 'update':
action = 'findvideos' 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"' 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): def itemHook(item):
item.contentType = 'episode' item.contentType = 'episode'
return item return item
@@ -93,10 +95,10 @@ def movies(item):
@support.scrape @support.scrape
def episodes(item): def episodios(item):
logger.debug() 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>[^"]+)">.*?'\ patron = r'<a href="(?P<url>[^"]+)"><img src="(?P<thumb>[^"]+)">.*?'\
'<div class="numerando">(?P<episode>[^<]+).*?<div class="episodiotitle">'\ '<div class="numerando">(?P<episode>[^<]+).*?<div class="episodiotitle">'\
'[^>]+>(?P<title>[^<]+)<\/a>' '[^>]+>(?P<title>[^<]+)<\/a>'
@@ -106,9 +108,9 @@ def episodes(item):
@support.scrape @support.scrape
def genres(item): def genres(item):
logger.debug(item) info(item)
action='movies' action='peliculas'
if item.args == 'genres': if item.args == 'genres':
patronBlock = r'<div class="sidemenu"><h2>Genere</h2>(?P<block>.*?)/li></ul></div>' patronBlock = r'<div class="sidemenu"><h2>Genere</h2>(?P<block>.*?)/li></ul></div>'
elif item.args == 'year': elif item.args == 'year':
@@ -124,50 +126,50 @@ def genres(item):
def search(item, text): def search(item, text):
logger.debug(text) info(text)
import uuid import uuid
text = text.replace(' ', '+') text = text.replace(' ', '+')
item.url = host + '/?' + uuid.uuid4().hex + '=' + uuid.uuid4().hex + '&s=' + text item.url = host + '/?' + uuid.uuid4().hex + '=' + uuid.uuid4().hex + '&s=' + text
try: try:
item.args = 'search' item.args = 'search'
return movies(item) return peliculas(item)
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("%s" % line) info("%s" % line)
return [] return []
def newest(category): def newest(categoria):
logger.debug(category) info(categoria)
itemlist = [] itemlist = []
item = Item() item = Item()
if category == 'movie': if categoria == 'peliculas':
item.contentType = 'movie' item.contentType = 'movie'
item.url = host + '/film/' item.url = host + '/film/'
elif category == 'tvshow': elif categoria == 'series':
item.args = 'update' item.args = 'update'
item.contentType = 'tvshow' item.contentType = 'tvshow'
item.url = host + '/aggiornamenti-serie/' item.url = host + '/aggiornamenti-serie/'
## elif category == 'anime': ## elif categoria == 'anime':
## item.contentType = 'tvshow' ## item.contentType = 'tvshow'
## item.url = host + '/anime/' ## item.url = host + '/anime/'
try: try:
item.action = 'movies' item.action = 'peliculas'
itemlist = movies(item) itemlist = peliculas(item)
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("{0}".format(line)) info("{0}".format(line))
return [] return []
return itemlist return itemlist
def findvideos(item): def findvideos(item):
logger.debug() info()
matches = support.match(item, patron=[r'var ilinks\s?=\s?([^;]+)',r' href="#option-\d">([^\s]+)\s*([^\s]+)']).matches matches = support.match(item, patron=[r'var ilinks\s?=\s?([^;]+)',r' href="#option-\d">([^\s]+)\s*([^\s]+)']).matches
itemlist = [] itemlist = []
list_url = [] list_url = []
@@ -191,7 +193,7 @@ def findvideos(item):
for i, url in enumerate(list_url): for i, url in enumerate(list_url):
itemlist.append(support.Item( itemlist.append(support.Item(
channel=item.channel, channel=item.channel,
# title=list_servers[i], title=list_servers[i],
url=url, url=url,
action='play', action='play',
quality=list_quality[i], quality=list_quality[i],
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"id": "ilgeniodellostreaming_cam", "id": "ilgeniodellostreaming_cam",
"name": "IlGenioDelloStreaming CAM", "name": "IlGenioDelloStreaming CAM",
"active": false, "active": true,
"language": ["ita"], "language": ["ita"],
"thumbnail": "ilgeniodellostreaming.png", "thumbnail": "ilgeniodellostreaming.png",
"banner": "ilgeniodellostreaming.png", "banner": "ilgeniodellostreaming.png",
+29 -25
View File
@@ -5,8 +5,9 @@
from core import support from core import support
from core.support import info
from core.item import Item from core.item import Item
from platformcode import config, logger from platformcode import config
host = config.get_channel_url() host = config.get_channel_url()
headers = [['Referer', host]] headers = [['Referer', host]]
@@ -14,7 +15,7 @@ headers = [['Referer', host]]
@support.menu @support.menu
def mainlist(item): def mainlist(item):
film = ['/film/', film = ['/film/',
('In Sala', ['', 'movies', 'sala']), ('In Sala', ['', 'peliculas', 'sala']),
('Generi',['', 'genres', 'genres']), ('Generi',['', 'genres', 'genres']),
('Per Lettera',['/catalog/all', 'genres', 'az']), ('Per Lettera',['/catalog/all', 'genres', 'az']),
('Anni',['', 'genres', 'year'])] ('Anni',['', 'genres', 'year'])]
@@ -23,71 +24,74 @@ def mainlist(item):
@support.scrape @support.scrape
def movies(item): def peliculas(item):
if item.args == 'sala': if item.text:
patronBlock = r'insala(?P<block>.*?)<header>' data = support.httptools.downloadpage(host + '/?s=' + item.text, post={'story': item.text, 'do': 'search', 'subaction': 'search'}).data
patron = r'<img src="(?P<thumb>[^"]+)[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>\s*(?P<rating>[^<]+)[^>]+>[^>]+>(?P<quality>[^<]+)[^>]+>[^>]+>[^>]+>[^>]+><a href="(?P<url>[^"]+)">(?P<title>[^<]+)[^>]+>[^>]+>[^>]+>(?P<year>\d{4})' patron = '<img src="(?P<thumb>[^"]+)(?:[^>]+>){8}\s*<a href="(?P<url>[^"]+)[^>]+>(?P<title>[^<]+)(?:[^>]+>){4}IMDb\s(?P<rating>[^<]+)(?:[^>]+>){2}(?P<year>\d+)'
elif item.args == 'az':
patron = r'<img src="(?P<thumb>[^"]+)[^>]+>[^>]+>[^>]+>[^>]+><a href="(?P<url>[^"]+)[^>]+>(?P<title>[^<]+)<[^>]+>[^>]+>[^>]+>.*?<span class="labelimdb">(?P<rating>[^>]+)<'
else: 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() return locals()
@support.scrape @support.scrape
def genres(item): def genres(item):
action='movies' action='peliculas'
if item.args == 'genres': if item.args == 'genres':
patronBlock = r'<div class="sidemenu">\s*<h2>Genere</h2>(?P<block>.*?)</ul' patronBlock = r'<div class="sidemenu">\s*<h2>Genere</h2>(?P<block>.*?)</ul'
elif item.args == 'year': elif item.args == 'year':
item.args = 'genres'
patronBlock = r'<div class="sidemenu">\s*<h2>Anno di uscita</h2>(?P<block>.*?)</ul' patronBlock = r'<div class="sidemenu">\s*<h2>Anno di uscita</h2>(?P<block>.*?)</ul'
elif item.args == 'az': elif item.args == 'az':
patronBlock = r'<div class="movies-letter">(?P<block>.*?)<div class="clearfix">' patronBlock = r'<div class="movies-letter">(?P<block>.*?)<div class="clearfix">'
patronMenu = r'<a(?:.+?)?href="(?P<url>.*?)"[ ]?>(?P<title>.*?)<\/a>' patronMenu = r'<a(?:.+?)?href="(?P<url>.*?)"[ ]?>(?P<title>.*?)<\/a>'
if 'genres' in item.args:
patronGenreMenu = patronMenu
return locals() return locals()
def search(item, text): def search(item, text):
logger.debug(text) info(text)
text = text.replace(' ', '+') item.text = text
item.url = host + "/search/" + text
try: try:
return movies(item) return peliculas(item)
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("%s" % line) info("%s" % line)
return [] return []
def newest(category): def newest(categoria):
logger.debug(category) info(categoria)
itemlist = [] itemlist = []
item = Item() item = Item()
if category == 'movie': if categoria == 'peliculas':
item.contentType = 'movie' item.contentType = 'movie'
item.url = host + '/film/' item.url = host + '/film/'
try: try:
item.action = 'movies' item.action = 'peliculas'
itemlist = movies(item) itemlist = peliculas(item)
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("{0}".format(line)) info("{0}".format(line))
return [] return []
return itemlist return itemlist
def findvideos(item): def findvideos(item):
logger.debug() info()
urls = [] urls = []
data = support.match(item).data data = support.match(item).data
urls += support.match(data, patron=r'id="urlEmbed" value="([^"]+)').matches urls += support.match(data, patron=r'id="urlEmbed" value="([^"]+)').matches
+11
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
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)
Regular → Executable
+3 -3
View File
@@ -1,11 +1,11 @@
{ {
"id": "italiaserie", "id": "italiaserie",
"name": "Italia Serie", "name": "Italia Serie",
"active": true, "active": false,
"language": ["ita","sub-ita"], "language": ["ita","sub-ita"],
"thumbnail": "italiaserie.png", "thumbnail": "italiaserie.png",
"bannermenu": "italiaserie.png", "bannermenu": "italiaserie.png",
"categories": ["tvshow", "sub"], "categories": ["tvshow", "vos"],
"not_active": ["include_in_newest_movie", "include_in_newest_anime"], "not_active": ["include_in_newest_peliculas", "include_in_newest_anime"],
"settings": [] "settings": []
} }
Regular → Executable
+21 -21
View File
@@ -15,30 +15,30 @@ headers = [['Referer', host]]
@support.menu @support.menu
def mainlist(item): def mainlist(item):
tvshow = ['', tvshow = ['',
('Aggiornamenti', ['/aggiornamento-episodi/', 'movies', 'update']), ('Aggiornamenti', ['/aggiornamento-episodi/', 'peliculas', 'update']),
('Top 10', ['/top-10', 'movies', 'top']), ('Top 10', ['/top-10', 'peliculas', 'top']),
('Netflix {tv submenu}', ['/genere/netflix', 'movies']) ('Netflix {tv submenu}', ['/genere/netflix', 'peliculas'])
] ]
return locals() return locals()
@support.scrape @support.scrape
def movies(item): def peliculas(item):
# debug=True # debug=True
blacklist = ['Aggiornamento Episodi'] 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>[^"]+)"[^>]+>' patron = r'<div class="post-thumb">\s*<a href="(?P<url>[^"]+)" title="(?P<title>[^"\[]+)[^>]+>\s*<img src="(?P<thumb>[^"]+)"[^>]+>'
if item.args == 'update': 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 />(?:[^>]+>)?(?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>[^\)]+))?' 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': if item.args == 'top':
patron = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)</a>(?:[^>]+>){3}<img.*?src="(?P<thumb>[^"]+)"[^>]+>(?:[^>]+>){5}:\s*(?P<rating>[^/]+)' patron = r'<a href="(?P<url>[^"]+)">(?P<title>[^<]+)</a>(?:[^>]+>){3}<img.*?src="(?P<thumb>[^"]+)"[^>]+>(?:[^>]+>){5}:\s*(?P<rating>[^/]+)'
if item.args =='a-z': if item.args =='a-z':
pagination = True pagination = ''
patron = r'<li ><a href="(?P<url>[^"]+)" title="(?P<title>[^"]+)"' patron = r'<li ><a href="(?P<url>[^"]+)" title="(?P<title>[^"]+)"'
patronNext = r'<a class="next page-numbers" href="(.*?)">' patronNext = r'<a class="next page-numbers" href="(.*?)">'
@@ -50,7 +50,7 @@ def movies(item):
@support.scrape @support.scrape
def episodes(item): def episodios(item):
res = support.match(item, patron=r'<a href="([^"]+)">&gt;') res = support.match(item, patron=r'<a href="([^"]+)">&gt;')
if res.match: data = support.match(res.match).data if res.match: data = support.match(res.match).data
else: data = res.data else: data = res.data
@@ -66,38 +66,38 @@ def episodes(item):
@support.scrape @support.scrape
def category(item): def category(item):
action = 'movies' action = 'peliculas'
patron = r'<li class="cat-item.*?href="(?P<url>[^"]+)".*?>(?P<title>.*?)</a>' patron = r'<li class="cat-item.*?href="(?P<url>[^"]+)".*?>(?P<title>.*?)</a>'
return locals() return locals()
def search(item, text): def search(item, texto):
logger.debug(text) support.info("s=", texto)
item.url = host + "/?s=" + text item.url = host + "/?s=" + texto
item.contentType = 'tvshow' item.contentType = 'tvshow'
try: try:
return movies(item) return peliculas(item)
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error("%s" % line) support.info("%s" % line)
return [] return []
def newest(category): def newest(categoria):
logger.debug("newest", category) support.info("newest", categoria)
itemlist = [] itemlist = []
item = Item() item = Item()
try: try:
if category == 'tvshow': if categoria == "series":
item.url = host + "/aggiornamento-episodi/" item.url = host + "/aggiornamento-episodi/"
item.action = "movies" item.action = "peliculas"
item.args = "update" item.args = "update"
item.contentType = "episode" item.contentType = "episode"
itemlist = movies(item) itemlist = peliculas(item)
if itemlist[-1].action == "movies": if itemlist[-1].action == "peliculas":
itemlist.pop() itemlist.pop()
# Continua la ricerca in caso di errore # Continua la ricerca in caso di errore
Regular → Executable
View File
Regular → Executable
+46 -58
View File
@@ -4,7 +4,7 @@
# ------------------------------------------------------------ # ------------------------------------------------------------
import requests import requests
from core import support from core import support, httptools
from platformcode import logger from platformcode import logger
DRM = 'com.widevine.alpha' DRM = 'com.widevine.alpha'
@@ -24,26 +24,26 @@ headers = {
@support.menu @support.menu
def mainlist(item): def mainlist(item):
top = [('Dirette {bullet bold}', ['', 'live']), top = [('Dirette {bold}', ['', 'live']),
('Replay {bullet bold}', ['', 'replay_channels'])] ('Replay {bold}', ['', 'replay_channels'])]
menu = [('Programmi TV {bullet bold}', ['/tutti-i-programmi', 'movies', '', 'tvshow']), menu = [('Programmi TV {bullet bold}', ['/tutti-i-programmi', 'peliculas', '', 'tvshow']),
('Teche La7 {bullet bold}', ['/i-protagonisti', 'movies', '', 'tvshow'])] ('Teche La7 {bullet bold}', ['/la7teche', 'peliculas', '', 'tvshow'])]
search = '' search = ''
return locals() return locals()
def live(item): def live(item):
itemlist = [item.clone(title='La7', fulltitle='La7', url= host + '/dirette-tv', action='findvideos', forcethumb = True), itemlist = [item.clone(title=support.typo('La7', 'bold'), fulltitle='La7', url= host + '/dirette-tv', action='findvideos', forcethumb = True, no_return=True),
item.clone(title='La7d', fulltitle='La7d', url= host + '/live-la7d', action='findvideos', forcethumb = 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, mode='live') return support.thumb(itemlist, live=True)
def replay_channels(item): def replay_channels(item):
itemlist = [item.clone(title='La7', fulltitle='La7', url= host + '/rivedila7/0/la7', action='replay_menu', forcethumb = True), itemlist = [item.clone(title=support.typo('La7', 'bold'), 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)] item.clone(title=support.typo('La7d', 'bold'), fulltitle='La7d', url= host + '/rivedila7/0/la7d', action='replay_menu', forcethumb = True)]
return support.thumb(itemlist, mode='live') return support.thumb(itemlist, live=True)
@support.scrape @support.scrape
@@ -51,7 +51,7 @@ def replay_menu(item):
action = 'replay' action = 'replay'
patron = r'href="(?P<url>[^"]+)"><div class="giorno-text">\s*(?P<day>[^>]+)</div><[^>]+>\s*(?P<num>[^<]+)</div><[^>]+>\s*(?P<month>[^<]+)<' patron = r'href="(?P<url>[^"]+)"><div class="giorno-text">\s*(?P<day>[^>]+)</div><[^>]+>\s*(?P<num>[^<]+)</div><[^>]+>\s*(?P<month>[^<]+)<'
def itemHook(item): 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 item
return locals() return locals()
@@ -61,7 +61,7 @@ def replay(item):
action = 'findvideos' 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>[^<]+)<' 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): 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.contentTitle = item.fulltitle = item.show = item.name
item.thumbnail = 'http:' + item.t item.thumbnail = 'http:' + item.t
item.fanart = item.thumbnail item.fanart = item.thumbnail
@@ -70,76 +70,63 @@ def replay(item):
return locals() return locals()
def search(item, text): def search(item, text):
logger.debug(text)
item.url = host + '/tutti-i-programmi' item.url = host + '/tutti-i-programmi'
item.search = text item.search = text
try: try:
return movies(item) return peliculas(item)
except: except:
import sys import sys
for line in sys.exc_info(): for line in sys.exc_info():
logger.error('search log:', line) support.info('search log:', line)
return [] return []
@support.scrape @support.scrape
def movies(item): def peliculas(item):
search = item.search search = item.search
disableAll = True action = 'episodios'
action = 'episodes' 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>[^<]+)<' patron = r'<a href="(?P<url>[^"]+)"[^>]+><div class="[^"]+" data-background-image="(?P<t>[^"]+)"></div><div class="titolo">\s*(?P<title>[^<]+)<'
if 'la7teche' in item.url:
patron = r'<a href="(?P<url>[^"]+)" title="(?P<title>[^"]+)" class="teche-i-img".*?url\(\'(?P<thumb>[^\']+)'
def itemHook(item): def itemHook(item):
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 item.fanart = item.thumb
return item return item
return locals() return locals()
@support.scrape @support.scrape
def episodes(item): def episodios(item):
data = support.match(item).data
action = 'findvideos' action = 'findvideos'
if '>puntate<' in data: addVideolibrary = False
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
downloadEnabled = False downloadEnabled = False
def itemHook(item): if 'la7teche' in item.url:
if item.Thumb: item.t = item.Thumb patron = r'<a href="(?P<url>[^"]+)">\s*<div class="holder-bg">.*?data-background-image="(?P<thumb>[^"]+)(?:[^>]+>){4}\s*(?P<title>[^<]+)(?:(?:[^>]+>){2}\s*(?P<plot>[^<]+))?'
item.thumbnail = 'http:' + item.t if item.t.startswith('//') else item.t if item.t else item.thumbnail else:
if item.Title: item.title = item.Title data = str(support.match(item.url, patron=r'"home-block home-block--oggi(.*?)</section>').matches)
if item.date: data += httptools.downloadpage(item.url + '/video').data
item.title = support.re.sub(r'[Pp]untata (?:del )?\d+/\d+/\d+', '', item.title)
item.title = '{} [{}]'.format(item.title, item.date) patron = r'item[^>]+>\s*<a href="(?P<url>[^"]+)">.*?image="(?P<thumb>[^"]+)(?:[^>]+>){4,5}\s*(?P<title>[\d\w][^<]+)(?:(?:[^>]+>){7}\s*(?P<title2>[\d\w][^<]+))?'
if item.desc: item.plot = item.desc patronNext = r'<a href="([^"]+)">'
item.forcethumb = True
item.fanart = item.thumbnail
return item
return locals() return locals()
def findvideos(item): def findvideos(item):
logger.debug() support.info()
return support.server(item, itemlist=[item.clone(server='directo', action='play')]) if item.livefilter:
for it in live(item):
def play(item): if it.fulltitle == item.livefilter:
logger.debug() item = it
break
data = support.match(item).data data = support.match(item).data
url = support.match(data, patron=r'''["]?dash["]?\s*:\s*["']([^"']+)["']''').match url = support.match(data, patron=r'''["]?dash["]?\s*:\s*["']([^"']+)["']''').match
if url: if url:
preurl = support.match(data, patron=r'preTokenUrl = "(.+?)"').match 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 match = support.match(data, patron='/content/entry/data/(.*?).mp4').match
if 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' 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)
Regular → Executable
+3 -3
View File
@@ -1,10 +1,10 @@
{ {
"id": "mediasetplay", "id": "mediasetplay",
"name": "Mediaset Play", "name": "Mediaset play infinity [free]",
"active": true, "active": true,
"language": ["ita"], "language": ["ita"],
"thumbnail": "mediasetplay.png", "thumbnail": "mediasetplayinfinity.png",
"banner": "mediasetplay.png", "banner": "mediasetplayinfinity.png",
"categories": ["movie", "tvshow", "documentary", "live"], "categories": ["movie", "tvshow", "documentary", "live"],
"not_active": ["include_in_newest"], "not_active": ["include_in_newest"],
"default_off": ["include_in_global_search"], "default_off": ["include_in_global_search"],

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