From 2adc10b5675fd8a7550d36e24ef3df588b4a35f9 Mon Sep 17 00:00:00 2001 From: Toha Date: Sun, 28 Jun 2026 18:30:32 +0700 Subject: [PATCH] Update osn.com Api and channels. Signed-off-by: Toha --- sites/osn.com/__data__/channel.json | 1 + sites/osn.com/__data__/empty.json | 1 + sites/osn.com/osn.com.config.js | 166 ++++++++++++++++++++------ sites/osn.com/osn.com.test.js | 52 ++++++-- sites/osn.com/osn.com_ar.channels.xml | 4 +- sites/osn.com/osn.com_en.channels.xml | 4 +- sites/osn.com/readme.md | 2 +- 7 files changed, 178 insertions(+), 52 deletions(-) create mode 100644 sites/osn.com/__data__/channel.json create mode 100644 sites/osn.com/__data__/empty.json diff --git a/sites/osn.com/__data__/channel.json b/sites/osn.com/__data__/channel.json new file mode 100644 index 000000000..b08696f9f --- /dev/null +++ b/sites/osn.com/__data__/channel.json @@ -0,0 +1 @@ +{"encrypted":"I4izOSmRQbWl4t6Rpx7eVpU4ic79al7mqyBooPr/wCz2Rd0q9Nm1H3JgztkmPTGRlN18a925kNTZV9i/FWZRZhiuVXisgacl09cAABDfSWytuJTsfFYx38ism0MEufM9Ehwr6XezRQ5aLsnlcsKchQseHTR8jmREn/Y/0W5nSADf8iVJzf0OdJV3aTo70Dtf73dod/fdfBmpdzmIN29J+eQx7LcKDehwFqS6gJ2oDf2eo1Mu2r2Ms4C9zXChCFWXzSeWO/t9kINdeXL3RsXhyubQUJXgYRk+/hDImaU9lt6hR4aLJikHUE0mF1bhWPkvEKM5KI8i+Ata8wWaZOzBdKjVMfvUMbqUKeyeBLVcjpoGGZeyRwOCiU2FA1nzprxbfU3ArTlFluF9g6zsbtDytp+vk9QwJoTirmIB1Q3utN+zIftNUgkgnYoiwdqEQDZnN3l66uiZhieLPSGvNezDRNCDmLjekOdWBNN/1fwIi2DhNYoSZA51WdKMjiwHmRx0D14z0BiSebJDD5IutvYS2OOhMdIg7lbzrLdCF18nSK+AFO/7Fp/VbBfZTWRKd8wB8FkAzdv+2ENoeROGJ5XlphaWgmYbepuV07bGTOvtFC4+Z7nnfMLvbIeG7E/Yiy6zOH8DNSsL+TCiMreR8xY18C4mrR2bjwJVhqtUROqHLvY5pBu/0KxNHFjjJG2zwaoFcxpocKUDmwXGN6nSK6pVhmOGJX798HZD3NxLOAeO1vdWZ6dwUdDhb9oZznfet1nVad6UxifxmSJbaJ1sdBhxwen1KyLOWvYwg6MEL1TtNQrtOY8BHoF7u85Scd1YUZvJMYK1UjiKRK5ax9RxdRiEDJwm1PkiqSI2Oh9s9FtKu6VaHinLfSbW3fshL5wi0UHTvDfKUB0dSU33AA/uGZagFY8E1mePcmMqKDpYS0IsfyrgVjQ3HFhatDcBqdWj5fFVGihEoOmM4Jlj0O1/aF5LZ67S47/vtpDT/X0sjtyx3BxpexQ67tevuFWESbHmMWRF9FJkFkzfO8f62bZkiuAB4LN4XsRO+3QUrr1DzeFL9IgpgBadPAEfbJvk3418AW2Jk7Nh+OhMDBDinf9ID0JnaeuFcizXDKhNco9kt1edo04oAWwHIKQa4DX5nzazHycNtSMLt1RUyNFiP4MrzO/xqtlQV8BiPCNlsAJq6QZcvTfedhkqexFsUZCmjyZGiyHZkRQRaBnGIi97JK6CN2cCQmdEip3QCzcTBAlKzKropFj5+CEjUWTm5VfW74LIHORCTN5G94E9jiwrvRxvQdApJNMtgfSen3sXJp+qUUT5sjHq20gfzVOuQ8Q9svkuBtvqQKSiKm43ZVOC6W/6m/sc2kOWZ6FzHyCx1iZfj3iCt3uL9MMeLMmFHWj06oDtVgvZkQTTUNx8AVliOQhqfzrh0l9LCu68A++XNf9iL82e2CzE8u87PHxlinQXooBjHMh62s0uVB1WP/p1HLOmSWWBBkkZELBHRClYQiDtoaj4/yS7owYTPbYm9y/AsB/9TqUSMIbsUYdg8z9qPSuT56jSGjuOO9usrdBwv7NVVoTS/tc69W218l0CPZ0bQibmgwPRwSnC+eR/JCqFcD7nrNP3gIqK7QqtCnF3y6s4yrKmOJ8LXebdVRg1uppdbFtgGScGnqLKKSFc/mfs7qjDJThiykgxp/TXEYvYzyV++KGokyqq9oJQ39/BHkRbL2z+9/qzdwkyZlRko3y6wsEwkWLRk1LSafsS+ZaU9maK4y18vVn35i9Qnci+eCFlHSqfnwqPRoYKhi0A0vkuzfUw5xDmhWINhCKbcBIAYwul32LLWkCKjhNwS8XGomokNL86YTESqZRS9ZVvnMmKrreSvX3LpW9/q37NG5jZbYEb+gKKmgPElYEbEaaxjR+Ao/agBTs7qX0kYofiIC8Fzz9cMYjCjY8dQMaKWWkfok46X9mDrWx4ML+PdWScNhKj56HKlf+jKfq2/+DjZtwWDxlkQxFclWXVFVGYy+W12HMDo2LZFXj/t7SJXwe26wczjkLuIh4X5/OQWSPWJ9vlLSZvpH0Pbo5jP/0UNcuW6OMhQwJMT6CEjene4XG0yUo1PrUECgFJYwMANcyvX9Rc1P8/e7+0Yf5wgDYxPIsklj0TeCkV2U9z95z1MzJ81jyLYbfEFXuHNIG34o2e9vCtVbZWwqwwQRhEYSvfqJQHYRdbFP8RREWU73DtcktYHeuKe8BxRIoI0/eVz69UXJmgO/0gCP9LMEazWcFUtQmDr+A0iBaHoOd6Hay496dYeNQMLIxg7TTdve+N3rA+/SwBgUYFUQw16rYRBHPoC0hBQrDvPJgn0OfNC8RdOcMrTnJed0f7kdrFbcH69YFPb9U2aMxK8+SzEi8VFrj4VqMIwpGzfvfWCogqYMrATicEzSDd1uv/I/0MFbmym1UNE0LBUZBQh4tMKQnPa0By+sAKLlB7JGHGsSLCdyi1EBSl0PKvKmqs9DVuZgeS6kpbCVL1R/2BYRJq2gpzokEjIVuyeqXdhq25Nuiq2o+5vGRysToyVpcPXh7X5m2zRl8vCyS6vZWG3uixEYW1m/1KOjFy6N1MctJzEBuMBolzoHgNXyA4E0EiI5djAz7IOFW9OUfPsrmcYXge9ZUuUg5BlGvKiu3MTi9Hzs9RAIsi4OoiG/m4gsoZxBiEMXyTeHKRUe/NSjoRS6NwJWH18MLYTWxYBuAiOlLoAcWFSUMzfiQbxLYMGJhmgwItwwr5qDCVZ8gjoqWbpAezbabeLnDt/NAPeYv1FcZ/i1j3LYmNZuaDBfpL/kX4pctJ+dN7bBiAkJypIZPh4CIIYLZ2jFzXR6HsgbOPIfpqFAl7SIOBOv2sgdTrPdOOQZlssSid5NnH8pfuBKVZTcrvT2k3lk8eXlQhZtxY3r0zcD3278Xezu2Tt+n+4VnV5iazDBrmZyRezv3LEGItu8DrTR0KqHqgXXCF8qsV9EPTgAWTS5sj+hEKUPjoEFK+t+gLP5gVW6CCb7+uz9ep4um/sh4YpypXb5Kj2ZV093wJRlE9cOkXmpQMdr5Ccqpw4cC3FkPByi51KTX8+U9yoF1pRgO0HVre1q3uJ3Cr47O02F/sKfYcqd+2ga1pZnqtmWpxzuMb4TBqJk1jJr03IdtMDd9ZfwZMFqpodbWjAWzV/CYq3qHWrqlBE043wedVwSq2E0wfLJlVXl6cXZTMntgBzJrUkoYzw+2KcqJFDJ2PSO81kNUPVa6eCQvjsFpadRfPiQvmajci8QBbC7C1nVPptkDmyZ5KZRHN3i3uYWiWA+MdrUZaXmcjS9fpL5EyuNnagyZm6b4G3Qw7uF68jT4vA5LO4aWB5p9VEhqVA2D0P9CfSWJO8DIuBOAPeF91sOM6LhLA1+Yl68tv+BxA+cbJalL+C1whWCSnBYRCD0tY4tFcxEWH3V2QfZZLhnqssrmpifdbkcjJVsl/3hWiyL5mB1+vIVBRN7tp+mqQHR4wqYg9I+3yDZgPDkdM/JsGSagER0QPsrD5HSxD3dUabT3mQ5Tmjg8Mhah1dX5bIba1Gy8mTuEmmVIS28x2R+m1mKJCzAkEVjZldOT0Nb5nyRbOswreuqe7VOCqU/nrVP/bLAYp8rYUImOG/5fgSXqJpoPF7M0gCCf5k91kF9bGkSZIaQ1OQmi4/2puCocuH+jiXa68o1/VQhuAyfI6z5o7mDoElc9P/xYeYBGjiAXqE4BgOsAQm9hLEfAVg7RiyP8/JjdP2O3R4+31leSueetp1wuRlLTlsaB8l9Xw7qPYvbf/ySStvnobMuorKf/ciXn34Bmv2ZN0YfgDMSsb4aufEXBQlpWIf6nf8ra3jOFKEaOstKpWbvZMJT2By1T5pByhgK7ooFCSUDdgkWJ4z1KPTH2oDFjbV1egza04ben0E+ALybyYo7SlXEJWCkj0mJl85bZcMuc8tOmw6QqICYeYCvnkBiUpCNw+xqLriDP0EM401ffYPoOkbuTEHYZbkqAfqKJMtwwCNrFXTVUVdl2hpFSJklud68Gn4j+IF4uY+RcenwlruXVA+bkULKOYV7HS7zdNKqNu6XK/wFC9oGEhAm7LgXkvuina6c7Ys08jp93eIDoE/Kx3WRZG1qRIpQkK4rpHrOYa7yc4KmAjt7gRQ19rgZ9vrRn5nkcjUu1knmfwQnexocYL5WeLzKgB+Et67/7JzOy4b9lrZEuOimjJEwoQwAl7j8x0l6h+4K/pOrWmAytBb1rhJRYYQ1GT73QScRwuNazARSflvCfPlyKV/QWsEQrhuFday5ppVW3nmC7GtG/3dLexQnaDxiauCNpXZhiZfMncqN+tTDwd0gKWx1A+wXC/a8Y7DCnvmPlG311tCWR4NuMl0dzUwKNu4pBNSb3l0l/ogIi1dNmklPahgnkX2uMvltDxd3FumcRYFc0FFV+vvUFH9iv0jMM9526PEt4EurIAe+o67a+9zTcDQZNLAaStq65d45DvFtDZH2bLvcI3uQDwuRyoDAkUPLleeqBAnxUUzIc3NTnl/v821BcAR83S+N1PAx+khMUFNawB3Du9UDAeQaN31ACloWhk51cW+hh6Ezb/h2EB6jb25BHNMfm8DfsCNDmIfZldeLurL9b51iBPnIIo1EKwiFwUUokQEIkjer5yz0kg/VF+Y3sUQNU47nI6mxP8H8H904ZtSZIXDariFMFYejOKjcLFn6/QC2CyazW7QQkz3yDLo4z+P3geO2+o0FFZcRCN4gT3IzOkXYo0LE3O+K55EHdFO6Zvl/AyAj8W+frwztflsRAOR28y9WabhUQEq6FJjM4AobtwSo1kIhOtJkuyI1m6B9azrxhgVj3zi3x7pIjoSCPzTvDjmS7TFbVZF+krgxLzPNyGyZKjlDm+r0ItFvfjrLzL0VprLZDdV5DzVpe+3YO1f0F5cE9wOmxDG/g/wfd/scYqw7ai/3BIu2HK3SM9ujO8hwr+hKtilQ+HthfPdx0LCuQpWLQJMZYp94U9dQJnGxTV974qxZla3C0YFqMenAzXPij6sSTkii4oyjKK+bxPMNww+INHrCO/9v23T75yZogLauIZioqXyRAWH7TUxx8sCYOxsNCCwX73hgHF5bhT+IG2+k/qWndrXLx1Z0dvb4wFEYl7QmjIf40NX++krKrlcmLWBcAXcY2pgzbvNErn/0F0aMmJbMUDBcJQy2ShvZceTy4QgdyVdg9UCvbBFYNbojxwiYNQWbt7DdTRnstQXrV895eqGbg/cY2iVVwnGuIyrP3jH8/+bipx4QxS5vqPbAT//TkxGap0jVKDNtuDkeKxDU7jtW1ojeqi6QbBaEu8E+aeAZo5hJcmUKbPc2n9zy8dDsv7UDqU0bAURNAlv5Kwgnihy7GlpfqKUHBVV/UAOuHLpFeMJSaz4IM9CWL1uuBJ9jjL+9zMs5JXgqown9GBYDMpX15cc0m2Q2uKQ/o8s3oBmRZ/UZREHjbc94YpSdNYCEvNtg132dTOa1FcNqihGZeGYL+Tg/AVnjEbt3KgGc2VHNXe1/5KV2I4OfdSFIvIeLY5n1ruo6S6q+OxgIcsrcWmjf6z32UGrLciM5ZXomzv0fLzu+ok02QOEFBb1lP5WxX/ONsrLkqJdE1EXBjcD8UpZzUZ6XYxWUhm0LgmdiSRw2U9qIMZe7wFZadRQrRuoVf1ZGzjoXGIWujFtHqH1YohRXVKhCMQFxkNCl9xyvWlU6MV1psqJ3XDFnspyx8P88gBtTOjk3CJIkokuxpd7fQEIrgp5QvkVBLh1NohyJRdgbVjMJ67Tl0X7WnkPXK4ZC4mnKItsqJjGE9mHiTkMKvJT8rRbeW8+qEg1pRGtkIx8yxzGFL8Q0S7n57V8ypnAe2ysN9ZidkqhZ57F1adR7IJ8X3Wxj26le2V+fUA1DqZXkc1nEftxCW/2/FkXT2NDme+j0Xa3VLXqQeW3oJ5eaZRQhEbYYslO7B2R2z4F2GeWUkmFWvzNehMjg1ATc7A9Q1u1o9I1RwYdIgPAca2MAjFNHTD2dLNsMj6/mQD2IJ5D2ibsbCjbRpix1Tb9mOKppBqMmqjUM7CJKJzcjmF/09TkRPFjqQ7chxYvQ0deRDAwAAe/fEn2JNvQhJJ0Fsqtkq2Kqe2DH/ZJ1y85FeYgVrbClNywDv10nuW5ZllgxawllA3GoN3ixFMC4Qbl03iPPc7vlufNnXBnV7yOWtkGeqAbrosx7TRPfWUe+S+dTQM0sxroxyrF4b4V3t8ohSGh+jBDtyZZpxWwmZbKDMUx8QBie6ElPMxm0J6O5vpOTtqmCmtEGGcjNVLB3gXgCzq4vdY+sfZt4zmbT8Fc9q4lacqZQnK6Yid0A7mGSZeUYgJuVM8EhtwS5CcRuC2mOOA/4p2eYl16An8MlCG+ymEBQSIBU0IgluNaADrLXaNvkavAypmTE4HsNP/GuJcfxgHZ5kWQft0kvdYe5Cwjz/a+fAbxYCKSwsye0InuVCHyBo6jXdJXeMEtEt1AxQCgFDaCFQb6XZBpFbER61GbtAjL+OG8hLeWDsV4tO4xsMHEtKNeXpRB3z17a73LzHH/w25fMg0FgSpV6CrWOqWwv/PWDVhsp4WQeImTa5wxZQl7UB3IMLvkFb8N93Qlq6fx7PpBrkVv05iz5Jcxr+4ODRrI9EFeyzI1/q2x9U7rUF/Q8HvDrCVPLNhegUMGEg7aqLj3TNEGyRQQfqPV2aviB2vZADcQ1zNLehIWlnkiF+oVn2yrfLWqzyq0Cjt6bvsyZSUIp9imIZzmVbw8JGdALMnWIhHxHgp2TLxfzwAZNmyG0mdCleG/Csudj6UwAd75R6sshU89sve/QRFoxuD3LAhd6QA1SNTs13dBIAGQr41kYmHlWqRQlRBQuQYriIqxgTHNfIZQvtcPpEkxjq1hcZFPQfHfkrYmCm9DQ8brPKKZl0h6dEq+ebEkrXnDcn8ZtEaWPkUZ/qdWe1h9f/yBZymryxXeYEtdXDDb9h++inX8dXEHira6J9Cx/Nj7qozlD8vbmaQh5+l7dXQ3xvj0vkVU7qAwz1eqQC/8PwrYCIB4RHmSB0H/s+0yMI94eCvTh4HRsfSOYMavyZi/Z/W0Fpgo2lyluszS3yz4ISKo2NLtah5GZ8x690mand+wH4CBk9Rq3R37EilhUVpXTTKKnLFawEzp3ZVkkhMdBAjp2JTu+KIr0gShbKRFQPe9xT/hB+Ss3FYNx/I3JL2Rr6Uz6rK6OU0QfcgMtBoaPsMSVhucRTGrt5Px+i1nRWbItC32+c7krpgxVSmcLS8H4nxhhBgqNEbnYiC6pofnp3fDqO0u5cj4hKKdaQv+P0aB4IJWP/21VXzW57w1RI6qKbJaYOxgcN9DzjsroKtm6BmKhXuyO+252HXKaq34nzajMBF4afZEKrOL2hbCVKHT0/wqwctsZUhOFG+YMoaiM98yMF6a0rA6Tj569gq+r3o74Eyv0EDD3lkooMolD+AoiAucHNSW8+1slWUzidSo4b+TUUOoFYUkuXx9Bpcdo3XQ8nKLEpuFjYFCpNRo/zpinJcHsphnz7JlGmPFTkSjjHuz92OMdZJWulC3d95ml2WNT1cHX9ag4xoE7f24hrUdBPZj9VKAzcMTPCOJokx8QxbzgfZBxqNPKkJCa40yLycr2xTlM6rzyFo08IwGB3OloO9lScwULTzQR68a/juXcPam7+q9UNmIbYf2xAGBV0un7aGqFdHG4LcfJjRAS50oNSRUKkFs+h+1zu/nPhxSM53rOeCyR7MoJAml+3K9qTteafyI3dV4T6BEap/hwrhWhcNkXGUBzzJj2dcuEY0O2vgN3OFWXzURcs1gAmJyb7znid4uCgzEqDW1rWAVCQxgsjpNyMTcxzmAFwYenGuaqZhgrsxCFc6++EnorZB4SlDE3GT0rvrZHG31+B7AHT3fdFFDKFF2rTCVbSrbdwyHklaC0GaL7yzFNetB0GRtInDujaHdKcKuXhl6QCr6Bt6uWvx0PB8t+PFTAofY0S77fE41g5lGnxGenSWLdzqFnoK9hFHFk1BsHw5sbPee+/86LeO30imHEJ5HHKvWwqM3hH9GvOjCRPWVJee0lDcki8tht81/uaXXHpZCgRQfiqAtC0+r8evlqCHAr63T2I+NA9uORulk2lP0jIaCTsCnHQ7o5HxjsL31kTN6Biy3F9uoOS3yrBdHgav3kqZAemyuVxwGSs6ukb6ih2qPWrusFQIJv+9i3MAs0lFSTD7dXRmI4Own8veuy8R5a1Y2yxUlK2lDbN83gYFokP0vvUNC4F4/Wy5jpaqaSdf+kyZxBgXxwRF6Z1p0eu81xK0T2xb4HG2tQC3s6JYLUllT7eV8IdaFj+CeMHDbNR/yglvNrxPBmfDIyW/3VLylBR0cpdrMy9YSipmqCEeK0plNDfiesd/0Q0PzdvUxK3Rw3E5aU/56zGQ8sCOffrO47yBjtniVQbOeLmUpfqhtoKu+dTu39SV5gCJag3deK6SxI2YvAEQivpyyJAXbD0mflJZ5TVvrXxjVHWMoLJTSWAvBE2wfWDbT6JS0QYgzoL8A0u4Ufroe8hr3G94Q0wv6AZddHsr2VGmnPBSluYiSV8ubFhwJAJWsUatf56T0mAB1Y3P3nmWLUz6LAkcrLtDRnE0kdTbdKAWAZxxFrBgeYvxx7Jj5FEBhN21YVxecUYRokKNjiYxuVO3OOFUBrgI8EO0XQHQyUrOKN+pgYMU0pD4iw0/OMH694dKr1z33iAfH84m5NafAkeuCdr55i8ezfJUldHY2mkJNqufbQACsEZWdIZS5BKqY3fwJQnA4FJsqYNB7hxaqB84K6pPhNp7jr4ujkt4tOIrSaVhOvxGAySHBj7pEPguYt4rZvec+lW1whaE00gbrLDvdzTqFS34+bFV1hHvFhx1IZ0uo6yDndbTx8wQeJYmZ10D5GPktC3tQ2Dh2Q+33sWn/v9AQYbIepOWxuvq3WCmhl/RpQqzrKrW9vrY1O+4K+dKBL33JOl1bOTUsXGXgb0AaUWmHcI+ngPz0O/P7Go3BT1xprRoll5kcn23+oRzFXYF47ryD37kFrYzeZm50sMNER7PU4CvAtIUD5bDtu7H1V0rhTkZXVmWxeEIZoRXNZdsTLCEv7iVWnQMt6qtz1i7n5LgxNwOnv5aUgh1vhZfqacZd209YPYVN62bO73njihSB9hkCtNvKAhR+s12M1jpEeJ+8p/1Kb8J2okVRmelLMLIwhCsIR667AfkCOoJiDJ+ZVwGggczif4USgIBJ5PX0K6mLPt8f/K2EhyiBZG6rm+DOHav7r1SpYDcTcUqAltrreWmcWI6+E/ynYcmkwAcj5mDxLGVIMUIjXFEfkpNqKCdqHkmyE7cwZHC0ZteKI9chFaLDf5AULv3WCq53ODVmiitN5wM4Ep9/srIwXpCoiNEWXwO9Gg1PuLXIpX/y+GQ5erbah3uTSre6Tr6Qygc8sK8vEZZAbxXa0O4CsBGSAAaQLI1GvkPsen1vAPqkFT1Imfp0HzQic3XlsQBOq28it5J2b3Eoi02MIvcP6ngCcT8XiCDR5es3GxL29RSaraT1is3Ez5VdDicxud/tmH+b8y//uz0Umt/LpFLm5xTuCcrlzfI0z4FtxMKkiRh65rD+4+/mFcftV4xu0lVI5joAdfPA3cvlxlvM8kzHRnDjL6Dk01U/In/96qrkEY6y1MoKqalJuCaWE4AcXSPNbn6dTdglb5OozrJb9uHY+rF3fsV5ezCRQ2GN2w3iNPAcSqYu2gKyGmaMXCs0xRq756scvkyeVqbF7NEDwWe6fLiuky89CmPjXo8WZYV2iEPzo6D7xNpj4G6BHf/KB0wZMDgr72SCW6EJ7sbHUA267Csl6JSgt4l1xURbuaHJ19FBpmCpet1vkQBypHMWQF7uXnLKHK5uhtjWRFlg2Qd/kbLGXBj2IPRE0p5f9dKU2LB81O4Nj0H1/8ZBsYgSKxzyf6x0flX5kkzF4ovtydzLc05o6wkYA/tCzpt+e/hxMBAKbAvw6R0nK47g06HUpTi+K7LAZW6f+yyPfnabQ9o1Ylsc1znE1nJbE5KxHZBoNKUyGXrUjITm9VolG8YCs/dbBiEBm77wWPfMwuQteGbhWO23lwC/q2bao42y6sIcQPxY7cvVR5NAGW38jM01Mzd14rENIhiAJR/F8HmDjMeuylWABpWkOoR7HyJQxIwuN+0CnrV/VhbBEc9YpdYhu+ouxnkZWoZ+I1TawTmn7lsyPJOiJPbqo6BuR8gj4GQETG/iDzvCEv6kz2xv8Ss0NHnETclIL7bNbkl0+345IjmAgiCFyIa235A48z5R9rb+AEA14Kh34K2sESY6xtNZsVE5JTdUhnRhSk2QlPJKMJAfOjb+5aZs5btZ/pTTBTR1fovEaw6KWKuwA0agXzfFTHQURKbMlZQopx8DAS363ELOX53DpWrYHQlLSb1GBbs40RTkcjhEgEwxGrFgJC1RNeCtLmZWa7XUeVznDoYbqkfA760ZY3mHvBRpFru9swS3zLLJrN6tLnj6w2xDW4VbydhpY+Kw1ija66S1P8plgAGcLma5RHy4sRw+TLLcnj+0N90y4I9oiredmGjBuoRUcCUfH32NX1s3OBnjtwN/A4zzqio1nQGKN92FBbdRaEK4nAj3QKf4++enTsAUFrNMLjJdtvAHSSs4iIf9VaFN1eP/fQy/tXqgr16028Hv+6xtdSrifKAOXfJLFnjSsP0bdKGNAPsVx1jDCZobnf4yMCYM4eJCtIVrP6wguj7G/sCb/FYxBNU5hVLCNnWjNZpEjxAWESdLhcWFjHvIxf9nPvMB3QcLUKTMD5Cn4GVvQRO0Yd6gMplLiS9/P2LbLcRqCQnMFZe6vtlucDDmw6V/hoBF1/U4AfUwSAZjXuTW/OC5K/kFSxfKy1jZ9KOD2F0eaQDcZ86ZwzK/faiBrsSePTXoKu10DZHIqZH6T4HS9d1n1sQA3X6TLSrzbapXnCMkqZHLAd1y+83uNxo9OIcoc2VnNBobF8DcXudAh49696OJPw1a3SckEyR38xpao3QweeCR3kA8Y9O5wFJ+3FQjch++LBzLx5sIGkZZ34FzQUa0bsz2XMac6ScWTfbFZHz/4813ngcc4EHig6XY4PL+BVI2FjAxikt9JzNRsqRNcKkISwvO+wQy6c+nspmc3gOkwLSdkn+9iTQrtlQ+6htunagbTJO6dph6Zq3oCGkDkjRp7+rnLg0VmaFY6iB/7Jey13oQRrIrAf30GhnmkJSwd/OvI0Jx3hjWAy3yghxrOdJVunVJsXuLqxp76wL+NR9Cy1SqyQ1GeRR9WOJ1qNEYA8RMuuQaWzJWNgJ7DwyYjFj7KludwG+TiYlZ08ZRGUMS+JGNwbWn0jw/VWImEpoV9wuBOVvqv+FG/oryHoTqzVPD0Juk3Na2LivYbCYsXZ/5+1jTSI0+gIUedKV2HtHPIA29LRIJ+G2ScJnDpeuEpO0CsW84U2ux3CGxQjHekfDhcwnBokbrB7WlJ1X+P5By2o0H4+xTe/PRsXvXcPhL6f2/3aZHYrehp4qfIqa8w4btcxhZCbnM94Dc5sHwNwZGRXnNOZ8yGX9BZikuB2OO3pClgDiyN/caw71/fEwPgFAd8VAhY/bEhnKUzTGU3eXyyH1caQcBxm0DweXqVjQ1539J0v1h64d8Ivd35eJ4VMesbq1oL8bJiFKFaWSSViZpqxbdEl93Bp902zhQUdj2B/Wu5wA++Upd6ExmNK90qBOzrgdq2G3RX+mq3iL5vFe8AFyara3ezn46SJwJ/ugIy8Xkea1ge0tOjIphGmUYHxPzTx9jAicht1VJk3O7rKS1duP1AiNJCDR/7LWimz4pVFB2b6DRlLpGHphUfb4K00CKgwSh6RlrqrHkM5Qnz8y2yG0wyzDmQr6nFELsLMEf04iS4YdAG9wOVc4WvXEo8y7BIpSgxuhefFJHbz7SzB/FA+LD6MSgUF0DenQEXqK1F0wj06EFcDrJdfXEkDMvuIf4UvVUcxS/ZZ2aPJow+GW7a1vGGar0VGOfgAhiEnNZwtoXtA/QqW5f6HlKXWQ4Etj72466OddLXPixDopd6BmX0gIrZfPH8ogVhQcRytEx08JrCaEjcD5I8x6TnWecdeLdjOzMfJ90EGfiRYoXzOcHkLxJNBZGK1a1CXbeQeNUK38tzWcAXmYIvJ3pwXJ9UjY95R2+4UZeS3WIh08qslsjk8uWmAnv8E6cbqMhp4Nr6gGd35ix0bKkTYKMCkBy1hD8yxhsZBJ+dtjXBydnnSxPeeUbN3BcPsLnsyCO3UfOeK8SEqSMomh2k/OHKD6S2Uhy88mf1QHnk0bW8SRgTyFZDVWY+9q/ZTdCcHBZL1lqSPIhk0rgQ0pmi8Rxs5F1RSvZXbYkmWoVSfHJ+OLep5x7MAv3FZPUptyAiWA4QypsyFsBh3jVIHKAKXbziNmynOFYK1iLp9TS51ww+W3fYGDajdPpzM6ADIVJ48cPn8OgsJcM0ZjqYIASitQ3X3fFnCHx+Vq3m1wIWTei0mQ2sh90t2RfJPlc4ZsHpI274Q8i24S1j6PuvpBiOaxfUCSlH3JpNJ7EdOJ2FmU/DBW4XbrpypCSEKWbHrL9SgGN8RxBFSgL/l8wTdZejHstB3YeuPVk9fEuDd+eO20alPJWVSQdmEwW9vCBNx+juspO2czruAnTB/jk/KpQOenGTZBUvCLH5qbO0k0TfCoGdSFzMr43O/oCp1F9Z8k+KEzazKV9/WeVU2bXv0GfBTFhlS4iKBk2Ny7n5UflpVcLPtrdDHhzOh37nAnctqc765SMjKlCWbQ33KSFv7CmcGtZo7z5Vkf7nBLC1vGNPNrgQ2OZwl02L5IaWbGzacEureqq1AssnmchoPY2A+P2THgGggxAtcBHqvU7RHmekHWm/363uP0+r1zreUHc35Tenl9dXcxET+DuZHehNlP77btphi2ucv642C2E97PhyscQJ4BnLcUgPI4MeXQQievRN4v3razPzH5POqVzpiAlUOLiL+WRF6ouQEbFO+vVwrOV0HvXscRLalsoaJhPnev69zUb52XXYLhM71GOZql6mA5NA4CiE8ZexHAQCVxBneLQq8UB372hC/IjeTFeh4XsGgHMh5Zy9cKdnQiB0wxghP92AostsDOB2RuRCDQVsuGJYWmNz44F+MntY88bcpdtsnA/oyXlOi8o06H+LupItXG8nF6TJmXkEM+5IeLP72Z/PJOQBFWtq9xYiFuOBPquD+YNPedzHfchuwiehjzhhddBhHhdxgWAOTMy0kiRqVYdeiGAv1sIxkK/JIf8FCCRrVjbhK6RosL0a6ev6D7L9eZ96A/VbiPQzA/RG22RBpY9HSlMojgwaAUdY5GjxHl6lfheKIGklZnrmSs3wSvyntwXEEuR5YLeXH4GEhUwzEZwmRJ0nAC34K6Ij1cOTlzXRxMicN2RhmOQcDCrvlIjzJzWYQJag5HDuz7xNWhcc1/cm12vhP8Py9K24tmADZ9cITQLbHeEusj4chP5H60qqTFga9hzYUaW5wIRCURkvleFey1Gd/VCpBLnBC8qVU7IZ+aRqloDN7/caUlvpdQB0B9MhTlAYwQmEPOcnuBgBKXhRL75zMIB/BWxz9VZO+NKl1B8YvRp+vSLm1k36hD6laOuaoIukCcodXJ3bX9fHWoUGEeYHZPY6ZlO+32kbYvYU/DlGl77ckM1NSHBfofwuYnD9d9YK8KLvhVEdzNoRdxSaVhkBRG8l07+aZ1j0Q+s0+9vxpHmzA5tgEP1DgSbKzgyaIYaxywH8WSB0bADwEnvW/4XMWgD+QP3JHFs2Zf7hYpZ7sLgTfBh+cpza7gH5wUvk1qtcfyX0iG/hOQWgc4tvwL9pSHmkQb8GEImLVk94b6L344kT8ZltwjgePqY8wnP2VbFYsSOO9XU2RPnKQ+BeCGaXTkF7l5Rfi5CY0cBwHc1MdDSixklxXVO9cT9/F61LjkiqCVVtNGGnSCr1vmLMb0IonoOLNRAhMXSdpS9HGppQKyCyRm0fVKmzhQrwaFOcHYvuKoE6DGlItDmeRlIS2cMPhyize3DRyff3ykhquhTO9tP41AGo3rUI7Sy3knB32PfRZn7qQ4044bgeM/gO9cZOeUUzwdvNv8uKUm/r5m5Ehl8c7OFhmB/TNkUZE9YYDSwrpbz+DhPwMUe50p2S7C/oWOPK4tuoy3pNq0kmBD53rgn5doOfkC+0cLqgD+bzibfxBE8ZYGEISzOeX3H/WfBsGDfH/dBe9Gja+heqqm+mjUvVTf1+WFN0zlbWYM7wivWzTmjOh/ReBXTLCok0f/HRCasQeXUwac8QV9TpaFUw4Ae2YHmIGaKZmF91GP5sYKf0tIxyPs3rMHFY5tMuqotHQj+aWxFMPmRG8ARdWkwtypOBDP4AiWb0NHbhYwwaqz+EZioXdW/4ptsp0WvPkrnGOYC3Bf+5fpn1JD8LJwXA8ysLnS5d85JLQt+OQMQvAfRB7bzu1fgugdf6LsBVMNRXlXVxVS+c1bi2RZD8XhBpEbQ5gUl4eiM+Uh4we7jotmqhq88b2UGPMqvqH8N+wj+b0B/1t8ohB1FKroLQMXvNsQSAfL7Zv9WjOPj4VL0lRRCcKldiVPzZg6UiYkxJtaOa9NcxDIPGBs/FnOgZMjOWTLiZSDr2tcIYBlzis4JwlhjEUjPSK7DuZxQGSh0Ec68A3k5fjf+oh+DTh1FEdhyDaSIz90k7VqCcvwdt18IKQJZBVWubuINggLE22cx4MAoQBM4j2ADGfuPkhBjDI9RCnE2GSYlJ4XQU+kNnUyOIQ81CBv3jlkf4TfwvntOoeYCygYbRp5mOtNNLHaT6a8hg/KOLLULYl10QGaJ6EktljTKZBytAyPf7QiykeSdbb+0GsAR95wNfLW2OF89cd6nNoyvcUaLvJLydtRj4+NcHAv+tqxNXiLfGq889vFVrGiydebv/SdIFOpGgPY9U6xp9Wywr0QT8ucKFpG9KY4QJhArqF1snYLjxV0zdk3y/67zy6qJjFgdXtamPLQUWJVvYYAdy2zblTCgbTpZkqlhTX1oYYrYBjXVVzIbwqx091UUBkNvEvk8aEEQzanARY0LrdtDsmYTMn9pmLXCObbKb0zyDvRNHTiPR5+nrLA3Jymxcxb1S3B3ayPh75MFY99XnxU+n5WkmTta601FHEH4VCYyBH1bufDWnDA5o4uGb3UMXugog9IrUVaQlmSqxjzxuPbxoH3y4Ea09dT2LtJagYSGRABqUdOcv8gCtgdksHoweefpMDL+GUY2R2MEVYdO+Q5kXOllrPjA5AR1dpvhb7ZFAJoqm050kWvJMIQWVx7pvu81H54KtDmLLk/CkG3jfErAcfQVz9TvEky/AK4LpnF+XwCmdQ+adFNpq1KF1DZwhcrDU7O1rQHmJ4Q00O4DirVitC986viYT9xXfrBcPKJKw/50rZEN5bliRWgtLO7s2TtDVnvacol1KaxsusRM+rGW2Q/VNFdgMVXU8Qq2o3d1MKtYa0MEuS/pkbSqqeD9CKmOGQaETQqANcJyJNn7WLWM3DlQxYZYFqfylXaEe6eJe/jvJPX4vUC5PfA6x/XhcY37/hj6vENK9enYmF1Zh6Femih+hAnE+qTRuxW028dG40pTyrYH3Dq3iycro1R4vsBIWnsj9hkMsJBt+yGS30KxO5iOB2VKOASsfJPj4aT/GdFSYbsUDHU0r+wo5GFFq/1TKt7eH0s7IGSZPfHRv7WQAuKa90eS3lO6IKgcpoaZSUYXdd+u/G6fGPjbeCYRkMkpUorkHNqPvgp+sc4QSJb9v20+Luz2UhQEj6wJRonzYPO8mx7oHtk4Ay1FeiS5BouJYpRRrWXpYmUkYeu2Rc+WonT7d6716wP8EoQXpNzc0iM4NWBcL7cF7rnPQAbE0z9n3HngiCse3GcEYx0FTNRaj2cadpkli3+oKedTsRjljF1mfh3XRAnf1XucYpRfNTHNT6bOEazPVb0DD2It79GMvC1pVIkWY0yzPp06ZxmEmerj1w8Qc4QbBVa/9ZCDWXN5wffE4CP0sV37gm7tiBR37RSv+xlDeqPoRhdyDTaDeQqnKhpU+gZh3gYVHt1GsU/njHPr82XTDvIH1ZWA6CZ5aXQ4CbvTlpUE6PAZL7TNzKwJbkN4WvzW/Flpzq11D+wMWyfVoh73ZLMvYrcE+wj05iySGI6/vvZLVWDLUsHizBaHE6MHu1Ju0mAtFD+Cgjpnpxu8CeqhbOdqx5PsnIutixX4wyOfsfiCYZdL/16GcXD+aH3jiHW3tQ63aiTd4+SZzmJ3HVrJU31wLxQuQAUC13yZA5QcFQmh++cf3C0Wb+10wi33eFNjrR7RpddAkQJLutaCuAaHQGyJ+hfM0Xu34kd4AXcxbWL34PeKk7Esucdf224eWE+HWqYAyvb56lwweZRBoxo/0LptOTYM9RFU+5Snx4bJ8mELY4j6wpLs8BoYh4zbpF3+znEPqPSxHnnPK5bgYvKmQ8ku5W5KXvexhjS5HryHbh68yEWfG0fvah/o/2OrAqj2yxAabmeFnEusaqVqTSCbVh98AKRC39YfQeJrmaAj7H7TcF3NTst9jRfG0CQCvgbTCHxddnVSYRUhWt5SesXkkOGTteh3YzG9IjiSNi/ewDfiWImkLGp+GpqvX49LdkU523VhDMYYMVkPiO7HueDFLeCAYuGlM7me7G9+CLLbafSc3CuBpSkmKft8isEyZKxTI0Y+urvTF+n07TUMFDRyrby7Kpa+DYuI1pXNEBzvcOByutgehn8B3XYkW5lHjA9lAbvmucQkop9w0l5IdyKscwzg8qbj1OPe6Ja9oCCnk3MTjm357oWzdUCJ/AMI7Qhs5+UAdsizocH6kjnkSUIfWsQ08OZPJy/qU9qmhzFnTCGl+Jf/BG0lcM0DXBCc5tlkP3HvMiF7QD2GrzDzNk4yPRUWpVBSsawJsmAcXah383L5CGPNX/ysovEHujQ8H2Jj/2lkSanMTcg3nxtl/OEYkXRErjBxEj4TgYxSAmXNlAuo9/S8txDwRByO8IWXM1DlYvrnSBXdw3wJT63vYgRQ4WMbBKah+vYPG+MTOlZ8VnCTKu5icGB74NqwNvUziVl925mLzafs/fMcDtjCFDUwlztcXwKNnDjh6IKHf2nj0OvqaBc/AUzjZO790KTLK0IRk1CTqeIvLdlpUBtvcwffbRQekpn3mJvpvfCqB3xxML7saeJROch7Cy04TrYZVL8T1ILPBIYzA1JQk42vI8+vKk0R1tMJ7IK/lA0ABqMPUSgTZmozaZKWjSx0kElkI14p48zSHZVy394o3slyUmmsltH2JUK6qjMz4ZoEDnx0SNSlFbpotKjXJjI7BVtH9mcRpo8ilKc24LHkGAx8wZtTFxsGdZRVurAAqchgr7LydFxmgvRVR2V9lJmJ3jmh4ouSt+sjJat1v1WT6ZpdhTa69K7Ayb0jGMl92Iqwl0y/dSzuIYT6DAM/17TWdyMWpqWWrWxFPzLRDKZqNM5NIyl4BDR92mw2u5fVARK1RP3MKJDrZEIFzKFntOA/ld/66ITHzquGFg61JTXGfz7zFoMrQPtjr9dFXS3HX1gLx+eDrYjXZhdr9MsioQDZiOv2n9EWlsvAy/bWuOKNEpkrAfwNGKTzLJN6NGfMFTMc9iz1tzjIrSyw2ZjVEEUvpFTiNpULXTIOmh+898tY73db7zettgsjpUR6sXmAZMMz+YtR7hyNG0Ko4DBnJ0G98iO1vivfFJQJnbcJ4Cph9+BCykgnyZezq0zhmsmYEX3DYjUZiqh6s6SzEv0UIiK82643QkV2Kd0gnHV+QFJdiBQ2SVYEum4xkTOaammdpgcypDwLLY1mveUujLyxedfz6H5xfG7hX8ymlbGCMmNqmHl51bB15ZuhtdkBdokD7CKhjwi28moPmb0cMmPsFNlQhjFDrb/ImCaKseo9FU3UhC7hRcX2UvqfG55PNilUeJfdvqD3SwCr0CuL9xwOx0x9KNE/3hVRT0P30tgvpWTOIaCJ/a1IGsl07ZeL5VBhsLVPMVNk9SHK+JsA6hWfI3W/nU+zeKOknXSKvQuxXkMMKRNBbyl6PNO++FBO6k8Wkw0YF/gFcq4i8GnCvT9CnprQkL+TcNbp2qrIitcwA8WS/ktaFB7a+imIkEvwlYZ9oQVgVRSivKcptfOO7u/vkj80DmwUX/hHXXA4rW4rZeYV9/uUxPGDKETIC3sE9mlt+QgGxOa6xbf2EdlSszHO7zoqbfLRWRhgiFJCZH22seicdeKI0Wgf6rQW8Av9rGZx7ojin1ghcuEI7BndKTOMsSB31Jwx8XfqzglsAokCERMaw+TiPb5JIk89le6EDBr/ibN8vHbaVW8nyRTfBdMBRaTpo3x/tBxvSLz7L1ADjM3xvzUQVY9llzmZcdVZU7LbWkWbAGhBegsy+/Pv7PG609KL+D36kja92hignqBdxg+/m5LCff37e7mhzAKVIOJohgK+wl4rUCimU9CAfPWJf+Oat0Kft53uSQHtJEN6DelHcRq6rxxeuhKxAQ8IrGc506/BWAFoxOR/6DcSWBecxMoiHkCo3fvkIYrZugRiHIBOdtKuyVeJK7lEen5OlPUzIGW3hvOeF9fzH5wClOEIreGWYYT1vLDfNWnSi8xS0RN4wrEusf852eFMYBkGdozJOOIGj2zbpUkUtOus0AhtgwoY/w7cfY23RGo38awv34JyJdEPtuiWCioqPhh8ci9D3VOpY9+Agis9jRlGsXOCZWdh1rDTefS/0BlJ5y+0gWXLOfQeeiY1NiMYLojdy/txldMAvxwHLARnIjMkZDndXm4LCjlLThR/N0SAXQo76jy8CaN7I7K2l64fAZWqZlFOCisIQjHFfOSOghXmpN1iv3mF78lzdXyoO0dndA9m24XYXuPmFrms1R/5xiVwiAxOsJJB3+rU/16kkywo8zogaLMBM5XWRLwa56zvjCExxpGs851MQdu1E4qla3z+ghizPnIO+HZMu0c8OmflGuqNbnX4jeHIexhV8ws/NuWyEzXY4wfdXSS7UY9drgUq7bBcKBObu+OTnRnLg5d/IbRE9GISnH+rNqpDidK8PIS5UUUSZcCZMozW1J03HwzFctsDNjCbx4b0rZxV3QFBdD8j/NaWhqd+hbrhBEZ3ne1b9HaW6nTlR7eiKidwyBuXXSm6IGEncaXd5oMnzV8F2bVB57z5yNUsPuHtgRN9XgF90nE9hhxpcQIEi3WXV1JEmx0f8oYJMcrCYdp585fl2kvtfaD0lyoNxNBuL80QA0Zp2WlxGsQNSOXtU5d+IpG8wc8v21Q1gNu1HWIi52XF9MQiIgI9nqYNvTGA5p0Vzrehcc5s0LEqgISTKcLaQ29G8mt/BwY8b8osa+JkjOH3vEhFzy13t0ZBaufwSQSyh6V36ewfWpJ8VOGKAf1H1YiLV/eZkqmRKAvcXsj9i4rkFnKr0Idcn8R3COlckn3sD8vJv2qfwCNeDqNcfYzIQ9a+f6j8XJvADpNZ2CAOkLDVHFciyAtpkr0HaRR0dHVF891mm7zDL0PdnmoTdyL/UrDwmO77Zwpbr7FKQjO1td2my8qomWyYYasYU4DRLABndSdYcRS5ViCz2oTU4unmtqomp9/NaGZbRX2Cg2CiGnZ0+UzAe/oiqJkehqUMuZuX5f69c68wtxl080lr4SuGjIJK2HgdeB7Hzy6GJI4L5WUIXBbzq4Fk+AJrL9ybN8D71C8UBHF3eDGa9gZq4f/gzHESGMpyUwIDy3K0Ka17950+jo3018Il/4c8/xd8hToTBXXi7p+TO2iimV0SN7F5lcNb/q5NMUqvojD/CJyoI2KXejbeCYs9ZdMBbV49LWJnlX3UShhxxUtmXdF+rg/o8JiG+4bohB5EhhfBiyTJbjoZw6hIVnMt5hYVt4ufR3gA64+/SHcFa/ITqNGFw2dncQHB65ADlAsZfec2pE6ahTOIY6IIEE7kbOroQq0e7eaElOE+0Dh6AZPU5qlQeCpCTtBnsv/WgT7t1SxBK1On/ALav9IdO8AzeiJ7d3oNz6UQN6ql/MI3fYtAtEMLlzY3X1Htf4Ifuel1rGqIkt59cM+G34Yzxm0BHXm8+txGN2ybmkq9eGaNNFEihsoBHmSKkE6Cny+Zx4V3LNL2hmoPaccafWMnKCoBA3nMn0ayqwk0gBiUU6jrY2Jw4EpqIEdmxeMN5x2aRYzt88gU4tySycBkHam12UEBdykNkpE0EOaG9AsEjGf8QHc4XeJZ9mAn/mybXQDUIFVddMid+O4e+UlsZD09AF0+h/ASv7j3YX0OgMxAo0MN6fRHaJ4l4GoE0Z2Ibbr0c8z27pP1GrYwRBeALklMSurqmiRD8xc1IZdn9xX0CfKXeHcA4eUlzMDzLzKwiMW2pemU7Uu53wDP6agav8wH3sosTVa1zUi9/R0yyavkfy9U1/qAOOe2PWdnFFzTwEOQzVAFI49vqLbhF4xPlHUmTVAzLx2HX1fgmRn72A/oagCMABxEHwuOqS849aRRxNPVqu+7IvaIjk="} \ No newline at end of file diff --git a/sites/osn.com/__data__/empty.json b/sites/osn.com/__data__/empty.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/sites/osn.com/__data__/empty.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/sites/osn.com/osn.com.config.js b/sites/osn.com/osn.com.config.js index ac63213e2..3844bde38 100644 --- a/sites/osn.com/osn.com.config.js +++ b/sites/osn.com/osn.com.config.js @@ -7,6 +7,11 @@ const crypto = require('crypto') dayjs.extend(utc) dayjs.extend(timezone) +/** + * OSN.COM note: + * - API allows only at max 5 channels, otherwise returns 406 + */ + // https://www.osn.com/_next/static/chunks/87cf1e375968671c.js const cipherName = 'aes-256-cbc' @@ -15,36 +20,50 @@ const cipherIv = Buffer.from('b7cc0a48d6d023bc1a2a670953ec5622', 'hex') const tz = dayjs.tz.guess() const oneDayMs = 864e5 -const headers = { - 'User-Agent': - 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 OPR/104.0.0.0' -} -let batch = 0 +const headers = {} +const caches = {} +let allChannels module.exports = { site: 'osn.com', days: 2, - url({ channel, date }) { - const data = getChannelData({ channel, date }) - return `https://www.osn.com/apidata/tv-schedule-timeline?t=batch${++batch}-time${data.startTime}-${data.endTime}-boxAndroid` + async url({ date }) { + return (await getUrlData(date)).url }, request: { - headers({ channel, date }) { - return { - ...headers, - 'X-Encrypted-Data': encrypt(JSON.stringify(getChannelData({ channel, date }))) - } + cache: { + ttl: 24 * 60 * 60 * 1000 // 1 day + }, + async headers({ date }) { + return await getHeaders(date) } }, - parser({ content, channel }) { + async parser({ content, channel, date }) { const programs = [] - if (typeof content === 'string' || Buffer.isBuffer(content)) { - content = JSON.parse(content) - } - if (content?.encrypted) { - content = JSON.parse(decrypt(content.encrypted)) - } + content = getDecryptedData(content) if (Array.isArray(content?.entries)) { + // get remaining segments entries + const cacheId = date.format('YYYYMMDD') + if (caches[cacheId] === undefined) { + caches[cacheId] = [] + const segments = await getUrlData(date, false) + while (segments.length) { + const segment = segments.shift() + const result = await axios + .get(segment.url, { headers: await getHeaders(segment.data) }) + .then(res => getDecryptedData(res.data)) + .catch(err => console.error(`${segment.url}: ${err.message}!`)) + if (Array.isArray(result?.entries)) { + caches[cacheId].push(...result.entries) + } + } + // add 5s delay to avoid 406 + await new Promise(resolve => setTimeout(resolve, 5000)) + } + // add entries from cache + if (Array.isArray(caches[cacheId])) { + content.entries.push(...caches[cacheId]) + } content.entries .filter(entry => entry.guid == channel.site_id) .forEach(entry => { @@ -83,42 +102,117 @@ module.exports = { }, async channels({ lang = 'ar' }) { const channels = [] - const result = await axios - .get('https://www.osn.com/apidata/channels?platform=Android', { headers }) - .then(response => response.data) - .catch(console.error) - - if (result?.encrypted) { - const items = JSON.parse(decrypt(result.encrypted)) + const items = await fetchChannels() + if (Array.isArray(items)) { channels.push(...items.map(item => ({ lang, site_id: item.guid, name: item.title }))) } + return channels } } +async function fetchChannels() { + if (allChannels === undefined) { + const result = await axios + .get('https://www.osn.com/apidata/channels?platform=Android', { headers: await getHeaders() }) + .then(res => getDecryptedData(res.data)) + .catch(console.error) + + if (Array.isArray(result)) { + allChannels = result + } + } + + return allChannels +} + +async function getHeaders(data) { + if (dayjs.isDayjs(data)) { + data = (await getUrlData(data)).data + } + const res = { ...headers } + if (data) { + res['X-Encrypted-Data'] = getEncryptedData(data) + } + + return res +} + +async function getUrlData(date, first = true) { + const parts = [] + const startOfDay = date.tz(tz).startOf('d') + const endOfDay = startOfDay.add(oneDayMs, 'ms') + const startStop = { + startTime: startOfDay.valueOf(), + endTime: endOfDay.valueOf() + } + await fetchChannels() + const segments = await getUrlSegments() + let i = 0 + for (const v of segments) { + const data = { + url: `https://www.osn.com/apidata/tv-schedule-timeline?t=batch${++i}-time${ + startStop.startTime + }-${ + startStop.endTime + }-boxAndroid`, + data: { + channelGuid: v.join('|'), + ...startStop + } + } + if (first) { + return data + } else if (i === 1) { + continue + } + parts.push(data) + } + + return parts +} + +async function getUrlSegments() { + await fetchChannels() + const segments = [] + const _channels = [...allChannels.map(item => item.guid)] + while (_channels.length) { + segments.push(_channels.splice(0, 5)) + } + return segments +} + +function getEncryptedData(data) { + return encrypt(JSON.stringify(data)) +} + +function getDecryptedData(data) { + if (typeof data === 'string' || Buffer.isBuffer(data)) { + data = JSON.parse(data) + } + if (data?.encrypted) { + data = JSON.parse(decrypt(data.encrypted)) + } + + return data +} + function encrypt(data, encoding = 'utf8') { const cipher = crypto.createCipheriv(cipherName, cipherKey, cipherIv) const encrypted = cipher.update(data, encoding, 'base64') + return (encrypted + cipher.final('base64')) } function decrypt(data, encoding = 'utf8') { const decipher = crypto.createDecipheriv(cipherName, cipherKey, cipherIv) const decrypted = decipher.update(data, 'base64', encoding) - return (decrypted + decipher.final(encoding)) -} -function getChannelData({ channel, date }) { - const startOfDay = date.tz(tz).startOf('d') - return { - channelGuid: channel.site_id, - startTime: startOfDay.valueOf(), - endTime: startOfDay.valueOf() + oneDayMs - } + return (decrypted + decipher.final(encoding)) } function dotProp(o, prop) { diff --git a/sites/osn.com/osn.com.test.js b/sites/osn.com/osn.com.test.js index 6fa9b0006..80490f87b 100644 --- a/sites/osn.com/osn.com.test.js +++ b/sites/osn.com/osn.com.test.js @@ -1,4 +1,5 @@ const { parser, url, request } = require('./osn.com.config') +const axios = require('axios') const fs = require('fs') const path = require('path') const dayjs = require('dayjs') @@ -8,28 +9,57 @@ const customParseFormat = require('dayjs/plugin/customParseFormat') dayjs.extend(customParseFormat) dayjs.extend(utc) +jest.mock('axios') + const date = dayjs.utc('2026-05-16').startOf('d') const channelAR = { site_id: '4506', xmltv_id: 'OSNKids.ae@SD', lang: 'ar' } const channelEN = { site_id: '4506', xmltv_id: 'OSNKids.ae@SD', lang: 'en' } const content = fs.readFileSync(path.join(__dirname, '/__data__/content.json')) -it('can generate valid request headers', () => { - const result = request.headers({ channel: channelAR, date }) +axios.get.mockImplementation(url => { + const urls = { + 'https://www.osn.com/apidata/channels?platform=Android': 'channel.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch1-time1778846400000-1778932800000-boxAndroid': 'content.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch2-time1778846400000-1778932800000-boxAndroid': 'empty.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch3-time1778846400000-1778932800000-boxAndroid': 'empty.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch4-time1778846400000-1778932800000-boxAndroid': 'empty.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch5-time1778846400000-1778932800000-boxAndroid': 'empty.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch6-time1778846400000-1778932800000-boxAndroid': 'empty.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch7-time1778846400000-1778932800000-boxAndroid': 'empty.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch8-time1778846400000-1778932800000-boxAndroid': 'empty.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch9-time1778846400000-1778932800000-boxAndroid': 'empty.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch10-time1778846400000-1778932800000-boxAndroid': 'empty.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch11-time1778846400000-1778932800000-boxAndroid': 'empty.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch12-time1778846400000-1778932800000-boxAndroid': 'empty.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch13-time1778846400000-1778932800000-boxAndroid': 'empty.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch14-time1778846400000-1778932800000-boxAndroid': 'empty.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch15-time1778846400000-1778932800000-boxAndroid': 'empty.json', + 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch16-time1778846400000-1778932800000-boxAndroid': 'empty.json' + } + let data = '' + if (urls[url] !== undefined) { + data = fs.readFileSync(path.join(__dirname, '__data__', urls[url])).toString() + } + return Promise.resolve({ data }) +}) + +it('can generate valid request headers', async () => { + const result = await request.headers({ date }) expect(result).toMatchObject({ 'X-Encrypted-Data': - 'e0srp4UFarSGxZt4iWaXSZTCg6vB46NRZmY5V9wEzxHeB1bwR1HXrAuTI8FCVH7i3+uVqkDQSgRxjRFPYdrXhqedzEogwcjDnjRPmLtFxEA=' + 'e0srp4UFarSGxZt4iWaXSSZCApUQYlb/CPhOH0/r/rUzyU/aVEst9+dVQueAwTe3A/or1iCzDEaiVfQ/VTxF9ZdIzOZeb3SSRap3YK7IFkj7Km6L8aXxpsNeQua/L/Ar' }) }) -it('can generate valid url', () => { - const result = url({ channel: channelAR, date }) +it('can generate valid url', async () => { + const result = await url({ date }) expect(result).toBe( 'https://www.osn.com/apidata/tv-schedule-timeline?t=batch1-time1778846400000-1778932800000-boxAndroid' ) }) -it('can parse response (ar)', () => { - const result = parser({ date, channel: channelAR, content }) +it('can parse response (ar)', async () => { + const result = (await parser({ date, channel: channelAR, content })) .map(a => { a.start = a.start.toJSON() a.stop = a.stop.toJSON() @@ -51,8 +81,8 @@ it('can parse response (ar)', () => { }) }) -it('can parse response (en)', () => { - const result = parser({ date, channel: channelEN, content }) +it('can parse response (en)', async () => { + const result = (await parser({ date, channel: channelEN, content })) .map(a => { a.start = a.start.toJSON() a.stop = a.stop.toJSON() @@ -74,7 +104,7 @@ it('can parse response (en)', () => { }) }) -it('can handle empty guide', () => { - const result = parser({ date, channel: channelAR, content: '[]' }) +it('can handle empty guide', async () => { + const result = await parser({ date, channel: channelAR, content: '[]' }) expect(result).toMatchObject([]) }) diff --git a/sites/osn.com/osn.com_ar.channels.xml b/sites/osn.com/osn.com_ar.channels.xml index 7ad3f4b46..80a88dcb1 100644 --- a/sites/osn.com/osn.com_ar.channels.xml +++ b/sites/osn.com/osn.com_ar.channels.xml @@ -7,11 +7,12 @@ OSNtv Movies Horror OSNtv Crime OSNtv Documentary + MBC Mood KTV Channel 1 HD OSNtv Now OSNtv Movies Family OSNtv Movies Comedy - OSNtv Pop Up Beyond Earth + OSNtv Pop Up 90 Day Fiance eClutch Access Esport 24 eClutch LIVE @@ -78,5 +79,4 @@ Al Thaqafeya Sky News Arabia HD TLC HD - Wanasah diff --git a/sites/osn.com/osn.com_en.channels.xml b/sites/osn.com/osn.com_en.channels.xml index 7d96eb594..28b16e495 100644 --- a/sites/osn.com/osn.com_en.channels.xml +++ b/sites/osn.com/osn.com_en.channels.xml @@ -7,11 +7,12 @@ OSNtv Movies Horror OSNtv Crime OSNtv Documentary + MBC Mood KTV Channel 1 HD OSNtv Now OSNtv Movies Family OSNtv Movies Comedy - OSNtv Pop Up Beyond Earth + OSNtv Pop Up 90 Day Fiance eClutch Access Esport 24 eClutch LIVE @@ -78,5 +79,4 @@ Al Thaqafeya Sky News Arabia HD TLC HD - Wanasah diff --git a/sites/osn.com/readme.md b/sites/osn.com/readme.md index f035b002e..00f87cf42 100644 --- a/sites/osn.com/readme.md +++ b/sites/osn.com/readme.md @@ -1,6 +1,6 @@ # osn.com -https://www.osn.com/en-sa/osntv _[Geo-blocked]_ +https://www.osn.com/en-sa/watch/tv-schedule _[Geo-blocked]_ ### Download the guide