diff --git a/sites/visionplus.id/__data__/content.json b/sites/visionplus.id/__data__/content.json
deleted file mode 100644
index a3002eee..00000000
--- a/sites/visionplus.id/__data__/content.json
+++ /dev/null
@@ -1 +0,0 @@
-{"data":[{"category_id":16,"channel_code":"ch00000090990000001790","channel_name":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd\r\nhttps://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","has_tvod":1,"id":"2","image_url":"https://static.mncnow.id/images/channel/e8b7a6a8/f009.png","player":{"drm":true,"drm_license_url":null,"drm_type":null,"url":""},"schedules":[{"date":"2023-06-30","items":[{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"02:00","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"01:15","synopsis":"","t":"Hafalan Shalat Delisa"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"03:00","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"02:00","synopsis":"","t":"Hafalan Shalat Delisa"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"03:15","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"03:00","synopsis":"","t":"Kultum"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"04:00","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"03:15","synopsis":"","t":"Pura-Pura Haji"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"05:30","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"04:00","synopsis":"","t":"Seputar iNews Pagi (L)"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"06:15","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"05:30","synopsis":"","t":"Sergap"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"08:00","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"06:15","synopsis":"","t":"Go Spot"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"09:30","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"08:00","synopsis":"","t":"Trending Banget Loh (TBL)"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"11:30","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"09:30","synopsis":"","t":"Silet"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"12:15","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"11:30","synopsis":"","t":"Seputar iNews Siang (L)"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"14:30","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"12:15","synopsis":"","t":"Si Doel Anak Sekolahan S2"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"15:45","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"14:30","synopsis":"","t":"Field Trip Ke Atas Awan"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"17:00","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"15:45","synopsis":"","t":"Hole In The Wall"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"20:00","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"17:00","synopsis":"","t":"Silet Awards 2023 (L)"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"21:15","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"20:00","synopsis":"","t":"Cinta Tanpa Karena"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"23:15","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"21:15","synopsis":"","t":"Ikatan Cinta"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"00:00","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"22:00","synopsis":"","t":"RCTI"},{"a":"a65a9d95ad17320dc4e684e121ec216494d15e5b46690e01b3d883a0c183473f11c91cfede712ed736bdd4b13fd1e384f8d201e0b6e19a266f6dd8e65413b7a2a0a5d78764cf7c1aff18dd11ada5ca9de1b0158078ca130ac96bb36614b6cdb773ddff08e8fcfbeb993205636ed0d2bfbdad371322a121c6be1c56ab9bd34f737d248be09fd3c9be43","drm":true,"e":"01:15","hls":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_hls_vmx/RCTI-DD.m3u8","is_live":false,"is_playable":false,"k":"a3a92d62f2d9ba6f7bbc09d2a97cb5c34b874672ecf4697c3d4767d8a36ca1308e2733c5b77c3af1b1352d240a303e233f5133e218211f75c39473a662a8745014bf9707198a6ade15cdd1402bbc519b7455807226e67818d064c87c77143eacabda77073b84e1ff98b0778b801681be8761508f7f5ff9c908441dbd6cd1","mpd":"https://nyanv-live-cdn.mncnow.id/live/eds/RCTI-DD/sa_dash_vmx/RCTI-DD.mpd","s":"23:15","synopsis":"","t":"Tukang Bubur Pulang Haji"}]}]}],"meta":{"limited_viewing":{"popup_type":"visitor","message_to_show":{"message_title":"Login to your account","message_body":"Please Login to continue watching and enjoy our content on Vision+","button_yes":"Login","button_no":"Later","image_popup":"https://cluster-images.visionplus.id/static/website/popup_login.png","action_type":"login"}}},"success":true,"code":200,"message":"Success","status":{"code":0,"message_client":"Success","message_server":"Success"}}
\ No newline at end of file
diff --git a/sites/visionplus.id/__data__/content_en.json b/sites/visionplus.id/__data__/content_en.json
new file mode 100644
index 00000000..b6939ebd
--- /dev/null
+++ b/sites/visionplus.id/__data__/content_en.json
@@ -0,0 +1 @@
+{"err":0,"mes":"OK","ver":1732411811000,"vie":"cd-events-grid-view","evs":[{"hd":true,"eid":"DLVY0278042864001880","sta":"2024-11-23T23:30:00Z","end":"2024-11-24T00:15:00Z","liv":false,"vid":[],"aul":["ENG"],"aud":[],"stl":[],"imb":false,"loc":[{"lan":""}],"pro":[],"con":{"cid":"STND0277891997009717","typ":"STANDALONE","oti":"FBI: Most Wanted S4, Ep 18","gid":["11;15;10;0","11;1;0;0"],"oda":"2022","dur":3000,"par":7,"categories":["Series/Thriller","Series"],"str":0,"loc":[{"tit":"FBI: Most Wanted S4, Ep 18","lan":"ENG","syn":"After two agents from the Bureau of Land Management go missing while executing a land seizure warrant in Wyoming, the Fugitive Task Force heads west to track them down in an unwelcoming county.","img":{"dir":"cn/113495","img_cnt":{"sna":{"s":1,"l":1,"m":1,"xl":1},"bac":{"l":1,"m":1},"pos":{"s":1,"l":1,"m":1,"xl":1},"blk":{"s":1,"l":1,"m":1,"xl":1}}}}],"cou":["USA"],"lan":"ENG","adult":false,"srs":[],"ses":"0","ctn":["CATCHUP_GLOBAL"]},"ppv":false,"sid":"00000000000000000079","rep":false,"cas":"2024-11-24T00:20:00Z","cae":"2024-11-30T22:04:30Z","soa":true,"lan":["ENG - English"]}]}
\ No newline at end of file
diff --git a/sites/visionplus.id/__data__/content_id.json b/sites/visionplus.id/__data__/content_id.json
new file mode 100644
index 00000000..670c6fa4
--- /dev/null
+++ b/sites/visionplus.id/__data__/content_id.json
@@ -0,0 +1 @@
+{"err":0,"mes":"OK","ver":1732411811000,"vie":"cd-events-grid-view","evs":[{"hd":true,"eid":"DLVY0278042864001880","sta":"2024-11-23T23:30:00Z","end":"2024-11-24T00:15:00Z","liv":false,"vid":[],"aul":["ENG"],"aud":[],"stl":[],"loc":[{"lan":""}],"imb":false,"pro":[],"con":{"cid":"STND0277891997009717","typ":"STANDALONE","oti":"FBI: Most Wanted S4, Ep 18","gid":["11;15;10;0","11;1;0;0"],"oda":"2022","dur":3000,"par":7,"categories":["Series/Thriller","Series"],"str":0,"loc":[{"tit":"FBI: Most Wanted S4, Ep 18","lan":"IND","syn":"Satgas Buronan pergi ke wilayah barat untuk melacak keberadaan dua petugas Biro Pengelolaan Lahan yang menghilang saat menjalankan perintah penyitaan lahan di negara bagian yang tak ramah, Wyoming.","img":{"dir":"cn/113494","img_cnt":{"sna":{"s":1,"l":1,"m":1,"xl":1},"bac":{"l":1,"m":1},"pos":{"s":1,"l":1,"m":1,"xl":1},"blk":{"s":1,"l":1,"m":1,"xl":1}}}}],"cou":["USA"],"lan":"IND","adult":false,"srs":[],"ses":"0","ctn":["CATCHUP_GLOBAL"]},"ppv":false,"sid":"00000000000000000079","rep":false,"cas":"2024-11-24T00:20:00Z","cae":"2024-11-30T22:04:30Z","soa":true,"lan":["ENG - English"]}]}
\ No newline at end of file
diff --git a/sites/visionplus.id/__data__/no_content.json b/sites/visionplus.id/__data__/no_content.json
index 671c5c0b..8f8a85ed 100644
--- a/sites/visionplus.id/__data__/no_content.json
+++ b/sites/visionplus.id/__data__/no_content.json
@@ -1 +1 @@
-{"data":null,"meta":{},"success":false,"code":400,"message":"Invalid epg date 2024-06-30","status":{"code":0,"message_client":"Invalid epg date 2024-06-30","message_server":"Invalid epg date 2024-06-30"}}
\ No newline at end of file
+{"err":0,"mes":"OK","ver":1732325411000,"vie":"cd-events-grid-view"}
\ No newline at end of file
diff --git a/sites/visionplus.id/readme.md b/sites/visionplus.id/readme.md
index aea5e66f..5b8d7d04 100644
--- a/sites/visionplus.id/readme.md
+++ b/sites/visionplus.id/readme.md
@@ -4,14 +4,30 @@ https://www.visionplus.id/channel
### Download the guide
+Indonesian:
+
```sh
-npm run grab -- --site=visionplus.id
+npm run grab -- --site=visionplus.id --lang=id
+```
+
+English:
+
+```sh
+npm run grab -- --site=visionplus.id --lang=en
```
### Update channel list
+Indonesian:
+
```sh
-npm run channels:parse -- --config=./sites/visionplus.id/visionplus.id.config.js --output=./sites/visionplus.id/visionplus.id.channels.xml
+npm run channels:parse -- --config=./sites/visionplus.id/visionplus.id.config.js --output=./sites/visionplus.id/visionplus.id_id.channels.xml --set=lang:id
+```
+
+English:
+
+```sh
+npm run channels:parse -- --config=./sites/visionplus.id/visionplus.id.config.js --output=./sites/visionplus.id/visionplus.id_en.channels.xml --set=lang:en
```
### Test
diff --git a/sites/visionplus.id/visionplus.id.channels.xml b/sites/visionplus.id/visionplus.id.channels.xml
deleted file mode 100644
index 08af07cc..00000000
--- a/sites/visionplus.id/visionplus.id.channels.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
- ABC Australia
- ANTV
- AXN
- Al Jazeera English
- Al Quran Al Kareem
- Anhui TV
- Animax
- Arirang
- Arirang
- BBC Earth
- BBC World News
- BTV
- Bali TV
- Bandung TV
- Bloomberg
- Cbeebies
- Celestial Classic Movie
- CGTN
- CGTN Documentary
- Channel News Asia
- CNBC Indonesia
- Celebrities TV
- Celebrities TV
- Celestial Movies
- Cinema World
- Cinemachi
- Cinemachi Action
- Cinemachi Kids
- Cinemachi Max
- Cinemachi Xtra
- Crime Investigation
- DAAI TV
- DW
- DW
- Dens Food
- Dens ShowBiz
- Dens ShowBiz
- Shanghai Dragon TV
- Dreamworks
- EWTN
- Entertainment
- Euronews English
- FMN
- Fight Sports
- Fox News Channel
- France 24
- GTV
- Galaxy
- Galaxy Premium
- Global Trekker
- HITS
- Hits Movies
- History
- Hunan TV
- IDX Channel
- IMC
- JTV
- Jak TV
- Jiangsu TV
- KIX
- Kids TV
- Kompas TV
- Kompas TV
- Life
- Lifetime
- Lifetime
- Love Nature
- MNC TV
- MTV 90s
- MTV Live
- Metro TV
- Metro TV
- Music TV
- Music TV
- Muslim TV
- My Cinema
- My Cinema Asia
- My Family
- My Kidz
- NET.
- NHK World Japan
- NHK World Premium
- Nick Jr.
- Nick
- OK TV
- One
- Outdoor Channel
- RCTI
- Rock Action
- Rock Entertainment
- RT English
- RTV
- Reformed 21
- SEA Today
- SPOTV
- SPOTV 2
- SINDONEWS TV
- Soccer Channel
- SPORTSTARS
- SPORTSTARS 2
- SPORTSTARS 3
- SPORTSTARS 4
- TRT World
- TV5 Monde
- TV9
- TVMu
- TVRI
- Tawaf TV
- Thrill
- Trans 7
- Trans TV
- Vision Prime
- Xing Kong TV
- Zee Bioskop
- Zoomoo
- iNews
- tvN
- tvN Movies
- TV One
- TV One
-
diff --git a/sites/visionplus.id/visionplus.id.config.js b/sites/visionplus.id/visionplus.id.config.js
index 6ce0aec8..30a779e0 100644
--- a/sites/visionplus.id/visionplus.id.config.js
+++ b/sites/visionplus.id/visionplus.id.config.js
@@ -9,84 +9,60 @@ dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.extend(customParseFormat)
+const languages = { en: 'ENG', id: 'IND' }
+const tz = 'Asia/Jakarta'
+
module.exports = {
site: 'visionplus.id',
days: 2,
- request: {
- headers: {
- Authorization:
- 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE5NDY0NTE4OTcsInVpZCI6MCwicGwiOiJ3ZWIiLCJndWVzdF90b2tlbiI6ImNhNGNjMjdiNzc3MjBjODEwNzQ2YzY3MTY4NzNjMDI3NGU4NWYxMWQifQ.tt08jLZ3HiNadUeSgc9O-nhIzEi7WMYRjxMb05lEZ74'
- }
- },
url({ date, channel }) {
- return `https://epg-api.visionplus.id/api/v1/epg?isLive=false&start_time_from=${date.format(
+ return `https://www.visionplus.id/managetv/tvinfo/events/schedule?language=${languages[channel.lang]}&serviceId=${channel.site_id}&start=${date.format(
'YYYY-MM-DD'
- )}&channel_ids=${channel.site_id}`
+ )}T00%3A00%3A00Z&end=${date.add(1, 'd').format(
+ 'YYYY-MM-DD'
+ )}T00%3A00%3A00Z&view=cd-events-grid-view`
},
parser({ content, channel, date }) {
const programs = []
- const items = parseItems(content, channel, date)
- items.forEach(item => {
- let prev = programs[programs.length - 1]
- let start = parseStart(item, date)
- let stop = parseStop(item, date)
- if (prev) {
- if (start.isBefore(prev.start)) {
- start = start.add(1, 'd')
- }
- if (stop.isBefore(prev.stop)) {
- stop = stop.add(1, 'd')
+ const json = JSON.parse(content)
+ if (Array.isArray(json.evs)) {
+ for (const ev of json.evs) {
+ if (ev.sid === channel.site_id) {
+ const title = ev.con && ev.con.loc ? ev.con.loc[0].tit : ev.con.oti
+ const [, , season, , episode] = title.match(/( S(\d+))?(, Ep (\d+))/) || [null, null, null, null, null]
+ programs.push({
+ title,
+ description: ev.con && ev.con.loc ? ev.con.loc[0].syn : null,
+ categories: ev.con ? ev.con.categories : null,
+ season: season ? parseInt(season) : season,
+ episode: episode ? parseInt(episode) : episode,
+ start: dayjs(ev.sta),
+ stop: dayjs(ev.end)
+ })
}
}
-
- programs.push({
- title: item.t,
- description: item.synopsis,
- start,
- stop
- })
- })
+ }
return programs
},
- async channels() {
- const xml = await axios
- .get('https://www.visionplus.id/sitemap-channels.xml')
- .then(r => r.data)
- .catch(console.log)
+ async channels({ lang = 'id' }) {
+ const result = []
+ const axios = require('axios')
+ const json = await axios
+ .get(`https://www.visionplus.id/managetv/tvinfo/channels/get?language=${languages[lang]}`)
+ .then(response => response.data)
+ .catch(console.error)
- const $ = cheerio.load(xml)
- const items = $('url').toArray()
-
- return items.map(item => {
- const $item = cheerio.load(item)
- const loc = $item('loc').text()
- const [, site_id] = loc.match(/channel\/(\d+)\//) || [null, null]
-
- return {
- lang: 'en',
- site_id,
- name: $item('video\\:title').text().trim()
+ if (Array.isArray(json?.chs)) {
+ for (const ch of json.chs) {
+ result.push({
+ lang,
+ site_id: ch.sid,
+ name: ch.loc[0].nam
+ })
}
- })
+ }
+
+ return result
}
}
-
-function parseStart(item, date) {
- return dayjs.tz(`${date.format('YYYY-MM-DD')} ${item.s}`, 'YYYY-MM-DD HH:mm', 'Asia/Jakarta')
-}
-
-function parseStop(item, date) {
- return dayjs.tz(`${date.format('YYYY-MM-DD')} ${item.e}`, 'YYYY-MM-DD HH:mm', 'Asia/Jakarta')
-}
-
-function parseItems(content, channel, date) {
- const data = JSON.parse(content)
- if (!data || !Array.isArray(data.data)) return []
- const channelData = data.data.find(c => c.id === channel.site_id)
- if (!channelData || !Array.isArray(channelData.schedules)) return []
- const daySchedule = channelData.schedules.find(d => d.date === date.format('YYYY-MM-DD'))
- if (!daySchedule || !Array.isArray(daySchedule.items)) return []
-
- return daySchedule.items
-}
diff --git a/sites/visionplus.id/visionplus.id.test.js b/sites/visionplus.id/visionplus.id.test.js
index 529e8f6d..1772e7e0 100644
--- a/sites/visionplus.id/visionplus.id.test.js
+++ b/sites/visionplus.id/visionplus.id.test.js
@@ -9,27 +9,26 @@ dayjs.extend(utc)
jest.mock('axios')
-const date = dayjs.utc('2023-06-30', 'YYYY-MM-DD').startOf('d')
+const date = dayjs.utc('2024-11-24', 'YYYY-MM-DD').startOf('d')
const channel = {
- site_id: '2',
- xmltv_id: 'RCTI.id'
+ site_id: '00000000000000000079',
+ xmltv_id: 'AXN.id',
+ lang: 'en'
}
+const channelId = { ...channel, lang: 'id' }
+
it('can generate valid url', () => {
expect(url({ channel, date })).toBe(
- 'https://epg-api.visionplus.id/api/v1/epg?isLive=false&start_time_from=2023-06-30&channel_ids=2'
+ 'https://www.visionplus.id/managetv/tvinfo/events/schedule?language=ENG&serviceId=00000000000000000079&start=2024-11-24T00%3A00%3A00Z&end=2024-11-25T00%3A00%3A00Z&view=cd-events-grid-view'
+ )
+ expect(url({ channel: channelId, date })).toBe(
+ 'https://www.visionplus.id/managetv/tvinfo/events/schedule?language=IND&serviceId=00000000000000000079&start=2024-11-24T00%3A00%3A00Z&end=2024-11-25T00%3A00%3A00Z&view=cd-events-grid-view'
)
})
-it('can generate valid request headers', () => {
- expect(request.headers).toMatchObject({
- Authorization:
- 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE5NDY0NTE4OTcsInVpZCI6MCwicGwiOiJ3ZWIiLCJndWVzdF90b2tlbiI6ImNhNGNjMjdiNzc3MjBjODEwNzQ2YzY3MTY4NzNjMDI3NGU4NWYxMWQifQ.tt08jLZ3HiNadUeSgc9O-nhIzEi7WMYRjxMb05lEZ74'
- })
-})
-
it('can parse response', () => {
- const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.json'))
+ let content = fs.readFileSync(path.resolve(__dirname, '__data__/content_en.json'))
let results = parser({ content, channel, date })
results = results.map(p => {
p.start = p.start.toJSON()
@@ -37,19 +36,32 @@ it('can parse response', () => {
return p
})
- expect(results.length).toBe(18)
+ expect(results.length).toBe(1)
expect(results[0]).toMatchObject({
- start: '2023-06-29T18:15:00.000Z',
- stop: '2023-06-29T19:00:00.000Z',
- title: 'Hafalan Shalat Delisa',
- description: ''
+ start: '2024-11-23T23:30:00.000Z',
+ stop: '2024-11-24T00:15:00.000Z',
+ title: 'FBI: Most Wanted S4, Ep 18',
+ description: 'After two agents from the Bureau of Land Management go missing while executing a land seizure warrant in Wyoming, the Fugitive Task Force heads west to track them down in an unwelcoming county.',
+ season: 4,
+ episode: 18
})
- expect(results[17]).toMatchObject({
- start: '2023-06-30T16:15:00.000Z',
- stop: '2023-06-30T18:15:00.000Z',
- title: 'Tukang Bubur Pulang Haji',
- description: ''
+ content = fs.readFileSync(path.resolve(__dirname, '__data__/content_id.json'))
+ results = parser({ content, channel: channelId, date })
+ results = results.map(p => {
+ p.start = p.start.toJSON()
+ p.stop = p.stop.toJSON()
+ return p
+ })
+
+ expect(results.length).toBe(1)
+ expect(results[0]).toMatchObject({
+ start: '2024-11-23T23:30:00.000Z',
+ stop: '2024-11-24T00:15:00.000Z',
+ title: 'FBI: Most Wanted S4, Ep 18',
+ description: 'Satgas Buronan pergi ke wilayah barat untuk melacak keberadaan dua petugas Biro Pengelolaan Lahan yang menghilang saat menjalankan perintah penyitaan lahan di negara bagian yang tak ramah, Wyoming.',
+ season: 4,
+ episode: 18
})
})
diff --git a/sites/visionplus.id/visionplus.id_en.channels.xml b/sites/visionplus.id/visionplus.id_en.channels.xml
new file mode 100644
index 00000000..707e193a
--- /dev/null
+++ b/sites/visionplus.id/visionplus.id_en.channels.xml
@@ -0,0 +1,128 @@
+
+
+ ABC
+ Aljazeera
+ Al Quran Al Kareem
+ Anhui
+ Animax
+ ANTV
+ Arirang
+ AXN
+ Bali TV
+ Bandung TV
+ BBC Earth
+ BBC World news
+ beIN SPORTS
+ beIN SPORTS 2
+ beIN SPORTS 3
+ beIN SPORTS 4
+ beIN SPORTS 5
+ Bloomberg
+ BTV
+ Cbeebies
+ Celebrities TV
+ Celebrities TV
+ CCM
+ CCM
+ Celestial Movies
+ CGTN
+ CGTN Documentary
+ Cinemachi
+ Cinemachi Action
+ Cinemachi Kids
+ Cinemachi Max
+ Cinemachi Xtra
+ Channel News Asia
+ CNBC Asia
+ Crime Investigation
+ DAAI TV
+ DENS Food Channel
+ DENSPLAY Channel
+ DENS Showbizz Channel
+ Shanghai Dragon
+ Dream Works
+ DW
+ Entertainment
+ EURONEWS
+ EWTN
+ Fight Sports
+ FMN
+ FOX News
+ France 24
+ GALAXY
+ GALAXY PREMIUM
+ Global Trekker
+ GTV
+ Hanacaraka TV
+ History
+ Hits
+ Hits Movies
+ Hunan TV
+ IDX
+ IMC (Indonesia Movie Channel)
+ iNews
+ JAK TV
+ Jiangsu TV
+ JTV
+ Kids TV
+ Kix
+ Kompas TV
+ LIFE
+ Lifetime
+ Love Nature
+ Metro TV
+ MNCTV
+ Moonbug
+ MTV 90s
+ MTV Live
+ Music TV
+ Muslim TV
+ My Cinema
+ My Cinema Asia
+ My Family Channel
+ My Kidz
+ Net TV
+ NHK
+ NHK World Premium
+ Nick
+ Nick Jr
+ Food Travel
+ One
+ Outdoor Channel
+ RTV
+ RCTI
+ Reformed 21
+ Rock Entertainment
+ Rock Action
+ R+ LIVE
+ RT
+ SEA Today
+ SindoNews
+ Soccer Channel
+ Sportstars 2
+ Sportstars
+ SpoTV 2
+ SpoTV 1
+ Tawaf
+ Thrill
+ Trans 7
+ Trans TV
+ TRT World
+ TV5Monde
+ TV 9
+ TV MU
+ TVN
+ TVN Movies
+ TVOne
+ TVRI
+ Vision Prime
+ V+ LIVE 2
+ V+ LIVE 3
+ V+ LIVE 4
+ V+ LIVE 5
+ V+ LIVE
+ V+ Sports
+ Xing kong TV
+ Zee Bioskop
+ Zoo Moo
+
diff --git a/sites/visionplus.id/visionplus.id_id.channels.xml b/sites/visionplus.id/visionplus.id_id.channels.xml
new file mode 100644
index 00000000..f39b2924
--- /dev/null
+++ b/sites/visionplus.id/visionplus.id_id.channels.xml
@@ -0,0 +1,128 @@
+
+
+ ABC
+ Aljazeera
+ Al Quran Al Kareem
+ Anhui
+ Animax
+ ANTV
+ Arirang
+ AXN
+ Bali TV
+ Bandung TV
+ BBC Earth
+ BBC World news
+ beIN SPORTS
+ beIN SPORTS 2
+ beIN SPORTS 3
+ beIN SPORTS 4
+ beIN SPORTS 5
+ Bloomberg
+ BTV
+ Cbeebies
+ Celebrities TV
+ Celebrities TV
+ CCM
+ CCM
+ Celestial Movies
+ CGTN
+ CGTN Documentary
+ Cinemachi
+ Cinemachi Action
+ Cinemachi Kids
+ Cinemachi Max
+ Cinemachi Xtra
+ Channel News Asia
+ CNBC Asia
+ Crime Investigation
+ DAAI TV
+ DENS Food Channel
+ DENSPLAY Channel
+ DENS Showbizz Channel
+ Shanghai Dragon
+ Dream Works
+ DW
+ Entertainment
+ EURONEWS
+ EWTN
+ Fight Sports
+ FMN
+ FOX News
+ France 24
+ GALAXY
+ GALAXY PREMIUM
+ Global Trekker
+ GTV
+ Hanacaraka TV
+ History
+ Hits
+ Hits Movies
+ Hunan TV
+ IDX
+ IMC (Indonesia Movie Channel)
+ iNews
+ JAK TV
+ Jiangsu TV
+ JTV
+ Kids TV
+ Kix
+ Kompas TV
+ LIFE
+ Lifetime
+ Love Nature
+ Metro TV
+ MNCTV
+ Moonbug
+ MTV 90s
+ MTV Live
+ Music TV
+ Muslim TV
+ My Cinema
+ My Cinema Asia
+ My Family Channel
+ My Kidz
+ Net TV
+ NHK
+ NHK World Premium
+ Nick
+ Nick Jr
+ Food Travel
+ One
+ Outdoor Channel
+ RTV
+ RCTI
+ Reformed 21
+ Rock Entertainment
+ Rock Action
+ R+ LIVE
+ RT
+ SEA Today
+ SindoNews
+ Soccer Channel
+ Sportstars 2
+ Sportstars
+ SpoTV 2
+ SpoTV 1
+ Tawaf
+ Thrill
+ Trans 7
+ Trans TV
+ TRT World
+ TV5Monde
+ TV 9
+ TV MU
+ TVN
+ TVN Movies
+ TVOne
+ TVRI
+ Vision Prime
+ V+ LIVE 2
+ V+ LIVE 3
+ V+ LIVE 4
+ V+ LIVE 5
+ V+ LIVE
+ V+ Sports
+ Xing kong TV
+ Zee Bioskop
+ Zoo Moo
+