NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name TVmaze - Link Press Sites // @namespace TVmaze // @version 1.01 // @description Add a link to press sites on show page // @author gazza911 // @match https://www.tvmaze.com/shows/*/* // @match https://www.tvmaze.com/news/create* // @match https://www.tvmaze.com/news/update* // @updateURL https://openuserjs.org/meta/gazza911/TVmaze_-_Link_Press_Sites.meta.js // @grant GM_getValue // @grant GM_setValue // @license MIT // ==/UserScript== const thisVersion = "1.01"; var permalinks = GM_getValue("tvmaze_pressSites", {}), defaults = { "United States": { "ABC": { urls: ["https://www.wdtvpress.com/abc/shows/{show-hyphenated-name}"], validate: true, allowRedirects: true }, "Animal Planet": { urls: ["https://press.discovery.com/us/apl/programs/{show-hyphenated-name}/", "https://press.discovery.com/us/search/?q={show-name}"], validate: true, allowRedirects: true }, "Bravo": { urls: ["https://www.nbcumv.com/programming/bravo/{show-hyphenated-name}", "https://www.nbcumv.com/search/results?f1[]=33132&term={show-name}"], validate: true, allowRedirects: true }, "CBS": { urls: ["https://www.viacomcbspressexpress.com/cbs-entertainment/releases?show={show-hyphenated-name}", "https://www.viacomcbspressexpress.com/cbs-entertainment/releases?q={show-name}"], validate: true, allowRedirects: true }, "Comedy Central": { urls: ["https://press.cc.com/series/{show-hyphenated-name}", "https://press.cc.com/search/{show-name}"], validate: true, allowRedirects: false }, "Cooking Channel": { urls: ["https://press.discovery.com/us/cook/programs/{show-hyphenated-name}/", "https://press.discovery.com/us/search/?q={show-name}"], validate: true, allowRedirects: true }, "Discovery Channel": { urls: ["https://press.discovery.com/us/dsc/programs/{show-hyphenated-name}/", "https://press.discovery.com/us/search/?q={show-name}", "https://corporate.discovery.com/?search={show-name}"], validate: true, allowRedirects: true }, "Disney Channel": { urls: ["https://www.wdtvpress.com/disneychannel/shows/{show-hyphenated-name}"], validate: true, allowRedirects: true }, "DIY Network": { urls: ["https://press.discovery.com/us/diy/programs/{show-hyphenated-name}/", "https://press.discovery.com/us/search/?q={show-name}"], validate: true, allowRedirects: true }, "E!": { urls: ["https://www.nbcumv.com/programming/e-entertainment/{show-hyphenated-name}", "https://www.nbcumv.com/search/results?f1[]=33136&term={show-name}"], validate: true, allowRedirects: true }, "Food Network": { urls: ["https://press.discovery.com/us/food/programs/{show-hyphenated-name}/", "https://press.discovery.com/us/search/?q={show-name}"], validate: true, allowRedirects: true }, "FOX": { urls: ["https://www.foxflash.com/shows/{show-hyphenated-name}/releases/", "https://www.foxflash.com/search?type=releases&q={show-name}"], validate: true, allowRedirects: true }, "Hallmark Channel": { urls: ["https://www.crownmediapress.com/Search?keyword={show-name}&SiteID=142&NodeID=144"], validate: true, allowRedirects: true }, "HGTV": { urls: ["https://press.discovery.com/us/hgtv/programs/{show-hyphenated-name}/", "https://press.discovery.com/us/search/?q={show-name}"], validate: true, allowRedirects: true }, "Hulu": { urls: ["https://www.hulu.com/press/show/{show-hyphenated-name}/", "https://www.hulu.com/press/show/"], validate: true, allowRedirects: true }, "National Geographic Channel": { urls: ["https://www.natgeotvpressroom.com/index/searchResults?sort=name&search[keywords]={show-name}&search[exact]=exact&search[section]=title&limit=20"], validate: false, allowRedirects: true }, "NBC": { urls: ["https://www.nbcumv.com/programming/nbc-entertainment/{show-hyphenated-name}", "https://www.nbcumv.com/search/results?f1[]=33129&term={show-name}"], validate: true, allowRedirects: true }, "Oprah Winfrey Network": { urls: ["https://press.discovery.com/us/own/programs/{show-hyphenated-name}/", "https://press.discovery.com/us/search/?q={show-name}"], validate: true, allowRedirects: true }, "Oxygen": { urls: ["https://www.nbcumv.com/programming/oxygen-media/{show-hyphenated-name}", "https://www.nbcumv.com/search/results?f1[]=33140&term={show-name}"], validate: true, allowRedirects: true }, "Paramount Network": { urls: ["https://www.paramountnetwork.com/press/shows/{show-hyphenated-name}/", "https://www.paramountnetwork.com/press/?s={show-name}"], validate: true, allowRedirects: true }, "Science": { urls: ["https://press.discovery.com/us/sci/programs/{show-hyphenated-name}/", "https://press.discovery.com/us/search/?q={show-name}"], validate: true, allowRedirects: true }, "Smithsonian Channel": { urls: ["https://www.smithsonianchannel.com/press"], validate: false, allowRedirects: true }, "SyFy": { urls: ["https://www.nbcumv.com/programming/syfy/{show-hyphenated-name}", "https://www.nbcumv.com/search/results?f1[]=33143&term={show-name}"], validate: true, allowRedirects: true }, "Telemundo": { urls: ["https://www.nbcumv.com/programming/telemundo/{show-hyphenated-name}", "https://www.nbcumv.com/search/results?f1[]=33144&term={show-name}"], validate: true, allowRedirects: true }, "The CW": { urls: ["https://www.cwtvpr.com/the-cw/releases?show={show-hyphenated-name}", "https://www.cwtvpr.com/the-cw/releases?q={show-name}"], validate: true, allowRedirects: true }, "TLC": { urls: ["https://press.discovery.com/us/tlc/programs/{show-hyphenated-name}/", "https://press.discovery.com/us/search/?q={show-name}"], validate: true, allowRedirects: true }, "Travel Channel": { urls: ["https://press.discovery.com/us/trv/programs/{show-hyphenated-name}/", "https://press.discovery.com/us/search/?q={show-name}"], validate: true, allowRedirects: true }, "USA Network": { urls: ["https://www.nbcumv.com/programming/usa-network/{show-hyphenated-name}", "https://www.nbcumv.com/search/results?f1[]=33145&term={show-name}"], validate: true, allowRedirects: true } }, "United Kingdom": { "Channel 4": { urls: ["https://www.channel4.com/press/content-search?search={show-name}"], validate: false, allowRedirects: true }, "Comedy Central": { urls: ["https://press.cc.com/series/{show-hyphenated-name}", "https://press.cc.com/search/{show-name}"], validate: true, allowRedirects: false } }, "Global": { "Netflix": { urls: ["https://media.netflix.com/en/search?term={show-name}"], validate: false, allowRedirects: true }, }, "Mappings": { "United Kingdom": { "BBC[\\s\\w]+": { urls: ["https://www.bbc.co.uk/mediacentre/search?lang=en&term={show-name}&search=Search"], validate: false, allowRedirects: true }, "ITV(\\d|\\s[\\s\\w]+)": { urls: ["https://www.itv.com/presscentre/search/site/{show-name}"], validate: false, allowRedirects: true }, "Sky (1|Arts|Atlantic|Cinema([\\s\\w])*|Crime|Movies([\\s\\w])*|News([\\s\\w])*|Sports([\\s\\w])*)": { urls: ["https://www.skygroup.sky/corporate/media-centre?search={show-name}"], validate: false, allowRedirects: true } }, "United States": { "Adult Swim|Boomerang|Cartoon Network|TBS|TNT": { urls: ["https://pressroom.warnermediagroup.com/us/search?search_api_fulltext={show-name}&type=media_release"], validate: false, allowRedirects: true }, "Nick Jr.|Nickelodeon|Nicktoons": { urls: ["https://www.nickpress.com/series/{show-hyphenated-name}", "https://www.nickpress.com/search/{show-name}"], validate: true, allowRedirects: true } } } }, version = GM_getValue("tvmaze_pressSites_version", ""); if(Object.keys(permalinks).length === 0) { permalinks = Object.assign({}, defaults); } if(version.length > 0 && version !== thisVersion) { //No editing logic yet, so always force refresh reset("", true); } GM_setValue("tvmaze_pressSites_version", thisVersion); setLinks(); function setLinks() { if (window.location.pathname.search("/news/") === 0) { var curPage = $("ul.breadcrumbs a:eq(2)").attr("href"); var id = curPage.split("/")[2]; $.get("https://api.tvmaze.com/shows/" + id, function(data) { var uri = data.url; var show = data.name; uri = uri.substring(uri.lastIndexOf("/") + 1); if (data.network) { getPress(data.network.country.name, data.network.name, show, uri, $(".field-news-url label")); } if (data.webChannel) { var country = data.webChannel.country; var countryName = ""; if (country) { countryName = country.name; } getPress(country, data.webChannel.name, show, uri, $(".field-news-url label")); } }); } else { $("#general-info-panel > div[class!='action-buttons-dropdown']").each(function(index, row) { checkRow(row); }); } } async function checkRow(row) { var attrName = $(row).children("strong").text(); if (attrName === "Network: " || attrName === "Web channel: ") { var entity = $(row).find("a").text(); var $country = $(row).find("img"); var countryName = ""; if ($country.length === 1) { countryName = $country.attr("title"); if (countryName.length > 0) { countryName = countryName.trim(); } } var uri = window.location.pathname; uri = uri.substring(uri.lastIndexOf("/") + 1); await getPress(countryName, entity, $("header.columns h1").text(), uri, $("#general-info-panel div:last")); return; } } async function checkUrl(url, allowRedirect) { return $.ajax({ method: "GET", dataType: "JSONP", url: url }).then(function(xhr) { if (allowRedirect || xhr.status !== 302) { return true; } }).catch(function(err) { if (err.status === 200 || (allowRedirect && err.status === 302)) { //Browser rejects, but server returned success return true; } return false; }); } async function getPress(countryName, entity, showName, showHyphenatedName, $pressArea) { var countryLinks = permalinks[(countryName.length > 0) ? countryName : "Global"] || {}; var pressSites = { urls: [] }; if (Object.keys(countryLinks).length > 0) { pressSites = countryLinks[entity] || { urls: [] }; } if (pressSites.urls.length === 0) { //check any regex mappings countryLinks = permalinks.Mappings[(countryName.length > 0) ? countryName : "Global"] || {}; if (Object.keys(countryLinks).length > 0) { for (const [key, val] of Object.entries(countryLinks)) { var regex = new RegExp("^" + key + "$"); if (regex.test(entity)) { pressSites = val; break; } } } } var found = false; for (var i = 0; i < pressSites.urls.length; i++) { var pressSite = pressSites.urls[i]; if (pressSite && pressSite.length > 0) { pressSite = pressSite.replace("{show-name}", encodeURI(showName)); pressSite = pressSite.replace("{show-hyphenated-name}", showHyphenatedName); if (pressSites.validate) { var xhr = await checkUrl(pressSite, pressSites.allowRedirects); found = (xhr === true); } else { found = true; } if (found) { $pressArea.append(" <a href='" + pressSite + "' target='_blank'>(Press)</a>"); break; } } } } function reset(message, force) { var perform; if (force) { perform = true; } else { perform = confirm(message.length > 0 ? message : "Are you sure that you want to reset the permalink formats? You will loose any custom formats"); } if (perform) { permalinks = Object.assign({}, defaults); GM_setValue("tvmaze_pressSites", permalinks); } }