diff --git a/grab/pt_vodafone/channel.list b/grab/pt_vodafone/channel.list new file mode 100644 index 000000000..62b1f677b --- /dev/null +++ b/grab/pt_vodafone/channel.list @@ -0,0 +1,260 @@ +## From app +2670 "SIC" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/807cd0cdbf314c44a0a5d9c852b2f835_19/version/0/width/120/height/75/quality/100" +2671 "TVI" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/a70ebda1d51b436d909cebf8b424b10e/version/0/width/120/height/75/quality/100" +##2673 "História SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/3ffe30fdefa448ec8571115ff786ef14_19/version/0/width/120/height/75/quality/100" +##2674 "SyFy SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/656c66e4f9784c5aacfe8a056df4e4b3_19/version/0/width/120/height/75/quality/100" +2675 "Eurosport" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/9e5ca9dad53a4dc88a3e0eb367015327_19/version/0/width/120/height/75/quality/100" +2687 "Sport TV 1" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/a524ac5886ff494086e707103e124cc7/version/0/width/120/height/75/quality/100" +2688 "Sport TV 2" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/2f08d170f2a34e6390eb533a3d86538e/version/0/width/120/height/75/quality/100" +2689 "Sport TV 3" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/bae1291a65b240abbc98c8d92f7d9718/version/0/width/120/height/75/quality/100" +2690 "Sport TV 4" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/316b4ac356244f4f96c4c64b05946be3/version/0/width/120/height/75/quality/100" +2691 "Sport TV 5" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/27da1d086e1e4a8a9e3003d3ef5e5f4e/version/0/width/120/height/75/quality/100" +2692 "Fuel TV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/721d0d21b99c4b239ccb9b2daf54596c_19/version/0/width/120/height/75/quality/100" +2700 "AXN Movies" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/37500ae831f84b30822e5bd5e04fd882_19/version/0/width/120/height/75/quality/100" +2701 "SyFy" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/4a0409944e5542a9b5acb0647467203a_19/version/0/width/120/height/75/quality/100" +2706 "Fashion TV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/0b7ab6b146da42d582433ebde0ee70ee_19/version/0/width/120/height/75/quality/100" +2709 "Canção Nova" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/5604f4864c104703bb3b46ec71f91114_19/version/0/width/120/height/75/quality/100" +2710 "TV Galícia" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/3af7d6ee83df46d7ab1d30a3c072e61d_19/version/0/width/120/height/75/quality/100" +2712 "TVCine Top" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/2723399dc06b4b9e8914b29467e23dab_19/version/0/width/120/height/75/quality/100" +2713 "AXN" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/a44800b441224087aea741f0bf74263c_19/version/0/width/120/height/75/quality/100" +2715 "STAR CHANNEL" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/777adf78621046109570913715ab336c_19/version/1/width/120/height/75/quality/100" +2717 "STAR LIFE" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/5022d2f187a646d696cb57f977a0c9d1_19/version/1/width/120/height/75/quality/100" +2723 "Trace Toca" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/3178257df111483684efa8efb63e5309_19/version/0/width/120/height/75/quality/100" +2727 "RTP Memória" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/79a94c670a9943d895f2eaca4e72780b_19/version/0/width/120/height/75/quality/100" +2728 "RTP África" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/b61b8cc6bbaf4aa6961861c2e072290e_19/version/0/width/120/height/75/quality/100" +2736 "AR TV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/3cef63b6677f451d8164a908b6a1aa00_19/version/0/width/120/height/75/quality/100" +2741 "National Geographic" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/dfe23167f5144543bab68ea436dd1d15_19/version/0/width/120/height/75/quality/100" +2742 "TV5Monde" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/fd9db0bfa1e74eaeb29f0034eec69fa2_19/version/0/width/120/height/75/quality/100" +2743 "CMUSIC" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/b94207010d994916a318e040c2d22f72_19/version/0/width/120/height/75/quality/100" +#2744 "Baby TV SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/6e324dd3e2db4ca6998cf6a1bb73870d_19/version/0/width/120/height/75/quality/100" +2747 "Euronews" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/3346c27cb8044e5dbc17548d9610e2e8_19/version/0/width/120/height/75/quality/100" +2748 "TVEi" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/dd60890cbbbf4704a89968766f0a1c3a_19/version/0/width/120/height/75/quality/100" +2749 "TVE 24" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/a861422493ed454994f7b7a69183846b_19/version/0/width/120/height/75/quality/100" +2750 "CNBC Europe" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/969b0d2e8fe74a0db71c223f404f0ac6_19/version/0/width/120/height/75/quality/100" +2751 "TPA" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/4e002a07acb84b02a86a19dba5ee102e_19/version/0/width/120/height/75/quality/100" +2754 "MTV 00s" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/c7f1040e19d940da8eec26928c0319de/version/0/width/120/height/75/quality/100" +2757 "ProTV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/25f5f1ac6ede4d65ab0ebf0f05908088_19/version/0/width/120/height/75/quality/100" +2760 "Bloomberg" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/aa36677a7a9941af9e07444dd21b525d_19/version/0/width/120/height/75/quality/100" +2765 "Nautical Channel" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/3ecdccfb21a5429e8d44bf2f29e4dd34_19/version/0/width/120/height/75/quality/100" +2766 "Phoenix" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/1957a8e6b0c44b66ab2e0ad91fbec763_19/version/0/width/120/height/75/quality/100" +2768 "Porto Canal" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/16cdb28b90cb46b1aee589be8a477eff_19/version/0/width/120/height/75/quality/100" +2769 "France 24 English" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/d575daeef80442598a33b1cffa5a21a5_19/version/0/width/120/height/75/quality/100" +2770 "France 24 FR" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/e5013d5b45304e77a8911ae9d76c59ea_19/version/0/width/120/height/75/quality/100" +2772 "RAI 1" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/30137cc9eb7f472bb80cfbea196f524d_19/version/0/width/120/height/75/quality/100" +2779 "MCM Top" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/18855da1bce845b7b7611689f2303f8b_19/version/0/width/120/height/75/quality/100" +2781 "DW" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/be6a088466484a99a99842ec524895f6_19/version/0/width/120/height/75/quality/100" +2784 "AlJazeera" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/803a229c5eb146ba90f22a763c49c0c7_19/version/0/width/120/height/75/quality/100" +2812 "Record News" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/f7b7a4b51ead4f5d8028669c0287ff7c_19/version/0/width/120/height/75/quality/100" +2825 "RTP2" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/f47f5f7d4acd493891cb1225d10024e2_19/version/0/width/120/height/75/quality/100" +2831 "TVCine Emotion" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/c3a60cce67a347ecad3ae6fae99e1646_19/version/0/width/120/height/75/quality/100" +2832 "TVCine Action" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/c47a0066a7244f51beeeba84fbf46424_19/version/0/width/120/height/75/quality/100" +2833 "AXN White" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/f54c7528c31947c8be68f13748cd15b0_19/version/0/width/120/height/75/quality/100" +2837 "E!" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/502684fe51d24e6cb81551b3b2d54ca9_19/version/0/width/120/height/75/quality/100" +2843 "Localvisão" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/c704554bdcac437490143bc61b9aec87_19/version/0/width/120/height/75/quality/100" +2844 "24Kitchen" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/481cf968448d4b07b8c675552a16ef8a_19/version/0/width/120/height/75/quality/100" +2845 "STAR MOVIES" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/3e7474629a5b416c8deaf0919002e6df_19/version/1/width/120/height/75/quality/100" +2846 "National Geographic Wild" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/b253e37f1334406f8e93c4b1c37470de_19/version/0/width/120/height/75/quality/100" +2847 "STAR CRIME" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/25769e8d419c4ea6b63d8097352b9cae_19/version/1/width/120/height/75/quality/100" +2849 "Sky News" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/4d862190e6c549ad8f006f429ac53e52_19/version/0/width/120/height/75/quality/100" +2852 "Benfica TV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/477cd7f5a7354324b6a9a27db865708f_19/version/0/width/120/height/75/quality/100" +2854 "TV Record" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/36bba6cd2b5746dc9a073e3e7817ec30_19/version/0/width/120/height/75/quality/100" +2859 "RTL" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/ed68fc2259e34e329d66e4974331526a_19/version/0/width/120/height/75/quality/100" +2884 "TCV News" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/cb1a4d4cc1b0472eb67ce43136c8f332_19/version/0/width/120/height/75/quality/100" +2890 "NHK World" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/cf86b0c0b7714c90a27e881bbbb61ecc_19/version/0/width/120/height/75/quality/100" +2893 "STAR COMEDY" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/ea358343e7c4465c93ad1872e52ff0d6_19/version/1/width/120/height/75/quality/100" +2897 "KBS WORLD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/e23a084076eb46cabc7a2fce55e6c113_19/version/0/width/120/height/75/quality/100" +2902 "Canal Q" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/e1ebf412bd444a61afdd2d9fa1263e1a_19/version/0/width/120/height/75/quality/100" +2903 "Fight Network" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/4dcc70dcdde34d708b9ec9b1a861c8ad_19/version/0/width/120/height/75/quality/100" +2914 "Discovery" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/fa191c5ad6ba48b9bca783dafabc7498_19/version/0/width/120/height/75/quality/100" +2915 "SIC Radical" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/5a461799731d4344b277dcae381f0a89_19/version/0/width/120/height/75/quality/100" +2925 "MTV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/9108b7d984a54a43b441bb44b9a84b85_19/version/0/width/120/height/75/quality/100" +2927 "Kuriakos TV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/57feab802d804da792867ebeacd0db17_19/version/0/width/120/height/75/quality/100" +2930 "Sport TV +" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/ce24543d73ab43b1b53dea9dc25d6854/version/0/width/120/height/75/quality/100" +2931 "Mezzo Live" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/24f9fa496e70422a9830c2549dd1de0f_19/version/0/width/120/height/75/quality/100" +2933 "Insight" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/08526de0382f4a2095f6063d7a7490cd_19/version/0/width/120/height/75/quality/100" +2934 "Docubox" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/efb948f799c2406187f8e3dcf9e29b1d_19/version/0/width/120/height/75/quality/100" +2935 "SIC Notícias" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/cf33e03117ac4ece8cc3b260d4869c4a/version/0/width/120/height/75/quality/100" +2936 "SIC Mulher" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/c23aa79c4be64a78be3ea5843c079529_19/version/0/width/120/height/75/quality/100" +2937 "SIC Caras" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/71c7fa677b894fecada52f4fdb1defb5_19/version/0/width/120/height/75/quality/100" +2938 "SIC K" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/e45f250d72334fbdb3dbe1d91c4bc751_19/version/0/width/120/height/75/quality/100" +2993 "Travel" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/9487453658fd42d9a8e515ee072328e7_19/version/0/width/120/height/75/quality/100" +2994 "Food Network" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/57a9e479ba34434a8ef249b0cd560c94_19/version/0/width/120/height/75/quality/100" +2996 "AMC" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/1b0fa6a1c5544a24bdea82e2bc9222e3_19/version/0/width/120/height/75/quality/100" +3004 "Sporting TV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/868cdc88b86b4033a6be7fd2652bd05e_19/version/0/width/120/height/75/quality/100" +3012 "Disney Channel" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/2887957962b24db6beee92d0b470a54c_19/version/0/width/120/height/75/quality/100" +3015 "Trace" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/bc50304a4b45406595c55d24d0c3ff01_19/version/0/width/120/height/75/quality/100" +3016 "Odisseia" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/121e6e261b8749749c53c4248026ee49_19/version/0/width/120/height/75/quality/100" +3017 "AMC Break" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/af39b08b3262477cbfd49e8a506855d4_19/version/1/width/120/height/75/quality/100" +3019 "ARIRANG TV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/083bfe803259450b9e59de9d799ae2b6_19/version/0/width/120/height/75/quality/100" +3020 "TV Globo" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/f3715346f3e748c088eeacef18bef34b_19/version/0/width/120/height/75/quality/100" +3024 "TVCine Edition" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/6ba9073760e2487488ada139d1b1f7b7_19/version/0/width/120/height/75/quality/100" +3026 "Hollywood" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/d3a18b81bedc48c6aaf41b64c3d570fd_19/version/0/width/120/height/75/quality/100" +3027 "Cinemundo" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/653fc31c29e34d62a434156b905c7cff_19/version/0/width/120/height/75/quality/100" +3028 "RTP1" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/a1bef425c634497b9341957d36e692c3_19/version/0/width/120/height/75/quality/100" +3414 "CMTV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/9059345359844b3ca594134c8d81ffc0_19/version/0/width/120/height/75/quality/100" +3885 "DAZN 1" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/e9ce8b8d6d2e48df8e096cd271cc982d/version/1/width/120/height/75/quality/100" +3886 "DAZN 2" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/08734341d4c9452dbe272112d5a3aaee/version/1/width/120/height/75/quality/100" +3887 "DAZN 3" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/7c03993042f64f2e80b224a52c87f6e7/version/1/width/120/height/75/quality/100" +3888 "DAZN 4" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/9f8ed7e32fb04f819475d9eb5a38d2d5/version/1/width/120/height/75/quality/100" +3889 "DAZN 5" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/53aa4f7847834e1f8678067be941c238/version/1/width/120/height/75/quality/100" +3890 "DAZN 6" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/2e6186034d444f83b0bf2a87836d123b/version/1/width/120/height/75/quality/100" +4862 "SportTV NBA" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/e0b906090d974186914f5cc909c5dce6/version/0/width/120/height/75/quality/100" +5043 "EuroSport 2" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/13130dde270143ea90c7ad709cd33cda_19/version/0/width/120/height/75/quality/100" +5583 "A Bola TV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/81847fc044e84e7f8f3fc9b7a1cb7d01_19/version/1/width/120/height/75/quality/100" +5585 "Canal 11" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/3c6048c60dc042fd84e395b33d1f049e_19/version/0/width/120/height/75/quality/100" +5609 "S+" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/c63940e416dd47b28de10aa3477408b0_19/version/0/width/120/height/75/quality/100" +5610 "FREEDOM" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/309a6fca4d47427ca9f5c8145a0348c1/version/0/width/120/height/75/quality/100" +5678 "CNN Portugal" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/15dc865f76db4f7baddb09d728bd1088/version/0/width/120/height/75/quality/100" +7075 "GameToon" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/28aac14ad6f7411092bc81bc383cc85b_19/version/0/width/120/height/75/quality/100" +7084 "RTP Açores" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/7e72b63606b74facb84d4a4be512ef6b_19/version/0/width/120/height/75/quality/100" +7090 "Casa e Cozinha" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/e465476b8a8545488e8310c1df29e55d_19/version/0/width/120/height/75/quality/100" +7185 "Panda" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/85009bcb0b8b45e7bc140a4832ca014b_19/version/0/width/120/height/75/quality/100" +7187 "RTP3" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/d430a0822b5f469ca320bf6d6723f0ca_19/version/0/width/120/height/75/quality/100" +7188 "Panda Kids" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/9352c739e9b34d7b9aad308b90f521e7_19/version/0/width/120/height/75/quality/100" +7250 "Sport TV 6" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/f31ce4c726dd4382915bfdea05a3c50f/version/0/width/120/height/75/quality/100" +7522 "Disney Junior" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/bbbf77ecab4440d0876889aa0d62b586/version/0/width/120/height/75/quality/100" +8005 "Cartoonito" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/14dd98d3e0574155bf9e8dee613d3161_19/version/2/width/120/height/75/quality/100" +8006 "Cartoon Network" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/23dffe336ee24fba9879f8b43eb49571_19/version/0/width/120/height/75/quality/100" +8013 "GINX Esports TV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/25a531732c4d4ff99bab6793ad20be65_19/version/0/width/120/height/75/quality/100" +8124 "iConcerts" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/655bd3fbd7764b85b6c216cf352fa320_19/version/0/width/120/height/75/quality/100" +8368 "UNIFE TV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/2b0d86675bb8428e91c55eada3982d01_19/version/0/width/120/height/75/quality/100" +8396 "CNN" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/48a5c03f05264f969c71e56992a98847_19/version/1/width/120/height/75/quality/100" +8397 "TVI Reality" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/8ae0590068384f8b85de367df743188e_19/version/1/width/120/height/75/quality/100" +8398 "TLC" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/bd02f77c26cb4380a1da6a2fe90a938d_19/version/1/width/120/height/75/quality/100" +8399 "V+ TVI" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/e2cbe6f3c7de4a77a37e4eb878b789f7_19/version/2/width/120/height/75/quality/100" +8424 "RTP Madeira" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/d6249f5eef264202874dfdd5de492a9e_19/version/1/width/120/height/75/quality/100" +8426 "AMC Crime" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/d01e00520a5a4a2aaa1e1bf32f199dd5_19/version/1/width/120/height/75/quality/100" +8529 "Dizi" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/87e626cfaddd45bba7703e3df96d2c38_19/version/0/width/120/height/75/quality/100" +8598 "BenficaTV Multicam 1" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/7ba831b33ef34380b3b5b462bbf355cf/version/0/width/120/height/75/quality/100" +8599 "BenficaTV Multicam 2" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/6d713fb010f543a7a1e9848d6c791620/version/0/width/120/height/75/quality/100" +8600 "BenficaTV Multicam 3" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/370959aa138a4805886fccabf38265e0/version/0/width/120/height/75/quality/100" +8601 "BenficaTV Multicam 4" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/b02508077c564f7883f8fc860f15b9c9/version/0/width/120/height/75/quality/100" +8606 "AfroMusic" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/b22774537d39440495b205b428e83a7f/version/0/width/120/height/75/quality/100" +8636 "Panda Biggs" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/383f7e6f14ba48a0a69bde850dae7f50/version/0/width/120/height/75/quality/100" +8645 "Nickelodeon" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/4a5f17d29c7d4e74bea71046ffc50569/version/0/width/120/height/75/quality/100" +8646 "MCM POP" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/610a1c775a4d4f89954924575c738b0e/version/0/width/120/height/75/quality/100" +8711 "News Now" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/7d1df4bc7fd948e3bbb57fefe3845ffb/version/0/width/120/height/75/quality/100" +8735 "SIC Novelas" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/bd9e43272bc04420969e8e8ff0de8f8c/version/0/width/120/height/75/quality/100" +8743 "Sport TV 7" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/079ac81d79f7490e844af481e5303d12/version/2/width/120/height/75/quality/100" +8775 "HGTV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/89768f1e6c1043279925acef9cadf5b8/version/0/width/120/height/75/quality/100" +8776 "Disc ID" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/5aa45346d01440dabf96211bf118c28f/version/0/width/120/height/75/quality/100" +8781 "BabyTV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/b422dbbb9fec4df5a07b6a383d906d56/version/0/width/120/height/75/quality/100" +8782 "TCV" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/4280bb15af7b45068bbd15138531050b/version/0/width/120/height/75/quality/100" +8783 "História" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/f16aac14d6d54c8bb723397b3d743f08/version/0/width/120/height/75/quality/100" +#### Manual map, May contain errors. Commented out SD/HD dupes +##2815 "180 SD" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2814 "180" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##2707 "24Kitchen SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/481cf968448d4b07b8c675552a16ef8a_19/version/0/width/120/height/75/quality/100" +##5584 "A Bola TV SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/81847fc044e84e7f8f3fc9b7a1cb7d01_19/version/1/width/120/height/75/quality/100" +##2704 "AMC Break SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/af39b08b3262477cbfd49e8a506855d4_19/version/1/width/120/height/75/quality/100" +##2997 "AMC SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/1b0fa6a1c5544a24bdea82e2bc9222e3_19/version/0/width/120/height/75/quality/100" +##2752 "AXN Movies SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/37500ae831f84b30822e5bd5e04fd882_19/version/0/width/120/height/75/quality/100" +##2698 "AXN SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/a44800b441224087aea741f0bf74263c_19/version/0/width/120/height/75/quality/100" +##2753 "AXN White SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/f54c7528c31947c8be68f13748cd15b0_19/version/0/width/120/height/75/quality/100" +##2880 "AfroMusic SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/b22774537d39440495b205b428e83a7f/version/0/width/120/height/75/quality/100" +2746 "BBC World" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##3405 "Benfica TV SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/477cd7f5a7354324b6a9a27db865708f_19/version/0/width/120/height/75/quality/100" +2775 "Blue Hustler" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##3014 "CMTV SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/9059345359844b3ca594134c8d81ffc0_19/version/0/width/120/height/75/quality/100" +##2786 "CNN Portugal SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/15dc865f76db4f7baddb09d728bd1088/version/0/width/120/height/75/quality/100" +##2782 "CNN SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/48a5c03f05264f969c71e56992a98847_19/version/1/width/120/height/75/quality/100" +##5586 "Canal 11 SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/3c6048c60dc042fd84e395b33d1f049e_19/version/0/width/120/height/75/quality/100" +##2901 "Canal Q SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/e1ebf412bd444a61afdd2d9fa1263e1a_19/version/0/width/120/height/75/quality/100" +##2694 "Cartoon Network SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/23dffe336ee24fba9879f8b43eb49571_19/version/0/width/120/height/75/quality/100" +##3021 "Cartoonito SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/14dd98d3e0574155bf9e8dee613d3161_19/version/2/width/120/height/75/quality/100" +##7089 "Casa e Cozinha SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/e465476b8a8545488e8310c1df29e55d_19/version/0/width/120/height/75/quality/100" +2857 "Caça e Pesca" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##4861 "CaçaVision SD" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2725 "CaçaVision" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##2885 "Cinemundo SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/653fc31c29e34d62a434156b905c7cff_19/version/0/width/120/height/75/quality/100" +2785 "CubaVision" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##3888 "DAZN 4 SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/9f8ed7e32fb04f819475d9eb5a38d2d5/version/1/width/120/height/75/quality/100" +##3889 "DAZN 5 SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/53aa4f7847834e1f8678067be941c238/version/1/width/120/height/75/quality/100" +##2777 "Discovery SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/fa191c5ad6ba48b9bca783dafabc7498_19/version/0/width/120/height/75/quality/100" +##2693 "Disney Junior SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/bbbf77ecab4440d0876889aa0d62b586/version/0/width/120/height/75/quality/100" +2883 "DogTv" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##2755 "E! SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/502684fe51d24e6cb81551b3b2d54ca9_19/version/0/width/120/height/75/quality/100" +##3415 "EuroChannel SD" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +3416 "EuroChannel" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##2756 "EuroSport 2 SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/13130dde270143ea90c7ad709cd33cda_19/version/0/width/120/height/75/quality/100" +2998 "Euronews EN" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/3346c27cb8044e5dbc17548d9610e2e8_19/version/0/width/120/height/75/quality/100" +##2672 "Eurosport SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/9e5ca9dad53a4dc88a3e0eb367015327_19/version/0/width/120/height/75/quality/100" +##2740 "Fashion TV SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/0b7ab6b146da42d582433ebde0ee70ee_19/version/0/width/120/height/75/quality/100" +2720 "FightBox" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##2792 "Food Network SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/57a9e479ba34434a8ef249b0cd560c94_19/version/0/width/120/height/75/quality/100" +##2732 "Fuel TV SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/721d0d21b99c4b239ccb9b2daf54596c_19/version/0/width/120/height/75/quality/100" +2924 "FunBox" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##2791 "GINX Esports TV SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/25a531732c4d4ff99bab6793ad20be65_19/version/0/width/120/height/75/quality/100" +##2696 "Hollywood SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/d3a18b81bedc48c6aaf41b64c3d570fd_19/version/0/width/120/height/75/quality/100" +2922 "Hot Man" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2923 "Hot Taboo" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##2802 "Hot offset-1h" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2829 "Hot" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2783 "Hustler" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +3412 "Insight Ultra" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##2842 "Localvisão SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/c704554bdcac437490143bc61b9aec87_19/version/0/width/120/height/75/quality/100" +2762 "Luxe TV" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2856 "M6" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##2886 "MCM Top SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/18855da1bce845b7b7611689f2303f8b_19/version/0/width/120/height/75/quality/100" +##3025 "MTV SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/9108b7d984a54a43b441bb44b9a84b85_19/version/0/width/120/height/75/quality/100" +2761 "Mezzo" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2708 "My Zen TV" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##2745 "National Geographic SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/dfe23167f5144543bab68ea436dd1d15_19/version/0/width/120/height/75/quality/100" +##2702 "National Geographic Wild SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/b253e37f1334406f8e93c4b1c37470de_19/version/0/width/120/height/75/quality/100" +##6008 "Nickelodeon SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/4a5f17d29c7d4e74bea71046ffc50569/version/0/width/120/height/75/quality/100" +##2703 "Odisseia SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/121e6e261b8749749c53c4248026ee49_19/version/0/width/120/height/75/quality/100" +8518 "OneToro" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##2809 "Panda Biggs SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/383f7e6f14ba48a0a69bde850dae7f50/version/0/width/120/height/75/quality/100" +##2714 "Panda SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/85009bcb0b8b45e7bc140a4832ca014b_19/version/0/width/120/height/75/quality/100" +##2806 "PentHouse Gold SD" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2805 "PentHouse Gold" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##2804 "PentHouse SD" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2803 "PentHouse" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##8425 "PlayBoy SD" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2767 "PlayBoy" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##2904 "Porto Canal SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/16cdb28b90cb46b1aee589be8a477eff_19/version/0/width/120/height/75/quality/100" +2773 "RAI News" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##2882 "RTP Açores SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/7e72b63606b74facb84d4a4be512ef6b_19/version/0/width/120/height/75/quality/100" +##2877 "RTP Madeira SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/d6249f5eef264202874dfdd5de492a9e_19/version/1/width/120/height/75/quality/100" +##3406 "RTP1 SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/a1bef425c634497b9341957d36e692c3_19/version/0/width/120/height/75/quality/100" +##3407 "RTP2 SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/f47f5f7d4acd493891cb1225d10024e2_19/version/0/width/120/height/75/quality/100" +##2726 "RTP3 SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/d430a0822b5f469ca320bf6d6723f0ca_19/version/0/width/120/height/75/quality/100" +2711 "SET Asia" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2794 "SET Max" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##2900 "SIC Caras SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/71c7fa677b894fecada52f4fdb1defb5_19/version/0/width/120/height/75/quality/100" +##2913 "SIC K SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/e45f250d72334fbdb3dbe1d91c4bc751_19/version/0/width/120/height/75/quality/100" +##2733 "SIC Mulher SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/c23aa79c4be64a78be3ea5843c079529_19/version/0/width/120/height/75/quality/100" +##2686 "SIC Notícias SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/cf33e03117ac4ece8cc3b260d4869c4a/version/0/width/120/height/75/quality/100" +##2734 "SIC Radical SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/5a461799731d4344b277dcae381f0a89_19/version/0/width/120/height/75/quality/100" +##3408 "SIC SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/807cd0cdbf314c44a0a5d9c852b2f835_19/version/0/width/120/height/75/quality/100" +##2697 "STAR CHANNEL SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/777adf78621046109570913715ab336c_19/version/1/width/120/height/75/quality/100" +##2699 "STAR COMEDY SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/ea358343e7c4465c93ad1872e52ff0d6_19/version/1/width/120/height/75/quality/100" +##2737 "STAR CRIME SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/25769e8d419c4ea6b63d8097352b9cae_19/version/1/width/120/height/75/quality/100" +##2678 "STAR LIFE SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/5022d2f187a646d696cb57f977a0c9d1_19/version/1/width/120/height/75/quality/100" +##2677 "STAR MOVIES HD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/3e7474629a5b416c8deaf0919002e6df_19/version/1/width/120/height/75/quality/100" +##2929 "Sport TV + SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/ce24543d73ab43b1b53dea9dc25d6854/version/0/width/120/height/75/quality/100" +##2729 "Sport TV 1 SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/a524ac5886ff494086e707103e124cc7/version/0/width/120/height/75/quality/100" +##2730 "Sport TV 2 SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/2f08d170f2a34e6390eb533a3d86538e/version/0/width/120/height/75/quality/100" +##2731 "Sport TV 3 SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/bae1291a65b240abbc98c8d92f7d9718/version/0/width/120/height/75/quality/100" +##2811 "Sport TV 4 SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/316b4ac356244f4f96c4c64b05946be3/version/0/width/120/height/75/quality/100" +##2719 "Sport TV 5 SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/27da1d086e1e4a8a9e3003d3ef5e5f4e/version/0/width/120/height/75/quality/100" +##7251 "Sport TV 6 SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/f31ce4c726dd4382915bfdea05a3c50f/version/0/width/120/height/75/quality/100" +##3003 "Sporting TV SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/868cdc88b86b4033a6be7fd2652bd05e_19/version/0/width/120/height/75/quality/100" +3022 "Stingray Classica" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2879 "Stingray DJazz" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2940 "Stingray Naturescape" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2860 "Super RTL" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +##3002 "TCV SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/4280bb15af7b45068bbd15138531050b/version/0/width/120/height/75/quality/100" +##2705 "TLC SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/bd02f77c26cb4380a1da6a2fe90a938d_19/version/1/width/120/height/75/quality/100" +##2932 "TV Globo SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/f3715346f3e748c088eeacef18bef34b_19/version/0/width/120/height/75/quality/100" +##2776 "TV Record SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/36bba6cd2b5746dc9a073e3e7817ec30_19/version/0/width/120/height/75/quality/100" +##2739 "TVCine Action SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/c47a0066a7244f51beeeba84fbf46424_19/version/0/width/120/height/75/quality/100" +##2738 "TVCine Edition SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/6ba9073760e2487488ada139d1b1f7b7_19/version/0/width/120/height/75/quality/100" +##3023 "TVCine Emotion SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/c3a60cce67a347ecad3ae6fae99e1646_19/version/0/width/120/height/75/quality/100" +##2695 "TVCine Top SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/2723399dc06b4b9e8914b29467e23dab_19/version/0/width/120/height/75/quality/100" +##3409 "TVI SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/a70ebda1d51b436d909cebf8b424b10e/version/0/width/120/height/75/quality/100" +##2764 "Trace SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/bc50304a4b45406595c55d24d0c3ff01_19/version/0/width/120/height/75/quality/100" +##2758 "Travel SD" "https://3038.images-vfp2.ott.kaltura.com/Service.svc/GetImage/p/3038/entry_id/9487453658fd42d9a8e515ee072328e7_19/version/0/width/120/height/75/quality/100" +2807 "Utsav Gold" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2808 "Utsav Plus" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png +2861 "Vox" https://logovector.net/wp-content/uploads/2013/04/342506-vodafone-13-logo.png \ No newline at end of file diff --git a/grab/pt_vodafone/tv_grab_pt_vodafone b/grab/pt_vodafone/tv_grab_pt_vodafone index 57faa6f32..67432f9aa 100755 --- a/grab/pt_vodafone/tv_grab_pt_vodafone +++ b/grab/pt_vodafone/tv_grab_pt_vodafone @@ -106,24 +106,31 @@ use utf8; use XMLTV; use XMLTV::Version "$XMLTV::VERSION"; use DateTime; -use DateTime::Format::Strptime; use Encode; # used to convert 'perl strings' into 'utf-8 strings' use XML::LibXML; use XMLTV::Configure::Writer; use XMLTV::Get_nice qw/get_nice/; use XMLTV::Options qw/ParseOptions/; use JSON; +use Text::Unidecode; use URI::Escape qw/ uri_escape /; use URI::Encode qw/ uri_encode uri_decode/; -#use Data::Dump qw/pp/; # uncomment to debug +# use Data::Dump qw/pp/; # uncomment to debug + +# needed to find the channel.list location +use File::Basename; +my $dirname = dirname(__FILE__); my $maxdays = 1+6; # data source is limited to 7 days (including today) my $grabber_name = 'tv_grab_pt_vodafone'; -my $grabber_version = '2.00'; +my $grabber_version = '3.00'; + +my $json_baseurl = 'https://cdn.pt.vtv.vodafone.com/epg/'; -my $json_baseurl = 'https://web.ott-red.vodafone.pt'; -my $json_api = '/ott3_webapp/'; +# Generate with: +# jq -r '.channels[]|(.epgId,.title,.logo.color.uri)' channel.list.new | sed 'N;N; s/\n/\t/g' | sort > channel.list +my $input_file = $dirname . '/channel.list'; my $ua = LWP::UserAgent->new(ssl_opts => { SSL_cipher_list => 'DEFAULT:!DH', @@ -147,10 +154,6 @@ if ($opt->{offset} + $opt->{days} > $maxdays) { $opt->{days} = $maxdays - $opt->{offset}; } -if ($opt->{days} < 1) { - $opt->{days} = 0; -} - # Get the actual data and print it to stdout. my $is_success=1; @@ -174,10 +177,10 @@ $writer->start({ 'generator-info-name' => "XMLTV/".$opt->{version}, 'generator-info-url' => 'http://www.xmltv.org/', 'source-info-name' => 'EPG Service for Vodafone', - 'source-info-url' => $json_baseurl.$json_api."guia-tv", + 'source-info-url' => $json_baseurl, }); -if ($opt->{days} > 0) { +if ( ! undef $opt->{days} ) { if( !$opt->{quiet} ) { print( STDERR "fetching data\n" ); } @@ -193,138 +196,182 @@ if ($opt->{days} > 0) { $writer->end(); if( $is_success ) { - exit 0; + exit 0; } else { - exit 1; + exit 1; } sub config_stage { - my( $stage, $conf ) = @_; - die "Unknown stage $stage" if $stage ne "start"; + my( $stage, $conf ) = @_; + die "Unknown stage $stage" if $stage ne "start"; - my $result; - my $writer = new XMLTV::Configure::Writer( OUTPUT => \$result, encoding => 'utf-8' ); - $writer->start( { grabber => 'tv_grab_pt_vodafone' } ); - $writer->end( 'select-channels' ); + my $result; + my $writer = new XMLTV::Configure::Writer( OUTPUT => \$result, encoding => 'utf-8' ); + $writer->start( { grabber => 'tv_grab_pt_vodafone' } ); + $writer->end( 'select-channels' ); - return $result; + return $result; } -sub list_channels +sub list_channels { - my( $conf, $opt ) = @_; - - # Return a string containing an xmltv-document with <channel>-elements - # for all available channels. - - my $channellist=json_request( 'get', 'v1/channels' ); - - $channellist = $channellist->{data}; + my ( $conf, $opt ) = @_; + + my $channellist = _read_channel_data(); + + my $output=XML::LibXML::Document->new( '1.0', 'utf-8' ); + my $root=XML::LibXML::Element->new( 'tv' ); + $output->setDocumentElement( $root ); + + foreach my $key ( sort keys %$channellist ) { + my $channel=$channellist->{$key}; + my $sigla=$key; + my $name=$channel->{name}; + my $icon=$channel->{icon}; + my $tmp=XML::LibXML::Element->new( 'channel' ); + $tmp->setAttribute( 'id', encode( 'UTF-8', $sigla ) ); + $tmp->appendTextChild( 'display-name', encode( 'UTF-8', $name ) ); + my $iconElement=XML::LibXML::Element->new( 'icon' ); + $iconElement->setAttribute( 'src', $icon ); + $tmp->appendChild( $iconElement ); + $root->appendChild( $tmp ); + } - my $output=XML::LibXML::Document->new( '1.0', 'utf-8' ); - my $root=XML::LibXML::Element->new( 'tv' ); - $output->setDocumentElement( $root ); + return $output->toString(); - foreach my $channel( @$channellist ) { - #pp( $channel ) if( $opt->{debug} ); # uncomment to debug +} - my $name=$channel->{name}; - my $sigla=$channel->{id}; - my $tmp=XML::LibXML::Element->new( 'channel' ); - $tmp->setAttribute( 'id', encode( 'UTF-8', $sigla ) ); - $tmp->appendTextChild( 'display-name', encode( 'UTF-8', $name ) ); - $root->appendChild( $tmp ); - } +sub _read_channel_data +{ + my $channel_list = {}; + my $c = 0; + open( my $input_fh, "<", $input_file ) || die "Can't open $input_file: $!"; + while (my $channel_string = <$input_fh>) { + chomp($channel_string); + # remove commented channels + $channel_string =~ s/^#.*//; + next if not length $channel_string; + my @items = split("\t",$channel_string); + $items[1] =~ s/\"//g; + $channel_list->{ $items[0] } = { + name => decode('UTF-8', $items[1]), + icon => $items[2] + }; + } - return $output->toString(); + return $channel_list } + sub get_epg { my( $writer, $startDate, $endDate ) = @_; - my $baseRequest = 'v1.5/programs/grids/'; my @channelList = @{$conf->{channel}}; - my $curDate = $startDate; - my %xmlchannels; my %xmlprogs; - my $nr_days = $startDate->delta_days($endDate)->days; + my $curDate = $startDate; - for my $day (0..$nr_days) { + my $channelInfo = _read_channel_data(); - my $epg_day = $day + $opt->{offset}; + while ( $curDate <= $endDate ) { for my $channel (@channelList) { - my $encoded_channel = uri_encode($channel); - - print( STDERR "requesting EPG from " . $curDate->ymd() . " for " . $encoded_channel . "\n" ) if( !$opt->{quiet} ); - print( STDERR " GET ".$json_baseurl.$json_api.$baseRequest.$encoded_channel."/".$epg_day."\n" ) if( $opt->{debug} ); - - my $epgSource = json_request('get', $baseRequest."/".$encoded_channel."/".$epg_day); - - if ( ! $epgSource ){ - die("Bad EPG download, probably channel list is outdated, rerun the grabber configure to update the list.\n" ); } - elsif ( !$epgSource->{data} || scalar @{$epgSource->{data}} == 0 ){ - print( STDERR " Empty EPG download for ".$channel.", probably channel list is outdated or no API data for that channel\n" . - " Rerun the grabber configure to update the list or check for the channel EPG in the Vodafone app.\n" ); - next; - }; - - my $data = $epgSource->{data}; - - my $channelId = make_channelid( $data->[0]->{channel}->{id} ); + my $channelId = make_channelid( $channelInfo->{$channel}->{name} ); my %ch = ( 'id' => $channelId, - 'icon' => [ { src => $data->[0]->{channel}->{logo} } ], + 'icon' => [ { src => unquote($channelInfo->{$channel}->{icon}) } ], ); # multiple display-names are ok and may be useful to match other tools lists - my @displayname = ( [ sanitizeUTF8( $data->[0]->{channel}->{name} ), 'pt' ] , - [ sanitizeUTF8( $data->[0]->{channel}->{id} ), 'pt' ] ); + my @displayname = ( [ sanitizeUTF8( $channelInfo->{$channel}->{name} ), 'pt' ] , + [ sanitizeUTF8( $channelId ), 'pt' ] , + [ sanitizeUTF8( $channel ), 'pt' ] ); push @{ $ch{'display-name'} }, @displayname ; $xmlchannels{ $channelId } = \%ch ; - PROGRAMME: - for my $programme ( @{ $data }) { - my %prog; - my ($dtstart, $dtend, $starts_today) = make_dates($programme->{startTime}, $programme->{endTime}, $curDate); - next PROGRAMME unless $starts_today; + my $date_day = $curDate->strftime('%d'); + my $date_month = $curDate->strftime('%m'); + my $date_year = $curDate->year; + + for my $period ("00-06","06-12","12-18","18-00") { - $prog{start} = $dtstart; - $prog{stop} = $dtend; + print( STDERR "requesting EPG from " . $curDate->ymd() ." [".$period."]". " for " . $channelId . "\n" ) if( !$opt->{quiet} ); + print( STDERR " GET ".$json_baseurl.$channel."/".$date_year."/".$date_month."/".$date_day."/".$period."\n" ) if( $opt->{debug} ); - $prog{channel} = $channelId; - $prog{title} = [ [ sanitizeUTF8($programme->{title}), 'pt' ] ]; - $prog{desc} = [ [ sanitizeUTF8($programme->{description}), 'pt' ] ] if ($programme->{description}); - $prog{length} = ( $programme->{duration} ) if ($programme->{duration}); - $prog{icon} = [ { src => $programme->{image} } ] if ($programme->{image}); + my $epgSource = json_request('get', $channel."/".$date_year."/".$date_month."/".$date_day."/".$period); - $prog{category} = [ [ sanitizeUTF8($programme->{channel}{category}), 'pt' ] ] if ($programme->{channel}{category}); - $prog{'sub-title'} = [ [ sanitizeUTF8($programme->{series}{episodeTitle}), 'pt' ] ] if ($programme->{series}->{episodeTitle}) ; + if ( ! $epgSource ){ + die("Bad EPG download, probably channel list is outdated, rerun the grabber configure to update the list.\n" ); } + elsif ( !$epgSource->{result} || !$epgSource->{result}->{objects} || scalar @{$epgSource->{result}->{objects}} == 0 ){ + print( STDERR " Empty EPG download for ".$channel.", probably channel list is outdated or no API data for that channel\n" . + " Rerun the grabber configure to update the list or check for the channel EPG in the Vodafone app.\n" ); + next; + }; - $prog{'episode-num'} = make_episode_num($programme); + my $data = $epgSource->{result}->{objects}; - # We can get the same programme for two different days if it goes past midnight. - # Lets remove duplicates here. - $xmlprogs{$channelId}{ $dtstart, $dtend } = \%prog; + PROGRAMME: + for my $programme ( @{ $data }) { + my %prog; + my ($dtstart, $dtend, $starts_today) = make_dates($programme->{startDate}, $programme->{endDate}, $curDate); + $prog{start} = $dtstart; + $prog{stop} = $dtend; + $prog{channel} = $channelId; + $prog{title} = get_title($programme); + $prog{desc} = get_desc($programme); + $prog{date} = get_date($programme); + $prog{'episode-num'} = make_episode_num($programme); + + my $length = get_length($programme); + $prog{length} = $length if $length; + + my $icon = get_icon($programme); + $prog{icon} = $icon if $icon; + + my $category = get_category($programme); + $prog{category} = $category if $category; + + my $country = get_country($programme); + $prog{country} = $country if $country; + + my $rating = get_rating($programme); + $prog{rating} = $rating if $rating; + + my $image = get_images($programme); + $prog{image} = $image if $image; + + my $actors = get_actors($programme); + $prog{credits}{actor} = $actors if $actors; + + my $directors = get_directors($programme); + $prog{credits}{director} = $directors if $directors; + + # We can get the same programme for two different days if it goes past midnight. + # Lets remove duplicates here. + $xmlprogs{$channelId}{ $dtstart, $dtend } = \%prog; + print( STDERR " Adding programme: " . $prog{title}[0][0] . " [" . $dtstart . " - " . $dtend . "]\n" ) if( $opt->{debug} ); + } + } - } + } - $curDate->add( days => 1); + $curDate->add(days => 1); } $writer->write_channel($_) for values %xmlchannels; for my $ch (keys %xmlchannels) { $writer->write_programme($_) for values %{ $xmlprogs{$ch} }; } + + $is_success=1; } sub sanitizeUTF8 { @@ -338,13 +385,10 @@ sub sanitizeUTF8 { sub json_request { my ($method, $path, $content) = @_; - my $url; - if($path =~ /^\//) { - $url = $json_baseurl . $path; - } - else { - $url = $json_baseurl . $json_api . $path; - } + # TODO(nsenica): Implement proper throttling control. + sleep(0.1); + + my $url = $json_baseurl . $path; print( STDERR "json_request(" . $method . ") url: " . $url . "\n" ) if( $opt->{debug} ); @@ -376,34 +420,31 @@ sub make_episode_num { my ($programme) = @_; - return unless $programme->{series}; + return unless $programme->{metas}{'season number'}; my $output; my $season; my $episode; - if ( $programme->{series}{season} ) { - $season = $programme->{series}{season} - 1; + if ( $programme->{metas}{'season number'}{value} ) { + $season = $programme->{metas}{'season number'}{value} - 1; } - if ( $programme->{series}{episode} ) { - $episode = $programme->{series}{episode} - 1; + if ( $programme->{metas}{'episode num'}{value} ) { + $episode = $programme->{metas}{'episode num'}{value} - 1; } $output = [ [ ($season // "") . "." . ($episode // "") . ".", 'xmltv_ns' ] ] if (defined $season || defined $episode); - my $seasonLabel = sanitizeUTF8($programme->{series}{seasonLabel}) if ($programme->{series}{seasonLabel}) ; - my $episodeLabel = sanitizeUTF8($programme->{series}{episodeLabel}) if ($programme->{series}{episodeLabel}) ; - - if ( defined $seasonLabel && defined $episodeLabel ) { - push @{ $output }, [ $seasonLabel ." ". $episodeLabel , 'onscreen' ]; + if ( defined $season && defined $episode ) { + push @{ $output }, [ ($season+1) ." ". ($episode+1) , 'onscreen' ]; } - elsif ( defined $seasonLabel ) { - push @{ $output }, [ $seasonLabel , 'onscreen' ]; + elsif ( defined $season ) { + push @{ $output }, [ ($season+1) , 'onscreen' ]; } - elsif ( defined $episodeLabel ) { - push @{ $output }, [ $episodeLabel , 'onscreen' ]; + elsif ( defined $episode ) { + push @{ $output }, [ ($episode+1) , 'onscreen' ]; } return $output; @@ -413,19 +454,16 @@ sub make_dates { my( $startTime, $endTime, $curDate ) = @_; - my $strp = new DateTime::Format::Strptime( pattern => '%FT%TZ' ); - - my $dtstart = $strp->parse_datetime($startTime); + my $dtstart = DateTime->from_epoch(epoch => $startTime); my $starts_today = 0; # does the programme start on the day we want listings for? if ($dtstart->day == $curDate->day) { $starts_today = 1; } - my $dtend = $strp->parse_datetime($endTime); + my $dtend = DateTime->from_epoch(epoch =>$endTime); # dates look like GMT, we tried UTC but in summer time they fail - #return ($dtstart->strftime( '%Y%m%d%H%M%S %z' ), $dtend->strftime( '%Y%m%d%H%M%S %z' )); return ($dtstart->strftime( '%Y%m%d%H%M%S +0000' ), $dtend->strftime( '%Y%m%d%H%M%S +0000' ), $starts_today); } @@ -437,8 +475,123 @@ sub make_channelid $id =~ s/\s+//g; # remove whitespace $id =~ s/&//g; # remove ampersand $id =~ s/!//g; # remove ! - $id =~ s/\x{e7}/c/g; # turn c-cecille into plain c + $id =~ s/\"//g; # remove "" $id =~ s/\+/-plus/g; # turn + into -plus + $id = unidecode($id); $id .= '.tv.vodafone.pt'; # append domain part return( $id ); } + +sub unquote { + my ($str) = @_; + $str =~ s/^"//; + $str =~ s/"$//; + return $str; +} + +sub get_title { + my ($programme) = @_; + return [ [ sanitizeUTF8($programme->{name}), 'pt' ] ]; +} + +sub get_desc { + my ($programme) = @_; + return [ [ sanitizeUTF8($programme->{description}), 'pt' ] ] if ($programme->{description}); +} + +sub get_length { + my ($programme) = @_; + if ($programme->{metas}{'display duration'}{value}) { + my $duration_str = $programme->{metas}{'display duration'}{value}; + my @duration_items = split(/[PTHMS]/, $duration_str); + return $duration_items[2] * 3600 + $duration_items[3] * 60 + $duration_items[4] if scalar @duration_items; + } +} + +sub get_icon { + my ($programme) = @_; + if ($programme->{images}[0]{url} && $programme->{images}[0]{imageTypeName} eq "ca") { + return [ { src => $programme->{images}[0]{url} . "/width/360/height/640/quality/95" } ]; + } + if ($programme->{images}[0]{url} && $programme->{images}[0]{imageTypeName} eq "cc") { + return [ { src => $programme->{images}[0]{url} . "/width/640/height/360/quality/95" } ]; + } +} + +sub get_category { + my ($programme) = @_; + if ($programme->{tags}{genre}) { + my @category = map { [ sanitizeUTF8($_->{value}), 'pt' ] } @{$programme->{tags}{genre}{objects}}; + return \@category; + } +} + +sub get_country { + my ($programme) = @_; + return [ [ sanitizeUTF8($programme->{tags}{'country of production'}{objects}[0]{value}), 'pt' ] ] if $programme->{tags}{'country of production'}; +} + +sub get_rating { + my ($programme) = @_; + if ($programme->{tags}{'parental Rating'}) { + my $rating; + if ($programme->{tags}{'parental Rating'}{objects}[0]{value} == 0) { + $rating = [ [ "All Ages", 'Portuguese Movie Rating' ] ]; + } else { + $rating = [ [ "M/" . $programme->{tags}{'parental Rating'}{objects}[0]{value}, 'Portuguese Movie Rating' ] ]; + } + return $rating if $rating; + } +} + +sub get_images { + my ($programme) = @_; + my @images; + for my $image (@{$programme->{images}}) { + next if !$image->{url}; + + my $type = ""; + my $orient = ""; + my $size = 3; + my $system = "vodafone"; + my $width = 640; + my $height = 360; + + if ($image->{imageTypeName} eq "cc") { + $orient = "L"; + $type = "still"; + } elsif ($image->{imageTypeName} eq "ca") { + $orient = "P"; + $type = "poster"; + $width = 360; + $height = 640; + } elsif ($image->{imageTypeName} eq "bg") { + $orient = "L"; + $type = "backdrop"; + } + + push @images, [ $image->{url} . "/width/" . $width . "/height/" . $height . "/quality/95", { type => $type, size => $size, orient => $orient, system => $system } ]; + } + return \@images if scalar @images; +} + +sub get_date { + my ($programme) = @_; + return sanitizeUTF8($programme->{metas}{year}{value}) if $programme->{metas}{year}{value}; +} + +sub get_actors { + my ($programme) = @_; + if ($programme->{tags}{actors}) { + my @actors = map { sanitizeUTF8($_->{value}) } @{$programme->{tags}{actors}{objects}}; + return \@actors; + } +} + +sub get_directors { + my ($programme) = @_; + if ($programme->{tags}{director}) { + my @directors = map { sanitizeUTF8($_->{value}) } @{$programme->{tags}{director}{objects}}; + return \@directors; + } +} \ No newline at end of file