Добавить plugins/tmdb-proxy.js
This commit is contained in:
177
plugins/tmdb-proxy.js
Normal file
177
plugins/tmdb-proxy.js
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
/**
|
||||||
|
* Оптимизированный скрипт прокси для tmdb на основе скрипта https://skaztv.online/t.js
|
||||||
|
*/
|
||||||
|
(function () {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
const DOMAIN = 'cubnotrip.top';
|
||||||
|
const API_ENDPOINTS = [
|
||||||
|
{ url: `https://${DOMAIN}/api/checker`, name: DOMAIN }
|
||||||
|
];
|
||||||
|
|
||||||
|
const tmdbProxy = {
|
||||||
|
name: 'TMDB Proxy by Skaz (Mod. LeMaX)',
|
||||||
|
version: '1.0.5',
|
||||||
|
description: 'Проксирование постеров и API сайта TMDB (Optimized )',
|
||||||
|
pathImage: `imagetmdb.${DOMAIN}/`,
|
||||||
|
pathApi: `apitmdb.${DOMAIN}/3/`
|
||||||
|
};
|
||||||
|
|
||||||
|
// Кэширование результатов проверки API
|
||||||
|
let apiCheckComplete = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверка доступности API
|
||||||
|
*/
|
||||||
|
function checkApiAvailability() {
|
||||||
|
if (apiCheckComplete) return;
|
||||||
|
|
||||||
|
let currentIndex = 0;
|
||||||
|
|
||||||
|
function tryNextEndpoint() {
|
||||||
|
if (currentIndex >= API_ENDPOINTS.length) return;
|
||||||
|
|
||||||
|
const endpoint = API_ENDPOINTS[currentIndex];
|
||||||
|
const xhr = new XMLHttpRequest();
|
||||||
|
|
||||||
|
xhr.open('GET', endpoint.url, true);
|
||||||
|
xhr.timeout = 5000;
|
||||||
|
|
||||||
|
xhr.onload = function() {
|
||||||
|
if (xhr.status === 200) {
|
||||||
|
try {
|
||||||
|
const response = xhr.responseText;
|
||||||
|
if (response === 'ok') {
|
||||||
|
localStorage.setItem('cub_domain', endpoint.name);
|
||||||
|
apiCheckComplete = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.warn('API check error:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
currentIndex++;
|
||||||
|
tryNextEndpoint();
|
||||||
|
};
|
||||||
|
|
||||||
|
xhr.onerror = xhr.ontimeout = function() {
|
||||||
|
currentIndex++;
|
||||||
|
tryNextEndpoint();
|
||||||
|
};
|
||||||
|
|
||||||
|
xhr.send();
|
||||||
|
}
|
||||||
|
|
||||||
|
tryNextEndpoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Фильтрация URL (замена обратных слешей)
|
||||||
|
*/
|
||||||
|
function filterUrl(url) {
|
||||||
|
const prefix = url.slice(0, 8);
|
||||||
|
const suffix = url.slice(8).replace(/\/\+/g, '/');
|
||||||
|
return prefix + suffix;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Получение email пользователя
|
||||||
|
*/
|
||||||
|
function getUserEmail() {
|
||||||
|
try {
|
||||||
|
const account = Lampa.Storage.get('account', '{}');
|
||||||
|
return (typeof account === 'string' ? JSON.parse(account) : account).email || '';
|
||||||
|
} catch (e) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Добавление email параметра к URL
|
||||||
|
*/
|
||||||
|
function addEmailParam(url) {
|
||||||
|
const email = getUserEmail();
|
||||||
|
return email ? Lampa.Utils.addUrlComponent(url, `email=${encodeURIComponent(email)}`) : url;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Инициализация проверки API
|
||||||
|
*/
|
||||||
|
if (Lampa.Storage.get('cub_domain_skaz') === 1) {
|
||||||
|
checkApiAvailability();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Отключение кэширования изображений
|
||||||
|
Lampa.Storage.set('cache_images', false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Переопределение метода получения изображений TMDB
|
||||||
|
*/
|
||||||
|
Lampa.TMDB.image = function (url) {
|
||||||
|
const protocol = Lampa.Utils.protocol();
|
||||||
|
const isProxyEnabled = Lampa.Storage.field('proxy_tmdb');
|
||||||
|
|
||||||
|
const baseUrl = isProxyEnabled
|
||||||
|
? `${protocol}${tmdbProxy.pathImage}${url}`
|
||||||
|
: `${protocol}image.tmdb.org/${url}`;
|
||||||
|
|
||||||
|
return addEmailParam(filterUrl(baseUrl));
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Переопределение метода API TMDB
|
||||||
|
*/
|
||||||
|
Lampa.TMDB.api = function (url) {
|
||||||
|
const protocol = Lampa.Utils.protocol();
|
||||||
|
const isProxyEnabled = Lampa.Storage.field('proxy_tmdb');
|
||||||
|
|
||||||
|
const baseUrl = isProxyEnabled
|
||||||
|
? `${protocol}${tmdbProxy.pathApi}${url}`
|
||||||
|
: `${protocol}api.themoviedb.org/3/${url}`;
|
||||||
|
|
||||||
|
return addEmailParam(filterUrl(baseUrl));
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Удаление стандартного прокси из настроек
|
||||||
|
*/
|
||||||
|
Lampa.Settings.listener.follow('open', function (event) {
|
||||||
|
if (event.name === 'tmdb') {
|
||||||
|
event.body.find('[data-parent="proxy"]').remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
'TMDB-Proxy',
|
||||||
|
`v${tmdbProxy.version} started, enabled:`,
|
||||||
|
Lampa.Storage.field('proxy_tmdb')
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Добавление компонента настроек
|
||||||
|
*/
|
||||||
|
Lampa.SettingsApi.addComponent({
|
||||||
|
component: 'iptvskaz',
|
||||||
|
icon: '<svg viewBox="0 0 24 24" fill="currentColor"><path d="M12 2L2 7v10c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V7l-10-5z"/></svg>',
|
||||||
|
name: 'by Skaz (Optimized)'
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Добавление параметра настроек
|
||||||
|
*/
|
||||||
|
Lampa.SettingsApi.addParam({
|
||||||
|
component: 'iptvskaz',
|
||||||
|
param: {
|
||||||
|
name: 'b_skaz',
|
||||||
|
type: 'trigger',
|
||||||
|
default: false
|
||||||
|
},
|
||||||
|
field: {
|
||||||
|
name: 'Убрать с главной трансляции',
|
||||||
|
description: 'Убирает с главной трансляцию события'
|
||||||
|
},
|
||||||
|
onChange: function (value) {
|
||||||
|
Lampa.Noty.show('Необходимо перезайти в лампу');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})();
|
||||||
Reference in New Issue
Block a user