IMDB Video Player

Add video player from vidsrc.cc directly into IMDB movie/series webpage.

// ==UserScript==
// @name         IMDB Video Player
// @version      1.0.0
// @description  Add video player from vidsrc.cc directly into IMDB movie/series webpage.
// @author       M4X1MUS07
// @license      MIT
// @match        https://www.imdb.com/title/*
// @match        https://m.imdb.com/title/*
// @icon         https://m.media-amazon.com/images/G/01/imdb/images-ANDW73HA/favicon_desktop_32x32._CB1582158068_.png
// @grant        GM_xmlhttpRequest
// @connect      imdb.com
// @connect      m.imdb.com
// @connect      vidsrc.cc
// @connect      api.themoviedb.org
// @namespace https://greasyfork.org/users/1381554
// ==/UserScript==

(function() {
    "use strict";

    // Utility function to log errors
    const logError = (error) => console.error(`Error: ${error.message || error}`);

    // Extract IMDB id from the URL
    const imdbID = getImdbIdFromURL();
    if (!imdbID) {
        return logError('Invalid IMDB URL: Could not extract IMDB ID');
    }

    // Determine if it's a series or a movie and act accordingly
    if (document.title.includes("Series")) {
        handleSeries(imdbID);
    } else {
        handleMovie(imdbID);
    }

    // Function to extract IMDB ID from the current URL
    function getImdbIdFromURL() {
        const urlParts = document.URL.split("/");
        return urlParts[4] || null;
    }

    // Function to handle series page logic
    function handleSeries(imdbID) {
        getTmdbIDForSeries(imdbID).then((tmdbId) => {
            if (tmdbId) {
                insertPlayer("tv", tmdbId);
            } else {
                logError("TMDB ID for the series could not be retrieved.");
            }
        }).catch(logError);
    }

    // Function to handle movie page logic
    function handleMovie(imdbID) {
        insertPlayer("movie", imdbID);
    }

    // Fetch TMDB ID for series using IMDB ID
    function getTmdbIDForSeries(imdbID) {
        return new Promise((resolve, reject) => {
            const apiKey = '8d6d91941230817f7807d643736e8a49'; // this is a public api key
            const url = `https://api.themoviedb.org/3/find/${imdbID}?api_key=${apiKey}&language=en-US&external_source=imdb_id`;

            GM_xmlhttpRequest({
                method: "GET",
                url: url,
                onload: (response) => {
                    try {
                        const result = JSON.parse(response.responseText);
                        const tmdbID = result.tv_results?.[0]?.id || null;
                        resolve(tmdbID);
                    } catch (error) {
                        reject(`Failed to parse TMDB response: ${error}`);
                    }
                },
                onerror: (error) => reject(`Network error: ${error.statusText || error}`)
            });
        });
    }

    // Common function to insert the video player into the IMDB page
    function insertPlayer(type, id) {
        const playerUrl = `https://vidsrc.cc/v2/embed/${type}/${id}`;
        const iframe = createIframe(playerUrl);

        const targetLocation = document.querySelector("main");
        if (targetLocation) {
            targetLocation.before(iframe);
            console.log(`Player embedded for ${type === "tv" ? "Series" : "Movie"}`);
        } else {
            logError("Target location for player insertion not found on the page");
        }
    }

    // Helper function to create an iframe for embedding the video player
    function createIframe(src) {
        const iframe = document.createElement("iframe");
        iframe.style.height = "800px";
        iframe.style.width = "100%";
        iframe.style.margin = "0 auto";
        iframe.id = "vidsrc";
        iframe.src = src;
        iframe.allowFullscreen = true;
        iframe.setAttribute("webkitallowfullscreen", "true");
        iframe.setAttribute("mozallowfullscreen", "true");
        return iframe;
    }
})();