Added proxy, added metadata parser, fixed many posters

This commit is contained in:
zeldaroot 2021-02-01 04:12:40 +02:00
parent 4bbdb60f20
commit 960b7606df
49 changed files with 404 additions and 163 deletions

View file

@ -137,9 +137,10 @@ module.exports = {
},
"movies": {
"cron": [
"# 0 ~ https://api.themoviedb.org/3/movie/popular?api_key=TOKEN&page=[page] ~ results.0.id ~ https://api.themoviedb.org/3/movie/[id]?api_key=TOKEN&append_to_response=credits,external_ids ~ id <> custom.tmdb_id ~ external_ids.imdb_id <> custom.imdb_id ~ \"movie\" <> type ~ backdrop_path <> pictures ~ poster_path <> poster ~ release_date <> premiere ~ title <> title_en ~ overview <> description ~ vote_average <> rating ~ vote_count <> vote ~ genres.0.name <> genre ~ credits.cast.0.name <> actor <> 5 ~ credits.crew.0.name <> director <> <> job = Director ~ production_countries.0.name <> country",
"# 0 ~ https://api.themoviedb.org/3/tv/popular?api_key=TOKEN&page=[page] ~ results.0.id ~ https://api.themoviedb.org/3/tv/[id]?api_key=TOKEN&append_to_response=credits,external_ids ~ id <> custom.tmdb_id ~ external_ids.imdb_id <> custom.imdb_id ~ \"tv\" <> type ~ backdrop_path <> pictures ~ poster_path <> poster ~ first_air_date <> premiere ~ name <> title_en ~ overview <> description ~ vote_average <> rating ~ vote_count <> vote ~ genres.0.name <> genre ~ credits.cast.0.name <> actor <> 5 ~ credits.crew.0.name <> director <> <> job = Director ~ production_countries.0.name <> country"
]
"# 0 ~ https://api.themoviedb.org/3/movie/popular?api_key=TOKEN&page=[page] ~ results.0.id ~ https://api.themoviedb.org/3/movie/[id]?api_key=TOKEN&append_to_response=credits,external_ids ~ id <> custom.tmdb_id ~ external_ids.imdb_id <> custom.imdb_id ~ \"movie\" <> type ~ backdrop_path <> pictures ~ poster_path <> poster ~ release_date <> premiere ~ title <> title_en ~ overview <> description ~ vote_average <> rating ~ vote_count <> vote ~ genres.0.name <> genre ~ credits.cast.0.name <> actor <> 5 ~ credits.crew.0.name <> director <> <> job == Director ~ production_countries.0.name <> country",
"# 0 ~ https://api.themoviedb.org/3/tv/popular?api_key=TOKEN&page=[page] ~ results.0.id ~ https://api.themoviedb.org/3/tv/[id]?api_key=TOKEN&append_to_response=credits,external_ids ~ id <> custom.tmdb_id ~ external_ids.imdb_id <> custom.imdb_id ~ \"tv\" <> type ~ backdrop_path <> pictures ~ poster_path <> poster ~ first_air_date <> premiere ~ name <> title_en ~ overview <> description ~ vote_average <> rating ~ vote_count <> vote ~ genres.0.name <> genre ~ credits.cast.0.name <> actor <> 5 ~ credits.crew.0.name <> director <> <> job == Director ~ production_countries.0.name <> country"
],
"proxy": []
},
"codes": {
"head": "",

View file

@ -137,9 +137,10 @@ module.exports = {
},
"movies": {
"cron": [
"# 0 ~ https://api.themoviedb.org/3/movie/popular?api_key=TOKEN&page=[page] ~ results.0.id ~ https://api.themoviedb.org/3/movie/[id]?api_key=TOKEN&append_to_response=credits,external_ids ~ id <> custom.tmdb_id ~ external_ids.imdb_id <> custom.imdb_id ~ \"movie\" <> type ~ backdrop_path <> pictures ~ poster_path <> poster ~ release_date <> premiere ~ title <> title_en ~ overview <> description ~ vote_average <> rating ~ vote_count <> vote ~ genres.0.name <> genre ~ credits.cast.0.name <> actor <> 5 ~ credits.crew.0.name <> director <> <> job = Director ~ production_countries.0.name <> country",
"# 0 ~ https://api.themoviedb.org/3/tv/popular?api_key=TOKEN&page=[page] ~ results.0.id ~ https://api.themoviedb.org/3/tv/[id]?api_key=TOKEN&append_to_response=credits,external_ids ~ id <> custom.tmdb_id ~ external_ids.imdb_id <> custom.imdb_id ~ \"tv\" <> type ~ backdrop_path <> pictures ~ poster_path <> poster ~ first_air_date <> premiere ~ name <> title_en ~ overview <> description ~ vote_average <> rating ~ vote_count <> vote ~ genres.0.name <> genre ~ credits.cast.0.name <> actor <> 5 ~ credits.crew.0.name <> director <> <> job = Director ~ production_countries.0.name <> country"
]
"# 0 ~ https://api.themoviedb.org/3/movie/popular?api_key=TOKEN&page=[page] ~ results.0.id ~ https://api.themoviedb.org/3/movie/[id]?api_key=TOKEN&append_to_response=credits,external_ids ~ id <> custom.tmdb_id ~ external_ids.imdb_id <> custom.imdb_id ~ \"movie\" <> type ~ backdrop_path <> pictures ~ poster_path <> poster ~ release_date <> premiere ~ title <> title_en ~ overview <> description ~ vote_average <> rating ~ vote_count <> vote ~ genres.0.name <> genre ~ credits.cast.0.name <> actor <> 5 ~ credits.crew.0.name <> director <> <> job == Director ~ production_countries.0.name <> country",
"# 0 ~ https://api.themoviedb.org/3/tv/popular?api_key=TOKEN&page=[page] ~ results.0.id ~ https://api.themoviedb.org/3/tv/[id]?api_key=TOKEN&append_to_response=credits,external_ids ~ id <> custom.tmdb_id ~ external_ids.imdb_id <> custom.imdb_id ~ \"tv\" <> type ~ backdrop_path <> pictures ~ poster_path <> poster ~ first_air_date <> premiere ~ name <> title_en ~ overview <> description ~ vote_average <> rating ~ vote_count <> vote ~ genres.0.name <> genre ~ credits.cast.0.name <> actor <> 5 ~ credits.crew.0.name <> director <> <> job == Director ~ production_countries.0.name <> country"
],
"proxy": []
},
"codes": {
"head": "",

View file

@ -30,6 +30,8 @@ var async = require('async');
var adop = require('adop');
var axios = require('axios');
var convert = require('xml-js');
var htmlmetaparser = require('htmlmetaparser');
var htmlparser2 = require('htmlparser2');
var LRU = require('lru-cache');
var cache = new LRU({ max: 1000 });
@ -210,7 +212,55 @@ if (Math.ceil(os.freemem()) < 50) {
} else {
console.log('[REALTIME]', ids.length, url_req);
}
axios(url_req)
var opt = {
headers: {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0'
}
};
var hostname = require('url').parse(url_req).hostname;
if (config.movies.proxy && config.movies.proxy.length) {
var proxies = config.movies.proxy.filter(function(p) {
var only_proxy = p.split('<>')[0].trim();
var only_domain = (p.split('<>')[1] || '').trim();
if (only_domain) {
if (only_proxy && only_domain === hostname) {
return true;
}
} else if (only_proxy) {
return true;
}
return false;
});
var proxy =
proxies && proxies.length
? proxies[Math.floor(Math.random() * proxies.length)]
: '';
if (proxy) {
opt['headers'] = {
'User-Agent':
'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'
};
var proxy_obj = {};
proxy_obj['protocol'] =
proxy.indexOf('http://') + 1 ? 'http' : 'https';
proxy = proxy.replace(/https?:\/\//i, '');
var host_auth = proxy.split('@');
if (proxy.indexOf('@') + 1) {
proxy_obj['host'] = host_auth[1].split(':')[0];
proxy_obj['port'] = host_auth[1].split(':')[1];
proxy_obj['auth'] = {
username: host_auth[0].split(':')[0],
password: host_auth[0].split(':')[1]
};
} else {
proxy_obj['host'] = host_auth[0].split(':')[0];
proxy_obj['port'] = host_auth[0].split(':')[1];
}
opt.proxy = proxy_obj;
}
}
axios(url_req, opt)
.then(function(r) {
if (!r || !r.data) {
if (retry_req) {
@ -228,49 +278,70 @@ if (Math.ceil(os.freemem()) < 50) {
setTimeout(function() {
return next();
}, 5000);
} else {
var all = adop(tryParseJSON(r.data), [
{
name: 'id',
path: task.path.split('<>')[0],
type: task.path.split('<>')[1] || undefined,
regex: task.path.split('<>')[2] || undefined
}
]);
if (all && all.length) {
all.forEach(function(a) {
if (
a &&
a.id &&
a.id !== 'null' &&
a.id !== 'false' &&
a.id !== 'undefined' &&
a.id !== 'n/a' &&
a.id !== 'N/A' &&
ids.indexOf(a.id) === -1
) {
ids.push(a.id);
} else if (r.data) {
if (
typeof r.data === 'string' &&
r.data.indexOf('<html') + 1
) {
if (task.path) {
var ids_list = r.data.match(task.path.split('<>')[0]);
if (ids_list && ids_list.length) {
ids_list.forEach(function(id) {
id = id.trim();
if (id && ids.indexOf(id) === -1) {
ids.push(id);
}
});
}
});
}
i++;
return next();
} else {
if (retry_req) {
var all = adop(tryParseJSON(r.data), [
{
name: 'id',
path: task.path.split('<>')[0],
type: task.path.split('<>')[1] || undefined,
regex: task.path.split('<>')[2] || undefined
}
]);
if (all && all.length) {
all.forEach(function(a) {
if (
a &&
a.id &&
a.id !== 'null' &&
a.id !== 'false' &&
a.id !== 'undefined' &&
a.id !== 'n/a' &&
a.id !== 'N/A' &&
ids.indexOf(a.id) === -1
) {
ids.push(a.id);
}
});
i++;
retry_req = '';
} else {
retry_req = url_req;
}
console.error(
'[REALTIME]',
'STOP PAGE (' + (6 - fail_req) + ' fails)',
url_req
);
fail_req = fail_req - 1;
setTimeout(function() {
return next();
}, 5000);
} else {
if (retry_req) {
i++;
retry_req = '';
} else {
retry_req = url_req;
}
console.error(
'[REALTIME]',
'STOP PAGE (' + (6 - fail_req) + ' fails)',
url_req
);
fail_req = fail_req - 1;
setTimeout(function() {
return next();
}, 5000);
}
}
} else {
return next();
}
})
.catch(function(err) {
@ -316,11 +387,80 @@ if (Math.ceil(os.freemem()) < 50) {
var task_type_id = task.type_id || '';
var task_url = (task.id + '').replace(/\[[a-z0-9_]+?]/i, id + '');
if (task_url) {
axios(task_url)
var opt = {
headers: {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0'
}
};
var hostname = require('url').parse(task_url).hostname;
if (config.movies.proxy && config.movies.proxy.length) {
var proxies = config.movies.proxy.filter(function(p) {
var only_proxy = p.split('<>')[0].trim();
var only_domain = (p.split('<>')[1] || '').trim();
if (only_domain) {
if (only_proxy && only_domain === hostname) {
return true;
}
} else if (only_proxy) {
return true;
}
return false;
});
var proxy =
proxies && proxies.length
? proxies[Math.floor(Math.random() * proxies.length)]
: '';
if (proxy) {
opt['headers'] = {
'User-Agent':
'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'
};
var proxy_obj = {};
proxy_obj['protocol'] =
proxy.indexOf('http://') + 1 ? 'http' : 'https';
proxy = proxy.replace(/https?:\/\//i, '');
var host_auth = proxy.split('@');
if (proxy.indexOf('@') + 1) {
proxy_obj['host'] = host_auth[1].split(':')[0];
proxy_obj['port'] = host_auth[1].split(':')[1];
proxy_obj['auth'] = {
username: host_auth[0].split(':')[0],
password: host_auth[0].split(':')[1]
};
} else {
proxy_obj['host'] = host_auth[0].split(':')[0];
proxy_obj['port'] = host_auth[0].split(':')[1];
}
opt.proxy = proxy_obj;
}
}
axios(task_url, opt)
.then(function(j) {
if (!j || !j.data) {
return callback();
}
if (
typeof j.data === 'string' &&
j.data.indexOf('<html') + 1
) {
var handler = new htmlmetaparser.Handler(
function(err, json) {
if (!json || typeof json !== 'object') {
return callback();
}
movie_data(json, function() {
return callback();
});
},
{ url: task_url }
);
var parser = new htmlparser2.Parser(handler, {
decodeEntities: true
});
parser.write(j.data);
parser.done();
}
var json = tryParseJSON(j.data);
if (!json || typeof json !== 'object') {
return callback();
@ -362,11 +502,17 @@ if (Math.ceil(os.freemem()) < 50) {
.replace(/(^\s*)|(\s*)$/g, '')
.replace(/\s*<>\s*/g, '<>')
.split('<>');
var sup_double = !!(parse[3] && parse[3].indexOf('==') + 1);
var sup_parse = parse[3]
? parse[3]
.replace(/(^\s*)|(\s*)$/g, '')
.replace(/\s*=\s*/g, '=')
.split('=')
? parse[3].indexOf('==') + 1
? parse[3]
.replace(/(^\s*)|(\s*)$/g, '')
.replace(/\s*==\s*/g, '=')
.split('==')
: parse[3]
.replace(/(^\s*)|(\s*)$/g, '')
.replace(/\s*=\s*/g, '=')
.split('=')
: [];
var eval_parse = parse[4] || '';
var set_data = '';
@ -408,15 +554,30 @@ if (Math.ceil(os.freemem()) < 50) {
.map(function(item) {
var set_info = false;
if (sup_parse[0] && sup_parse[1]) {
if (
op.get(item, sup_parse[0]) &&
op
.get(item, sup_parse[0])
.toString()
.toLowerCase() ===
sup_parse[1].toString().toLowerCase()
) {
set_info = true;
if (sup_double) {
if (
op.get(item, sup_parse[0]) &&
op
.get(item, sup_parse[0])
.toString()
.toLowerCase() ===
sup_parse[1].toString().toLowerCase()
) {
set_info = true;
}
} else {
if (
op.get(item, sup_parse[0]) &&
op
.get(item, sup_parse[0])
.toString()
.toLowerCase()
.indexOf(
sup_parse[1].toString().toLowerCase()
) + 1
) {
set_info = true;
}
}
} else {
set_info = true;

View file

@ -58,7 +58,9 @@
"diskusage": "1.1.3",
"axios": "0.21.1",
"mnemonist": "0.38.1",
"xml-js": "1.6.11"
"xml-js": "1.6.11",
"htmlparser2": "6.0.0",
"htmlmetaparser": "2.1.1"
},
"devDependencies": {
"prettier": "2.2.1"

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "متاح لملء معلمات المعلومات",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "قائمة الأفلام"
"Список фильмов": "قائمة الأفلام",
"Прокси-сервера": "خوادم الوكيل"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Налични за попълване на информационни параметри",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Списък на филмите"
"Список фильмов": "Списък на филмите",
"Прокси-сервера": "Прокси сървъри"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "তথ্য পরামিতি পূরণ করতে উপলব্ধ",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "চলচ্চিত্রের তালিকা"
"Список фильмов": "চলচ্চিত্রের তালিকা",
"Прокси-сервера": "প্রক্সি সার্ভার"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "K dispozici k vyplnění informačních parametrů",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Seznam movieů"
"Список фильмов": "Seznam movieů",
"Прокси-сервера": "Proxy servery"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Tilgængelig til at udfylde informationsparametre",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Liste over movie"
"Список фильмов": "Liste over movie",
"Прокси-сервера": "Proxy servere"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Zur füllung von informationsparametern verfügbar",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Liste der moviee"
"Список фильмов": "Liste der moviee",
"Прокси-сервера": "Proxy-Server"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Διατίθεται για την πλήρωση παραμέτρων πληροφοριών",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Κατάλογος ταινιών"
"Список фильмов": "Κατάλογος ταινιών",
"Прокси-сервера": "Διακομιστές μεσολάβησης"
}

View file

@ -1009,5 +1009,6 @@
"Доступные для заполнения информации параметры": "Parameters available for filling in the information",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "List of movies"
"Список фильмов": "List of movies",
"Прокси-сервера": "Proxy servers"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Disponible para llenar los parámetros de información",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Lista de películas"
"Список фильмов": "Lista de películas",
"Прокси-сервера": "Servidores proxy"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Saadaval teabe parameetrite täitmiseks",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Nimekiri movieide"
"Список фильмов": "Nimekiri movieide",
"Прокси-сервера": "Puhverserverid"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Saatavana tietojen parametrien täyttämiseksi",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Luettelo elokuvista"
"Список фильмов": "Luettelo elokuvista",
"Прокси-сервера": "Proxy-palvelimet"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Disponible pour remplir les paramètres d'information",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Liste des movies"
"Список фильмов": "Liste des movies",
"Прокси-сервера": "Serveurs proxy"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "सूचना पैरामीटर भरने के लिए उपलब्ध है",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "फिल्मों की सूची"
"Список фильмов": "फिल्मों की सूची",
"Прокси-сервера": "प्रॉक्सी सर्वर"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Dostupno za popunjavanje informacija o informacijama",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Popis movieova"
"Список фильмов": "Popis movieova",
"Прокси-сервера": "Proxy poslužitelji"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Az információs paraméterek betöltéséhez",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Movieek listája"
"Список фильмов": "Movieek listája",
"Прокси-сервера": "Proxy szerverek"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Tersedia untuk mengisi parameter informasi",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Daftar movie"
"Список фильмов": "Daftar movie",
"Прокси-сервера": "Server proxy"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Disponibile per riempire i parametri delle informazioni",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Elenco dei movie"
"Список фильмов": "Elenco dei movie",
"Прокси-сервера": "Server proxy"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "情報パラメータを埋めるために利用可能です",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "映画のリスト"
"Список фильмов": "映画のリスト",
"Прокси-сервера": "プロキシサーバー"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "정보 매개 변수를 채울 수 있습니다",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "필름 목록"
"Список фильмов": "필름 목록",
"Прокси-сервера": "프록시 서버"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Galima užpildyti informacijos parametrus",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Movieų sąrašas"
"Список фильмов": "Movieų sąrašas",
"Прокси-сервера": "Proxy serveriai"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Pieejams, lai aizpildītu informācijas parametrus",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Movieu saraksts"
"Список фильмов": "Movieu saraksts",
"Прокси-сервера": "Proxy serveri"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Beschikbaar om informatieparameters te vullen",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Lijst met movies"
"Список фильмов": "Lijst met movies",
"Прокси-сервера": "Proxy-servers"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Dostępne do wypełnienia parametrów informacji",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Lista movieów"
"Список фильмов": "Lista movieów",
"Прокси-сервера": "Serwery proxy"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Disponível para preencher parâmetros de informação",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Lista de moviees"
"Список фильмов": "Lista de moviees",
"Прокси-сервера": "Servidores proxy"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Disponibil pentru a completa parametrii de informații",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Lista de moviee"
"Список фильмов": "Lista de moviee",
"Прокси-сервера": "Servere proxy"
}

View file

@ -1009,5 +1009,6 @@
"Доступные для заполнения информации параметры": "Доступные для заполнения информации параметры",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Список фильмов"
"Список фильмов": "Список фильмов",
"Прокси-сервера": "Прокси-сервера"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "K dispozícii na vyplnenie parametrov informácií",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Zoznam movieov"
"Список фильмов": "Zoznam movieov",
"Прокси-сервера": "Proxy servery"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Na voljo za polnjenje parametrov informacij",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Seznam movieov"
"Список фильмов": "Seznam movieov",
"Прокси-сервера": "Proxy strežniki"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Në dispozicion për të mbushur parametrat e informacionit",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Lista e movieave"
"Список фильмов": "Lista e movieave",
"Прокси-сервера": "Servera proxy"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "На располагању за попуњавање параметара информација",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Листа филмова"
"Список фильмов": "Листа филмова",
"Прокси-сервера": "Проки сервери"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Tillgänglig för att fylla informationsparametrar",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Lista över movieer"
"Список фильмов": "Lista över movieer",
"Прокси-сервера": "Proxyservrar"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Inapatikana ili kujaza vigezo vya habari",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Orodha ya filamu"
"Список фильмов": "Orodha ya filamu",
"Прокси-сервера": "Servers wakala"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "พร้อมที่จะกรอกข้อมูลพารามิเตอร์",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "รายชื่อภาพยนตร์"
"Список фильмов": "รายชื่อภาพยนตร์",
"Прокси-сервера": "พร็อกซีเซิร์ฟเวอร์"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Bilgi parametrelerini doldurmak için kullanılabilir",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Movielerin listesi"
"Список фильмов": "Movielerin listesi",
"Прокси-сервера": "Proxy sunucuları"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Доступні для заповнення інформації параметри",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Список фільмів"
"Список фильмов": "Список фільмів",
"Прокси-сервера": "Проксі-сервера"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "Có sẵn để điền thông số thông tin",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "Danh sách các bộ phim"
"Список фильмов": "Danh sách các bộ phim",
"Прокси-сервера": "Máy chủ proxy"
}

View file

@ -1010,5 +1010,6 @@
"Доступные для заполнения информации параметры": "可用于填充信息参数",
"ID TVmaze": "ID TVmaze",
"ID World-Art": "ID World-Art",
"Список фильмов": "电影名单"
"Список фильмов": "电影名单",
"Прокси-сервера": "代理服务器"
}

View file

@ -282,11 +282,8 @@
<ul data-add-name="config.index.ids.keys">
<% if (config.index.ids.keys) { %>
<% config.index.ids.keys.split(',').forEach(function (id) { %>
<li data-delete-id="<%- id %>"
data-delete-name="config.index.ids.keys" style="display: none">
<img class="media-object"
src="/<%- config.urls.admin %>/poster?id=<%- id %>"
alt="ID: <%- id %>" title="ID: <%- id %>">
<li data-delete-id="<%- id %>" data-delete-name="config.index.ids.keys" style="display: none">
<img class="media-object" data-src="/<%- config.urls.admin %>/poster?id=<%- id %>" alt="ID: <%- id %>" title="ID: <%- id %>">
</li>
<% }); %>
<% } %>
@ -295,7 +292,8 @@
var movies = document.querySelectorAll('.thumbs-list li');
movies.forEach(function(m, i) {
setTimeout(function() {
m.style.display = 'inline-block';
m.querySelector('img').src = m.querySelector('img').dataset.src;
setTimeout(function() {m.style.display = 'inline-block';}, i * 100);
}, i * 300);
});
</script>

View file

@ -394,11 +394,12 @@
ids.unshift(kp_id);
}
addList.value = ids.join(',');
addPoster.innerHTML = (id.dataset.last ? addPoster.innerHTML : '') + '<li data-delete-id="' + kp_id + '" data-delete-name="' + self.dataset.addName + '"><img class="media-object" src="/<%- config.urls.admin %>/poster?id=' + kp_id + '" alt="ID: ' + kp_id + '" title="ID: ' + kp_id + '"></li>' + (!id.dataset.last ? addPoster.innerHTML : '');
addPoster.innerHTML = (id.dataset.last ? addPoster.innerHTML : '') + '<li data-delete-id="' + kp_id + '" data-delete-name="' + self.dataset.addName + '"><img class="media-object" src="/<%- config.urls.admin %>/poster?id=' + kp_id + '" data-src="/<%- config.urls.admin %>/poster?id=' + kp_id + '" alt="ID: ' + kp_id + '" title="ID: ' + kp_id + '"></li>' + (!id.dataset.last ? addPoster.innerHTML : '');
var delId = document.querySelectorAll('li[data-delete-name]');
if (delId)
for (var i = 0; i < delId.length; i++)
for (var i = 0; i < delId.length; i++) {
delId[i].addEventListener('click', delIdList);
}
}
}
@ -841,6 +842,10 @@
data.config.movies.cron = data.config.movies.cron.split(/(\n\n|\n)/ig).filter(Boolean);
}
if (data.config && data.config.movies && data.config.movies.proxy) {
data.config.movies.proxy = data.config.movies.proxy.split(/(\n\n|\n|,)/ig).filter(Boolean);
}
if (data.modules && data.modules.content && data.modules.content.data.custom) {
data.modules.content.data.custom = data.modules.content.data.custom.split(/(\n\n|\n)/ig).filter(Boolean);
}

View file

@ -445,22 +445,24 @@
<ul data-add-name="modules.abuse.data.turbo">
<% if (modules.abuse.data.turbo) { %>
<% modules.abuse.data.turbo.forEach(function (id) { %>
<li data-delete-id="<%- id %>"
data-delete-name="modules.abuse.data.turbo" style="display: none">
<img class="media-object"
src="/<%- config.urls.admin %>/poster?id=<%- id %>"
alt="ID: <%- id %>" title="ID: <%- id %>">
<li data-delete-id="<%- id %>" data-delete-name="modules.abuse.data.turbo" style="display: none">
<img class="media-object" data-src="/<%- config.urls.admin %>/poster?id=<%- id %>" alt="ID: <%- id %>" title="ID: <%- id %>">
</li>
<% }); %>
<% } %>
</ul>
<script>
var turbo = document.querySelectorAll('.thumbs-list li');
turbo.forEach(function(m, i) {
setTimeout(function() {
m.style.display = 'inline-block';
}, i * 300);
});
function show_posters() {
var turbo = document.querySelectorAll('.thumbs-list li');
turbo.forEach(function(m, i) {
setTimeout(function() {
m.querySelector('img').src = m.querySelector('img').dataset.src;
setTimeout(function() {
m.style.display = 'inline-block';
}, i * 100);
}, i * 300);
});
}
</script>
</div>
@ -474,14 +476,20 @@
<div class="spacer-10"></div>
<textarea class="form-control input_ids" name="modules.abuse.data.turbo"
placeholder="<%= __('Список идентификаторов фильмов') %>"><% if (modules.abuse.data.turbo) { %><%- modules.abuse.data.turbo.join(',') %><% } %></textarea>
<textarea class="form-control input_ids" name="modules.abuse.data.turbo" placeholder="<%= __('Список идентификаторов фильмов') %>"><% if (modules.abuse.data.turbo) { %><%- modules.abuse.data.turbo.join(',') %><% } %></textarea>
<div class="spacer-10"></div>
</div>
<div class="advanced-textarea-footer">
<% if (modules.abuse.data.turbo && modules.abuse.data.turbo.length > 100) { %>
<div class="pull-left">
<a href="javascript:void(0)" onclick="show_posters()" class="btn btn-default"><i class="fas fa-images"></i> <strong><%- modules.abuse.data.turbo.length %></strong></a>
</div>
<% } else { %>
<script>show_posters();</script>
<% } %>
<div class="pull-right">
<a href="javascript:void(0)"
onclick="document.querySelector('#turbo_ids').style.display = 'block'"
@ -728,22 +736,24 @@
<ul data-add-name="modules.abuse.data.movies">
<% if (modules.abuse.data.movies) { %>
<% modules.abuse.data.movies.forEach(function (id) { %>
<li data-delete-id="<%- id %>"
data-delete-name="modules.abuse.data.movies" style="display: none">
<img class="media-object"
src="/<%- config.urls.admin %>/poster?id=<%- id %>"
alt="ID: <%- id %>" title="ID: <%- id %>">
<li data-delete-id="<%- id %>" data-delete-name="modules.abuse.data.movies" style="display: none">
<img class="media-object" data-src="/<%- config.urls.admin %>/poster?id=<%- id %>" alt="ID: <%- id %>" title="ID: <%- id %>">
</li>
<% }); %>
<% } %>
</ul>
<script>
var movies = document.querySelectorAll('.thumbs-list li');
movies.forEach(function(m, i) {
setTimeout(function() {
m.style.display = 'inline-block';
}, i * 300);
});
function show_posters2() {
var movies = document.querySelectorAll('.thumbs-list li');
movies.forEach(function(m, i) {
setTimeout(function() {
m.querySelector('img').src = m.querySelector('img').dataset.src;
setTimeout(function() {
m.style.display = 'inline-block';
}, i * 100);
}, i * 300);
});
}
</script>
</div>
@ -757,14 +767,20 @@
<div class="spacer-10"></div>
<textarea class="form-control input_ids" name="modules.abuse.data.movies"
placeholder="<%= __('Список идентификаторов фильмов') %>"><% if (modules.abuse.data.movies) { %><%- modules.abuse.data.movies.join(',') %><% } %></textarea>
<textarea class="form-control input_ids" name="modules.abuse.data.movies" placeholder="<%= __('Список идентификаторов фильмов') %>"><% if (modules.abuse.data.movies) { %><%- modules.abuse.data.movies.join(',') %><% } %></textarea>
<div class="spacer-10"></div>
</div>
<div class="advanced-textarea-footer">
<% if (modules.abuse.data.movies && modules.abuse.data.movies.length > 100) { %>
<div class="pull-left">
<a href="javascript:void(0)" onclick="show_posters2()" class="btn btn-default"><i class="fas fa-images"></i> <strong><%- modules.abuse.data.movies.length %></strong></a>
</div>
<% } else { %>
<script>show_posters2();</script>
<% } %>
<div class="pull-right">
<a href="javascript:void(0)"
onclick="document.querySelector('#abuse_ids').style.display = 'block'"

View file

@ -246,18 +246,21 @@
<% if (content.content_movies) { %>
<% content.content_movies.split(',').forEach(function (id) { %>
<li data-delete-id="<%- id %>" data-delete-name="content.content_movies" style="display:none">
<img class="media-object" src="/<%- config.urls.admin %>/poster?id=<%- id %>" alt="ID: <%- id %>" title="ID: <%- id %>">
<img class="media-object" data-src="/<%- config.urls.admin %>/poster?id=<%- id %>" alt="ID: <%- id %>" title="ID: <%- id %>">
</li>
<% }); %>
<% } %>
</ul>
<script>
var movies = document.querySelectorAll('.thumbs-list li');
movies.forEach(function(m, i) {
setTimeout(function() {
m.style.display = 'inline-block';
}, i * 300);
});
function show_posters() {
var movies = document.querySelectorAll('.thumbs-list li');
movies.forEach(function(m, i) {
setTimeout(function() {
m.querySelector('img').src = m.querySelector('img').dataset.src;
setTimeout(function() {m.style.display = 'inline-block';}, i * 100);
}, i * 300);
});
}
</script>
</div>
@ -271,14 +274,20 @@
<div class="spacer-10"></div>
<textarea class="form-control input_ids" name="content.content_movies"
placeholder="<%= __('Список идентификаторов фильмов') %>"><% if (content.content_movies) { %><%- content.content_movies %><% } %></textarea>
<textarea class="form-control input_ids" name="content.content_movies" placeholder="<%= __('Список идентификаторов фильмов') %>"><% if (content.content_movies) { %><%- content.content_movies %><% } %></textarea>
<div class="spacer-10"></div>
</div>
<div class="advanced-textarea-footer">
<% if (content.content_movies && content.content_movies.split(',').length > 100) { %>
<div class="pull-left">
<a href="javascript:void(0)" onclick="show_posters()" class="btn btn-default"><i class="fas fa-images"></i> <strong><%- content.content_movies.split(',').length %></strong></a>
</div>
<% } else { %>
<script>show_posters();</script>
<% } %>
<div class="pull-right">
<a href="javascript:void(0)"
onclick="document.querySelector('#content_ids').style.display = 'block'"

View file

@ -137,11 +137,8 @@
<ul data-add-name="modules.slider.data.movies">
<% if (modules.slider.data.movies) { %>
<% modules.slider.data.movies.forEach(function (id) { %>
<li data-delete-id="<%- id %>"
data-delete-name="modules.slider.data.movies" style="display: none">
<img class="media-object"
src="/<%- config.urls.admin %>/poster?id=<%- id %>"
alt="ID: <%- id %>" title="ID: <%- id %>">
<li data-delete-id="<%- id %>" data-delete-name="modules.slider.data.movies" style="display: none">
<img class="media-object" data-src="/<%- config.urls.admin %>/poster?id=<%- id %>" alt="ID: <%- id %>" title="ID: <%- id %>">
</li>
<% }); %>
<% } %>
@ -150,7 +147,8 @@
var movies = document.querySelectorAll('.thumbs-list li');
movies.forEach(function(m, i) {
setTimeout(function() {
m.style.display = 'inline-block';
m.querySelector('img').src = m.querySelector('img').dataset.src;
setTimeout(function() {m.style.display = 'inline-block';}, i * 100);
}, i * 300);
});
</script>

View file

@ -145,11 +145,8 @@
<ul data-add-name="modules.soon.data.movies">
<% if (modules.soon.data.movies) { %>
<% modules.soon.data.movies.forEach(function (id) { %>
<li data-delete-id="<%- id %>"
data-delete-name="modules.soon.data.movies" style="display: none">
<img class="media-object"
src="/<%- config.urls.admin %>/poster?id=<%- id %>"
alt="ID: <%- id %>" title="ID: <%- id %>">
<li data-delete-id="<%- id %>" data-delete-name="modules.soon.data.movies" style="display: none">
<img class="media-object" data-src="/<%- config.urls.admin %>/poster?id=<%- id %>" alt="ID: <%- id %>" title="ID: <%- id %>">
</li>
<% }); %>
<% } %>
@ -158,7 +155,8 @@
var movies = document.querySelectorAll('.thumbs-list li');
movies.forEach(function(m, i) {
setTimeout(function() {
m.style.display = 'inline-block';
m.querySelector('img').src = m.querySelector('img').dataset.src;
setTimeout(function() {m.style.display = 'inline-block';}, i * 100);
}, i * 300);
});
</script>

View file

@ -280,14 +280,10 @@
<div class="input-group">
<span class="input-group-addon"><%= __('Тип:') %></span>
<select name="movie.type" class="form-control">
<option value="0" <% if (movie.type !== 1) { %>selected="selected"
<% } %>
>
<option value="0" <% if (movie.type !== 1) { %>selected="selected"<% } %>>
<%= __('Фильм') %>
</option>
<option value="1" <% if (movie.type === 1) { %>selected="selected"
<% } %>
>
<option value="1" <% if (movie.type === 1) { %>selected="selected"<% } %>>
<%= __('Сериал') %>
</option>
</select>
@ -945,6 +941,28 @@
<div class="spacer-10"></div>
<div class="col-lg-12 col-xs-12">
<div class="faq">
<article class="faq-group">
<header class="text-muted text-left">
<i class="fa fa-plus"></i>
<h3>
<span class="fas fa-list-ol"></span> <%= __('Прокси-сервера') %>
</h3>
</header>
<div class="faq-content clearfix">
<div class="row">
<div class="col-sm-12">
<textarea class="form-control custom" name="config.movies.proxy" placeholder="login:pass@192.168.0.1:1234, login:pass@192.168.0.2:4321 <> www.imdb.com" style="height:300px;"><%- config.movies.proxy.join('\n') %></textarea>
</div>
</div>
</div>
</article>
</div>
</div>
<div class="spacer-10"></div>
<div class="col-lg-12 col-xs-12 text-center" style="margin-bottom: 10px">
<span class="btn btn-primary btn-sm btn-block movies_cron">
<span id="movies_cron">

View file

@ -174,13 +174,9 @@
<div class="thumbs-list thumbs-small">
<ul>
<% soon_id.forEach(function (id) { %>
<a href="/<%- config.urls.admin %>/movies?id=<%- id %>"
target="_blank">
<a href="/<%- config.urls.admin %>/movies?id=<%- id %>" target="_blank">
<li style="background: none !important; display: none">
<img class="media-object"
src="/<%- config.urls.admin %>/poster?id=<%- id %>"
alt="ID: <%- id %>"
title="ID: <%- id %>">
<img class="media-object" data-src="/<%- config.urls.admin %>/poster?id=<%- id %>" alt="ID: <%- id %>" title="ID: <%- id %>">
</li>
</a>
<% }); %>
@ -189,7 +185,8 @@
var movies = document.querySelectorAll('.thumbs-list li');
movies.forEach(function(m, i) {
setTimeout(function() {
m.style.display = 'inline-block';
m.querySelector('img').src = m.querySelector('img').dataset.src;
setTimeout(function() {m.style.display = 'inline-block';}, i * 100);
}, i * 300);
});
</script>