- // ==UserScript==
- // @name DDU Tagger
- // @description DDU posts with IMDB, rottentomatoes
- // @author SH3LL
- // @version 0.4.3
- // @match https://ddunlimited.net/viewforum.php?*
- // @grant none
- // @run-at document-idle
- // @grant GM_xmlhttpRequest
- // @license GPL3
- // @namespace https://greasyfork.org/users/762057
- // ==/UserScript==
-
-
- function TMDB_search_api(title, year, content) {
-
- if (content==="movie" || content==="movie_cartoon" || content==="movie_anime"){
- return new Promise(function (resolve, reject) {
- GM_xmlhttpRequest({
- method: 'GET',
- responseType: 'json',
- synchronous: false,
- url: 'https://api.themoviedb.org/3/search/movie?api_key=8d6d91941230817f7807d643736e8a49&query='+ title +'&page=1&include_adult=false',
- onload: (resp) => {
-
- let json = JSON.parse(resp.responseText);
- console.log('TMDB search api: https://api.themoviedb.org/3/search/movie?api_key=8d6d91941230817f7807d643736e8a49&query='+ title +'&page=1&include_adult=false');
-
- if (json && json.Error) {
- console.log("Error: " + json.Error);
- resolve("error"); return;
- }
-
- if (parseInt(json.total_results) !== 0){
- for(let result of json.results){
- if(result.release_date === undefined) continue;
-
- // animation check
- let animation_flag=0;
- if(content==="movie_cartoon" || content==="movie_anime"){
- for(let curr_genre of result.genre_ids) {if(parseInt(curr_genre)===16) {animation_flag=1; continue;}}
- }
- if((content==="movie_cartoon" || content==="movie_anime") && animation_flag!==1) continue;
-
- //send result
- if( parseInt(result.release_date.slice(0,4)) === parseInt(year) || parseInt(result.release_date.slice(0,4)) === parseInt(year) - 1 || parseInt(result.release_date.slice(0,4)) === parseInt(year) + 1){ // FIX exported EU MOVIES & TMDB errors
- resolve(result.id); return;
- }
- }
- }else{
- console.log("Error: query returned no results");
- resolve("error"); return;
- }
- //if no year is found
- console.log("Error: no result matched the year");
- resolve("error"); return;
-
- }
- });
- });
-
- }else if(content==="tv" || content==="tv_cartoon" || content==="tv_anime"){
- return new Promise(function (resolve, reject) {
- GM_xmlhttpRequest({
- method: 'GET',
- responseType: 'json',
- synchronous: false,
- url: 'https://api.themoviedb.org/3/search/tv?api_key=8d6d91941230817f7807d643736e8a49&query='+ title +'&page=1&include_adult=false',
- onload: (resp) => {
-
- let json = JSON.parse(resp.responseText);
- console.log('TMDB search api: https://api.themoviedb.org/3/search/tv?api_key=8d6d91941230817f7807d643736e8a49&query='+ title +'&page=1&include_adult=false');
-
- if (json && json.Error) {
- console.log("Error: " + json.Error);
- resolve("error"); return;
- }
-
- if (parseInt(json.total_results) !== 0){
- let first_entry = json.results[0];
- resolve(first_entry.id); return;
-
- }else{
- console.log("Error: query returned no results");
- resolve("error"); return;
- }
-
- }
- });
- });
- }
- }
-
- function TMDB_title_api(TMDB_id,content,country) {
-
- if (content==="movie" || content==="movie_cartoon" || content==="movie_anime"){
- return new Promise(function (resolve, reject) {
- GM_xmlhttpRequest({
- method: 'GET',
- responseType: 'json',
- synchronous: false,
- url: 'https://api.themoviedb.org/3/movie/'+TMDB_id+'?api_key=8d6d91941230817f7807d643736e8a49&language=it&append_to_response=external_ids,videos',
- onload: (resp) => {
-
- let json = JSON.parse(resp.responseText);
- console.log('TMDB title api: https://api.themoviedb.org/3/movie/'+TMDB_id+'?api_key=8d6d91941230817f7807d643736e8a49&language=it&append_to_response=external_ids,videos');
-
- if (json && json.Error) {
- console.log("Error: " + json.Error);
- resolve("error"); return;
- }
-
- let YT_trailer_url_delta=0,IMDB_id=0,TMDB_title=0,TMDB_year=0,TMDB_poster_delta=0;
-
- if(content.includes("anime")) {TMDB_title = json.title;} else {TMDB_title = json.original_title;} //title
- if(json.external_ids!==undefined && json.external_ids.imdb_id!== null) IMDB_id = json.external_ids.imdb_id; //imdb id
- if(json.release_date!==null && json.release_date!==undefined) TMDB_year=json.release_date.slice(0,4);
- if(json.poster_path!==null) TMDB_poster_delta = json.poster_path; //poster
- if(json.videos!==undefined && json.videos.results.length!==0) YT_trailer_url_delta = json.videos.results[0].key; //videos
-
- resolve([IMDB_id,TMDB_title,TMDB_year,TMDB_poster_delta,YT_trailer_url_delta]); return;
-
- }
- });
- });
-
- }else if(content==="tv" || content==="tv_cartoon" || content==="tv_anime"){
- return new Promise(function (resolve, reject) {
- GM_xmlhttpRequest({
- method: 'GET',
- responseType: 'json',
- synchronous: false,
- url: 'https://api.themoviedb.org/3/tv/'+TMDB_id+'?api_key=8d6d91941230817f7807d643736e8a49&language='+country+'&append_to_response=external_ids,videos',
- onload: (resp) => {
-
- let json = JSON.parse(resp.responseText);
- console.log('TMDB title api: https://api.themoviedb.org/3/tv/'+TMDB_id+'?api_key=8d6d91941230817f7807d643736e8a49&language='+country+'&append_to_response=external_ids,videos');
-
- if (json && json.Error) {
- console.log("Error: " + json.Error);
- resolve("error"); return;
- }
-
- let YT_trailer_url_delta=0,IMDB_id=0,TMDB_title=0,TMDB_poster_delta=0,seasonscount=0;
-
- if(content.includes("cartoon")) {TMDB_title = json.name;} else {TMDB_title = json.original_name;} //title
- if(json.external_ids!==undefined && json.external_ids.imdb_id!== null) IMDB_id = json.external_ids.imdb_id; //imdb id
- if(json.poster_path!==null) TMDB_poster_delta = json.poster_path; //poster
- if(json.videos!==undefined && json.videos.results.length!==0) YT_trailer_url_delta = json.videos.results[0].key; //videos
- if(json.seasons!==undefined && json.seasons!== null) seasonscount = (json.seasons).length;
-
- //years range
- let first_year="N/A",last_year="N/A",years_range;
- if(json.first_air_date!==undefined && json.first_air_date!==null) first_year = json.first_air_date.slice(0,4);
- if(json.last_air_date!==undefined && json.last_air_date!==null) {
- if(json.last_air_date.slice(2,4) !== first_year.slice(2,4)) last_year = json.last_air_date.slice(2,4);
- }
-
- if(last_year !=="N/A") years_range=first_year + "-" + last_year; else years_range=first_year;
-
- resolve([IMDB_id,TMDB_title,first_year,TMDB_poster_delta,YT_trailer_url_delta,seasonscount,years_range]); return;
-
- }
- });
- });
- }
- }
-
- function TMDB_providers_api(id,my_country,content) {
-
- if (content==="movie" || content==="movie_cartoon" || content==="movie_anime"){
- return new Promise(function (resolve, reject) {
- GM_xmlhttpRequest({
- method: 'GET',
- responseType: 'json',
- synchronous: false,
- url: 'https://api.themoviedb.org/3/movie/'+ id +'/watch/providers?api_key=8d6d91941230817f7807d643736e8a49',
- onload: (resp) => {
-
- let json = JSON.parse(resp.responseText);
- console.log('TMDB provder api: https://api.themoviedb.org/3/movie/'+ id +'/watch/providers?api_key=8d6d91941230817f7807d643736e8a49');
-
- if (json && json.Error) {
- console.log("Error: " + json.Error);
- resolve("error"); return;
- }
-
- let providers = [];
- for(let curr_country in json.results){
- if(String(curr_country)===my_country && json.results[curr_country].flatrate !== undefined){
- for(let provider of json.results[curr_country].flatrate){
- providers.push(
- {
- "provider_name" : provider.provider_name,
- "provider_logo" : provider.logo_path
- }
- );
- }
- }
- }
- if(providers.length !== 0 ){
- resolve(providers); return;
- }else{resolve("error"); return}
-
- }
- });
- });
-
- }else if(content==="tv" || content==="tv_cartoon" || content==="tv_anime"){
- return new Promise(function (resolve, reject) {
- GM_xmlhttpRequest({
- method: 'GET',
- responseType: 'json',
- synchronous: false,
- url: 'https://api.themoviedb.org/3/tv/'+ id +'/watch/providers?api_key=8d6d91941230817f7807d643736e8a49',
- onload: (resp) => {
-
- let json = JSON.parse(resp.responseText);
- console.log('TMDB provder api: https://api.themoviedb.org/3/tv/'+ id +'/watch/providers?api_key=8d6d91941230817f7807d643736e8a49');
-
- if (json && json.Error) {
- console.log("Error: " + json.Error);
- resolve("error"); return;
- }
-
- let providers = [];
- for(let curr_country in json.results){
- if(String(curr_country)===my_country && json.results[curr_country].flatrate !== undefined){
- for(let provider of json.results[curr_country].flatrate){
- providers.push(
- {
- "provider_name" : provider.provider_name,
- "provider_logo" : provider.logo_path
- }
- );
- }
- }
- }
- if(providers.length !== 0 ){
- resolve(providers); return;
- }else{resolve("error"); return}
- }
- });
- });
- }
- }
-
- function OMDB_title_api(IMDB_id,content) {
-
- if (content==="movie" || content==="movie_cartoon" || content==="movie_anime"){
- return new Promise(function (resolve, reject) {
- GM_xmlhttpRequest({
- method: 'GET',
- responseType: 'json',
- synchronous: false,
- url: 'https://www.omdbapi.com/?apikey=75251a35&type=movie&i='+IMDB_id,
- onload: (resp) => {
-
- let json = JSON.parse(resp.responseText);
- console.log('OMDB title api: https://www.omdbapi.com/?apikey=75251a35&type=movie&i='+IMDB_id);
-
- if (json && json.Error) {
- console.log("Error: " + json.Error);
- resolve("error"); return;
- }
-
- let IMDB_rating=0, IMDB_title=json.Title, IMDB_year = json.Year, Awards=0;
- for(let rating of json.Ratings){
- if(rating.Source==="Internet Movie Database") IMDB_rating= rating.Value;
- }
- if(json.Awards !== "N/A" && json.Awards !== undefined) Awards = json.Awards;
- resolve([IMDB_title,IMDB_year,IMDB_rating,Awards]); return;
-
- }
- });
- });
-
- }else if(content==="tv"|| content==="tv_cartoon" || content==="tv_anime"){
- return new Promise(function (resolve, reject) {
- GM_xmlhttpRequest({
- method: 'GET',
- responseType: 'json',
- synchronous: false,
- url: 'https://www.omdbapi.com/?apikey=75251a35&type=series&i='+IMDB_id,
- onload: (resp) => {
-
- let json = JSON.parse(resp.responseText);
- console.log('OMDB title api: https://www.omdbapi.com/?apikey=75251a35&type=series&i='+IMDB_id);
-
- if (json && json.Error) {
- console.log("Error: " + json.Error);
- resolve("error"); return;
- }
-
- let IMDB_rating=0, IMDB_title=json.Title, IMDB_year = json.Year, Awards=0;
- for(let rating of json.Ratings){
- if(rating.Source==="Internet Movie Database") IMDB_rating= rating.Value;
- }
- if(json.Awards !== "N/A" && json.Awards !== undefined) Awards = json.Awards;
- resolve([IMDB_title,IMDB_year,IMDB_rating,Awards]); return;
-
- }
- });
- });
- }
- }
-
- function JIKAN_search_api(title,year,content) {
-
- title=title.replaceAll(" ","%20"); // <---
- if (content==="movie_anime"){
- return new Promise(function (resolve, reject) {
- GM_xmlhttpRequest({
- method: 'GET',
- responseType: 'json',
- synchronous: false,
- url: 'https://api.jikan.moe/v3/search/anime?q='+title+'&page=1',
- onload: (resp) => {
-
- let json = JSON.parse(resp.responseText);
- console.log('MAL search api: https://api.jikan.moe/v3/search/anime?q='+title+'&page=1');
-
- if (json && json.Error) {
- console.log("Error: " + json.Error);
- resolve("error"); return;
- }
-
- let MAL_url=0, MAL_title_name=0, MAL_score=0, MAL_image_url=0, content_type=0, episodes_count=0, start_date=0;
- for(let result of json.results){
- if(result.type!==null && result.start_date!==null &&
- (parseInt(result.start_date.slice(0,4))===parseInt(year) || parseInt(result.start_date.slice(0,4))===parseInt(year)-1 || parseInt(result.start_date.slice(0,4))===parseInt(year)-2) &&
- (result.type === "Movie" /*TV*/ || result.type === "ONA" || result.type === "OVA")){
-
- if(result.url!== null) MAL_url = result.url;
- if(result.title!== null) MAL_title_name = result.title;
- if(result.score!== null) MAL_score = result.score;
- if(result.image_url!== null) MAL_image_url = result.image_url;
- if(result.type!== null) content_type = result.type;
- if(result.episodes!== null) episodes_count = result.episodes;
- if(result.start_date!== null) start_date = result.start_date.slice(0,4);
-
- resolve([MAL_url, MAL_title_name, MAL_score, MAL_image_url, content_type, episodes_count, start_date]); return;
- }
- }
-
- console.log("JIKAN [MAL]: Error, title not found");
- resolve("error"); return;
-
-
- }
- });
- });
-
- }else if(content==="tv_anime"){
- return new Promise(function (resolve, reject) {
- GM_xmlhttpRequest({
- method: 'GET',
- responseType: 'json',
- synchronous: false,
- url: 'https://api.jikan.moe/v3/search/anime?q='+title+'&page=1',
- onload: (resp) => {
-
- let json = JSON.parse(resp.responseText);
- console.log('MAL search api: https://api.jikan.moe/v3/search/anime?q='+title+'&page=1&limit=10');
-
- if (json && json.Error) {
- console.log("Error: " + json.Error);
- resolve("error"); return;
- }
-
- let MAL_url=0, MAL_title_name=0, MAL_score=0, MAL_image_url=0, content_type=0, episodes_count=0, start_date=0, end_date=0, date_range=0;
- for(let result of json.results){
- if(result.type!==null && result.start_date!==null &&
- (parseInt(result.start_date.slice(0,4))===parseInt(year) || parseInt(result.start_date.slice(0,4))===parseInt(year)-1 || parseInt(result.start_date.slice(0,4))===parseInt(year)-2) &&
- (result.type === "TV" || result.type === "ONA" || result.type === "OVA")){
-
- if(result.url!== null) MAL_url = result.url;
- if(result.title!== null) MAL_title_name = result.title;
- if(result.score!== null) MAL_score = result.score;
- if(result.image_url!== null) MAL_image_url = result.image_url;
- if(result.type!== null) content_type = result.type;
- if(result.episodes!== null) episodes_count = result.episodes;
- if(result.start_date!== null) start_date = result.start_date.slice(0,4);
- if(result.end_date!== null) end_date = result.end_date.slice(2,4);
-
- if(start_date!== 0 && end_date!== 0) date_range = start_date + "-" + end_date
-
- resolve([MAL_url, MAL_title_name, MAL_score, MAL_image_url, content_type, episodes_count, date_range]); return;
- }
- }
-
- console.log("JIKAN [MAL]: Error, title not found");
- resolve("error"); return;
-
-
- }
- });
- });
- }
- }
-
-
- function RT_search_api(title,year,content) {
-
- title = title.replaceAll(".","").replaceAll(",","").replaceAll("&","").replaceAll("-","").replaceAll(":","");
- title = title.replaceAll(/Parte \d+/gm,"").replaceAll(/Part \d+/gm,"").replaceAll("The Movie","").replaceAll("Il film","").replaceAll("Il Film","");
- title = title.replace(/\s\s+/g, ' ').trim().replaceAll(" ", "%20");
-
- if (content==="movie" || content==="movie_cartoon" || content==="movie_anime"){
- return new Promise(function (resolve, reject) {
- GM_xmlhttpRequest({
- method: 'GET',
- responseType: 'json',
- synchronous: false,
- url: 'https://www.rottentomatoes.com/api/private/v2.0/search/?limit=100&q='+ title +'&t=movie',
- onload: (resp) => {
-
- let json = JSON.parse(resp.responseText);
- console.log('RT search api: https://www.rottentomatoes.com/api/private/v2.0/search/?limit=100&q='+ title +'&t=movie');
-
- if (json && json.Error) {
- console.log("Error: " + json.Error);
- resolve("error"); return;
- }
-
- if(json.movieCount === 0){
- console.log("Error: No movies found in RT");
- resolve("error"); return;
- }
-
- let fresh_certificate=0, meterscore = 0, url=0;
- for(let movie of json.movies){
- if(parseInt(movie.year) === parseInt(year) || parseInt(movie.year) === parseInt(year)+1|| parseInt(movie.year) === parseInt(year) +2 || parseInt(movie.year) === parseInt(year)-1){ //fix rotten tomatoes errors
- if(movie.meterClass === "fresh" || movie.meterClass === "certified_fresh") fresh_certificate='fresh';
- if(movie.meterClass === "rotten") fresh_certificate='rotten';
- if(movie.meterScore !== "N/A" && movie.meterScore !== undefined) meterscore=movie.meterScore;
- url=movie.url;
- break;
- }
- }
-
- if(url!==0) {resolve([url,meterscore,fresh_certificate]); return;} else{resolve("error"); return;}
- }
- });
- });
-
- }else if(content==="tv" || content==="tv_cartoon" || content==="tv_anime"){
- return new Promise(function (resolve, reject) {
- GM_xmlhttpRequest({
- method: 'GET',
- responseType: 'json',
- synchronous: false,
- url: 'https://www.rottentomatoes.com/api/private/v2.0/search/?limit=100&q='+ title +'&t=tvSeries',
- onload: (resp) => {
-
- let json = JSON.parse(resp.responseText);
- console.log('RT search api: https://www.rottentomatoes.com/api/private/v2.0/search/?limit=100&q='+ title +'&t=tvSeries');
-
- if (json && json.Error) {
- console.log("Error: " + json.Error);
- resolve("error"); return;
- }
-
- if(json.tvCount === 0){
- console.log("Error: No series found in RT");
- resolve("error"); return;
- }
-
- let fresh_certificate=0, meterscore = 0, url=0;
- for(let title of json.tvSeries){
- if(parseInt(title.startYear) === parseInt(year) || parseInt(title.startYear) === parseInt(year) +1 || parseInt(title.startYear) === parseInt(year) +2 || parseInt(title.startYear) === parseInt(year)-1){ //fix rotten tomatoes errors
- if(title.meterClass === "fresh" || title.meterClass === "certified_fresh") fresh_certificate='fresh';
- if(title.meterClass === "rotten") fresh_certificate='rotten';
- if(title.meterScore !== "N/A" && title.meterScore !== undefined) meterscore=title.meterScore;
- url=title.url;
- break;
- }
- }
-
- if(url!==0) {resolve([url,meterscore,fresh_certificate]); return;} else{resolve("error"); return;}
- }
- });
- });
- }
- }
-
- function clean_title(title,content){ //clean special characters
- return new Promise(function (resolve, reject) {
- if(title!=="" && title!==undefined){
- let new_title,new_year;
-
- //clean
- title=title.replaceAll("&", " ");
- title=title.replaceAll(":", " ");
- title=title.replaceAll(",", " ");
- title=title.replaceAll(".", " ");
- title=title.replaceAll(";", " ");
- title=title.replaceAll("–", "-");
- title=title.replaceAll(" 01 ", " 1 ");
- title=title.replaceAll(" 02 ", " 2 ");
- title=title.replaceAll(" 03 ", " 3 ");
- title=title.replaceAll(" 04 ", " 4 ");
- title=title.replaceAll(" 05 ", " 5 ");
- title=title.replaceAll(" 06 ", " 6 ");
- title=title.replaceAll(" 07 ", " 7 ");
- title=title.replaceAll(" 08 ", " 8 ");
- title=title.replaceAll(" 09 ", " 9 ");
- title=title.replaceAll(" OAV ", "");
- title=title.replaceAll("[PRE] ", "");
- title=title.replaceAll("[Pre] ", "");
- title=title.replaceAll("[pre] ", "");
- title=title.replaceAll("EXTENDED", " ");
- title=title.replaceAll("Director Cut", " ");
- title=title.replaceAll("Director's Cut", " ");
- title=title.replaceAll("The Movie", " ");
- title=title.replaceAll("the movie", " ");
- title=title.replaceAll("The movie", " ");
- title=title.replaceAll("the Movie", " ");
- title=title.replaceAll("THE MOVIE", " ");
- title=title.replaceAll("Movie", " ");
- title=title.replaceAll("MOVIE", " ");
- title=title.replaceAll("il film", " ");
- title=title.replaceAll("Il film", " ");
- title=title.replaceAll("il Film", " ");
- title=title.replaceAll("Il Film", " ");
- title=title.replaceAll("film", " ");
- title=title.replaceAll("Film", " ");
- title=title.replaceAll("FILM", " ");
- title=title.replaceAll("ep", " ");
- title=title.replaceAll("Ep", " ");
- title=title.replaceAll("EP", " ");
- title=title.trim();
-
- //splitting
- if(content==="movie" || content==="movie_cartoon" || content==="movie_anime"){
- new_title=title.split("(")[0].trim();
- let title_length=title.split("(")[1].split(")")[0].length;
- new_year=title.split("(")[1].split(")")[0].slice(title_length-4, title_length).trim();
-
- //double graph
- if(isNaN(new_year)){
- title_length=title.split("(")[2].split(")")[0].length;
- new_year=parseInt(title.split("(")[2].split(")")[0].slice(title_length-4, title_length).trim());
- }
-
- //if(new_title.includes("-") && (content.includes("anime")) new_title = new_title.split("-")[0]; //double title problem (for movies, not anime)
- if(new_title.includes("-")) new_title=new_title.replaceAll("-", " "); //dash in the anime title (for anime movies)
-
- }else if(content==="tv"|| content==="tv_cartoon" || content==="tv_anime"){
- new_title=title;
- if(content.includes("cartoon") && !title.includes("(") ){resolve("Error, title clened was empty"); return;}
-
- if(title.includes("(")){
- new_title=title.split("(")[0];
- new_year=parseInt(title.split("(")[1].slice(0, 4));
- }
-
- if(new_title.includes("-")) new_title = title.split("-")[0]; //double title problem
- if(new_title.includes("[")) new_title = title.split("[")[0]; //double title problem
-
- //if there is a bracket before the year bracket
- if(isNaN(new_year) && title.includes("(")){
- new_year=parseInt(title.split("(")[2].slice(0, 4));
- }
-
- }
-
-
- new_title=new_title.replace(/\s\s+/g, ' ').trim().replaceAll(" ", "%20"); //remove multiple espaces and encode all remaining spaces
-
- resolve([new_title,new_year]); return;
- }else{resolve("Error, title clened was empty"); return;}
- })
- }
-
- async function main(){
- //data variables
- let content=0, thread_title_year=0, country = "IT";
- let TMDB_info=0,TMDB_id=0, TMDB_title=0,TMDB_providers=0, TMDB_year=0, YT_trailer_url=0, Seasonscount=0;
- let OMDB_info=0, IMDB_id=0, IMDB_title=0,IMDB_year=0,IMDB_rating=0, Awards=0;;
- let RT_info=0, RT_rating=0, RT_cert=0, RT_url_delta=0;
- let MAL_info=0, MAL_url=0, MAL_title_name=0, MAL_score=0, MAL_image_url=0, MAL_content_type=0, MAL_episodes_count=0, MAL_date=0;
-
- //content tagging
- if(window.location.href.includes("https://ddunlimited.net/viewforum.php?f=440")) {content="movie"} //se siamo in FilmHD
- if(window.location.href.includes("https://ddunlimited.net/viewforum.php?f=156")) {content="movie"} //se siamo in FilmHD DV-WEB
- if(window.location.href.includes("https://ddunlimited.net/viewforum.php?f=99")) {content="movie"} //se siamo in FILM SD
- if(window.location.href.includes("https://ddunlimited.net/viewforum.php?f=614")) {content="tv"} //se siamo in Serie HD
- if(window.location.href.includes("https://ddunlimited.net/viewforum.php?f=324")) {content="tv"} //se siamo in Serie SD
- if(window.location.href.includes("https://ddunlimited.net/viewforum.php?f=843")) {content="tv"} //se siamo in Serie HD SUB
- if(window.location.href.includes("https://ddunlimited.net/viewforum.php?f=323")) {content="tv"} //se siamo in Serie SD SUB
- if(window.location.href.includes("https://ddunlimited.net/viewforum.php?f=1945")) {content="tv"} //se siamo in Serie UHD
- if(window.location.href.includes("https://ddunlimited.net/viewforum.php?f=1584")) {content="movie_cartoon"} //se siamo in Movie Cartoon HD
- if(window.location.href.includes("https://ddunlimited.net/viewforum.php?f=1585")) {content="movie_cartoon"} //se siamo in Movie Cartoon SD
- if(window.location.href.includes("https://ddunlimited.net/viewforum.php?f=748")) {content="tv_cartoon"} //se siamo in Serie Cartoon HD
- if(window.location.href.includes("https://ddunlimited.net/viewforum.php?f=348")) {content="tv_cartoon"} //se siamo in Serie Cartoon SD
-
- let blocks = document.getElementsByClassName("forumbg");
- for(let block of blocks){
-
- console.log(block.getElementsByClassName("row bg1 announce"));
- console.log(block.getElementsByClassName("row bg1 sticky"));
-
- if(block.getElementsByClassName("row bg1 global-announce").length!==0) {continue;}
- if(window.location.href.includes("https://ddunlimited.net/viewforum.php?f=156") && block.getElementsByClassName("row bg1 announce").length!==0) {continue;}
- if(!window.location.href.includes("https://ddunlimited.net/viewforum.php?f=156") && (block.getElementsByClassName("row bg1 announce").length!==0 || block.getElementsByClassName("row bg1 sticky").length!==0)) {continue;}
-
- for (let thread of block.children[0].children[2].children){
- //Link & Label variables
- let TMDB_link = document.createElement("a"), IMDB_link = document.createElement("a"), RT_link = document.createElement("a"), AWARDS_link = document.createElement("a"), Seasons_label = document.createElement("label"), MAL_link= document.createElement("a"), YT_link = document.createElement("a");
- TMDB_link.style.marginRight = '4px'; IMDB_link.style.marginLeft = '4px'; RT_link.style.marginLeft = '4px', AWARDS_link.style.marginLeft="4px", YT_link.style.marginRight = "4px", MAL_link.style.marginLeft = "4px", Seasons_label.style.marginLeft = "4px";
- TMDB_link.style.color = 'deepskyblue'; IMDB_link.style.color = 'gold'; RT_link.style.color = 'orangered', AWARDS_link.style.color="goldenrod", AWARDS_link.style.fontSize = "70%", MAL_link.style.color="royalblue", Seasons_label.style.color = "salmon";
- //Images variables
- let TMDB_img = document.createElement('img'),IMDB_img = document.createElement('img'), RT_img = document.createElement('img'), RT_fresh_img = document.createElement('img'), RT_rotten_img = document.createElement('img'), AWARDS_img=document.createElement('img'), MAL_img=document.createElement('img'), YT_img=document.createElement('img'), POSTER_img=document.createElement('img');
- IMDB_img.style.marginLeft = '8px'; MAL_img.style.marginLeft = '8px';MAL_img.style.borderRadius = '3px'; IMDB_img.style.borderRadius = '3px'; RT_img.style.marginLeft = '8px'; RT_rotten_img.style.marginLeft = '8px'; RT_fresh_img.style.marginLeft = '8px'; AWARDS_img.style.marginLeft = '8px';
- AWARDS_img.style.height='16px'; AWARDS_img.style.width='16px'; RT_img.style.height='16px'; RT_img.style.width='16px'; RT_fresh_img.style.height='16px'; RT_fresh_img.style.width='16px'; RT_rotten_img.style.height='16px'; RT_rotten_img.style.width='16px'; POSTER_img.style.width = '46px'; POSTER_img.style.height = '69px';
- TMDB_img.src= 'https://www.google.com/s2/favicons?domain=www.themoviedb.org';
- IMDB_img.src= 'https://www.google.com/s2/favicons?domain=www.imdb.com';
- RT_img.src= 'https://i.postimg.cc/RCkVnKrp/rotten-tomatoes-rating-icons-1.png'; RT_fresh_img.src= 'https://i.postimg.cc/T1RcJQfC/fresh.png'; RT_rotten_img.src= 'https://i.postimg.cc/fbq3rKc8/rotten.png';
- MAL_img.src= 'https://www.google.com/s2/favicons?domain=myanimelist.net';
- AWARDS_img.src = 'https://i.postimg.cc/bNZkqQx6/Oscars-logo.png';
- YT_img.src = 'https://www.google.com/s2/favicons?domain=www.youtube.com';
-
- //get title from thread
- let thread_full_label=thread.children[0].children[0].children[0].children[0].children[0].children[0].innerText;
- thread_title_year = await clean_title(thread_full_label,content);
-
- if(thread_title_year.includes("Error")){ console.log(thread_title_year); TMDB_id="error";}
-
- let thread_title=thread_title_year[0], thread_year=thread_title_year[1];
- console.log([thread_title.replaceAll("%20", " "), thread_year]);
-
- //get imdb ID & tmdb score from TMDB api
- if(TMDB_id!=="error") TMDB_id = await TMDB_search_api(thread_title, thread_year,content);
- console.log('TMDB id: ' + TMDB_id);
- if(TMDB_id!=="error"){
- // TMDB title info
- TMDB_info = await TMDB_title_api(TMDB_id,content,country);
- if(TMDB_info!=="error") IMDB_id = TMDB_info[0];
- if(TMDB_info!=="error" && TMDB_info[1]!==0) TMDB_title = TMDB_info[1];
- if(TMDB_info!=="error" && TMDB_info[2]!==0) TMDB_year = TMDB_info[2];
- if(TMDB_info!=="error" && TMDB_info[3]!==0) POSTER_img.src= 'https://image.tmdb.org/t/p/w185' + TMDB_info[3];
- if(TMDB_info!=="error" && TMDB_info[4]!==0 && TMDB_info[4]!==0){ YT_trailer_url = " https://www.youtube.com/watch?v=" + TMDB_info[4]; }else {YT_trailer_url= 'https://www.youtube.com/results?search_query=' + TMDB_title + ' trailer ita';}
- if(content==="tv" && TMDB_info[5]!==0 && TMDB_info[6]!==0) Seasonscount= "{" + TMDB_info[6] +"}{S"+ TMDB_info[5]+"}";
- console.log('IMDB id: ' + IMDB_id);
-
- // TMDB proviers list
- TMDB_providers = await TMDB_providers_api(TMDB_id,country,content);
- }else{console.log("Skipping for error: " + thread_title.replaceAll("%20"," ") + " (" + thread_year + ")") ;}
-
-
- if(TMDB_id !== 'error' && TMDB_id!==0){
-
- //get IMDB title, rating, awards
- OMDB_info = await OMDB_title_api(IMDB_id,content);
- if(OMDB_info !== 'error'){
- IMDB_title = OMDB_info[0].replaceAll(" ", "%20");
- IMDB_year = OMDB_info[1];
- IMDB_rating = OMDB_info[2];
- //build awards string
- let awards_string = String(OMDB_info[3]).replaceAll("total","").trim();
- if (awards_string[awards_string.length-1]===".") awards_string=awards_string.substring(0, awards_string.length-1); // remove final dot from awards string
- if(OMDB_info[3]!==0) Awards = "(" + awards_string + ")";
- }
-
- //get RT url, score, certificate
- //RT_info = await RT_search_api(TMDB_title,TMDB_year,content);
- if(RT_info !== 'error' && RT_info!==0){
- RT_url_delta = RT_info[0];
- RT_rating = RT_info[1];
- RT_cert = RT_info[2];
- }
- console.log('IMDB score: ' + IMDB_rating + ' | RT score: '+RT_rating + ' (' + RT_cert +') | Awards: '+ Awards);
-
- let thread_row = thread.children[0].children[0].children[0].children[0].children[0].children[0];
- let thread_block = thread.children[0].children[0].children[0].children[0];
- if(String(thread_row.children[0].href).includes("unread")) thread_row.removeChild(thread_row.children[0]);
-
- //get MAL url, score, certificate
- /*
- if(content.includes("anime")) MAL_info = await JIKAN_search_api(IMDB_title,TMDB_year,content);
- if(MAL_info !== 'error' && MAL_info!==0){
- MAL_url=MAL_info[0];
- MAL_title_name=MAL_info[1];
- MAL_score=MAL_info[2];
- MAL_image_url=MAL_info[3];
- MAL_content_type=MAL_info[4];
- MAL_episodes_count=MAL_info[5];
- MAL_date=MAL_info[6];
- }
- console.log('MAL url: ' + MAL_url + ' | MAL score: '+ MAL_score );
- */
-
-
- //Poster image
- if(TMDB_id !==0 && TMDB_id!=="error"){
- if(POSTER_img.src !== ""){
- thread.children[0].className="search-project";
- thread.children[0].style.cssText="";
- let dd=document.createElement("dd");
- dd.append(POSTER_img);
- thread.children[0].children[0].before(dd);
- }else{
- thread.children[0].className="search-project";
- thread.children[0].style.cssText="";
- let label_img = document.createElement('label');
- label_img.innerText = "Missing";
- label_img.style.color = "firebrick";
- let dd=document.createElement("dd");
- dd.append(label_img);
- thread.children[0].children[0].before(dd);
- }
- }
-
- //YT Link
- if(TMDB_title !==0){
- YT_link.href = YT_trailer_url;
- YT_link.append(YT_img);
- thread_row.firstChild.before(YT_link);
- }
- //TMDB Link
- if(TMDB_id !==0 && TMDB_id!=="error"){
- if(content==="movie" || content==="movie_cartoon"|| content==="movie_anime") TMDB_link.href = 'https://www.themoviedb.org/movie/' + TMDB_id;
- if(content==="tv" || content==="tv_cartoon"|| content==="serie_anime") TMDB_link.href = 'https://www.themoviedb.org/tv/' + TMDB_id;
- TMDB_link.append(TMDB_img);
- thread_row.firstChild.before(TMDB_link);
- }
- //Season Count
- if(content==="tv" && Seasonscount!==0){
- Seasons_label.innerText=Seasonscount;
- thread_row.append(Seasons_label);
- }
- //IMDB Link
- if(OMDB_info!=='error' && OMDB_info!==0){
- if(IMDB_rating!==0) {IMDB_link.innerText = IMDB_rating.substring(0, IMDB_rating.length - 3);} else {IMDB_link.innerText="N/A"}
- IMDB_link.href = `https://www.imdb.com/title/${IMDB_id}/`;
- thread_row.append(IMDB_img,IMDB_link);
- }
- //MAL Link
- /*
- if(MAL_info!=='error' && MAL_info!==0){
- if(MAL_score!==0) {MAL_link.innerText = MAL_score;} else {MAL_link.innerText="N/A"}
- MAL_link.href = MAL_url;
- thread.children[0].children[2].append(MAL_img, MAL_link);
- }*/
- //RT Link
- if(RT_info!=='error' && RT_info!==0){
- if(RT_rating!==0) {RT_link.innerText = RT_rating;} else {RT_link.innerText ="N/A";}
- RT_link.href = `https://www.rottentomatoes.com${RT_url_delta}/`;
- if(RT_cert===0) {thread_row.append(RT_img,RT_link);}
- if(RT_cert==='fresh') {thread_row.append(RT_fresh_img,RT_link);}
- if(RT_cert==='rotten') {RT_link.style.color="yellowgreen"; thread_row.append(RT_rotten_img,RT_link);}
- }
- //Awards
- if(Awards!==0){
- AWARDS_link.innerText = Awards;
- AWARDS_link.href = "https://www.imdb.com/title/"+IMDB_id+"/awards/"
- thread_row.append(AWARDS_img,AWARDS_link);
- }
- //providers
- if(TMDB_providers !== "error"){
- let tr = document.createElement('div');
-
- let streaming_link = document.createElement('a');
- if(content==="movie" || content==="movie_cartoon"|| content==="movie_anime") streaming_link.href="https://www.themoviedb.org/movie/"+ TMDB_id+"/watch?locale="+country;
- if(content==="tv" || content==="tv_cartoon"|| content==="serie_anime") streaming_link.href="https://www.themoviedb.org/tv/"+ TMDB_id+"/watch?locale="+country
- streaming_link.innerText = "Streaming:"
- streaming_link.style.color = "salmon";
- tr.append(streaming_link);
-
- for(let provider of TMDB_providers){
- let provider_image = document.createElement('img');
- provider_image.style.height='16px';
- provider_image.style.width='16px';
- provider_image.style.marginLeft = '8px';
- provider_image.style.marginTop = '4px';
- //provider_image.style.marginBottom = '8px';
- provider_image.style.borderRadius = '3px';
- provider_image.src = 'https://image.tmdb.org/t/p/w185/' + provider["provider_logo"];
- tr.append(provider_image);
- }
- thread_block.append(tr);
- }
-
-
- }else{ //if no content found in TMDB
- let thread_row = thread.children[0].children[0].children[0].children[0].children[0].children[0];
- if(String(thread_row.children[0].href).includes("unread")) thread_row.removeChild(thread_row.children[0]);
-
- let error_message = document.createElement("label");
- error_message.style.color="firebrick";
- error_message.style.marginLeft = '4px';
- error_message.innerText = "ERR: Title Misspelled/Not Found"
- thread_row.append(error_message);
- }
-
- //reset all data
- thread_title_year=0; OMDB_info=0; RT_info=0; TMDB_id=0; IMDB_id=0; IMDB_title=0; IMDB_year=0; RT_url_delta=0; IMDB_rating=0; RT_rating=0; RT_cert=0; Awards=0, Seasonscount=0;
- }
-
- }
-
- //loop titles
-
-
-
-
- }
-
- main();