Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- UserScript
- // @name Amazon Instans Video Direct links
- // @namespace hdbitsamazoniv
- // @description Direcet links to video and subtitle for Amazon Instans Video.
- // @include *.amazon.com/*
- // @include *.amazon.co.uk/*
- // @include *.amazon.de/*
- // @version 1
- // @grant none
- //
- /UserScript
- // Insert token from https://www.amazon.co.uk/gp/video/streaming/player-token.json?callback=onWebToken
- // (change domain for com or de if you need)
- var token = 'YOUR_TOKEN';
- // Create link
- var buttonGet = document.createElement('a');
- buttonGet.textContent = 'Get direct links';
- buttonGet.href = '#';
- buttonGet.setAttribute('id', 'get-direct-links');
- document.querySelector('.dv-info').appendChild(buttonGet);
- // Add Listener
- var elmLink = document.getElementById('get-direct-links');
- elmLink.addEventListener("click", getDirectLinks, true);
- // Find links.
- function getDirectLinks() {
- var data = document.getElementById('dv-web-player');
- var attribute = data.getAttribute('data-config');
- attribute = JSON.parse(attribute);
- var customerId = attribute['customerId'];
- var marketplaceId = attribute['marketplaceId'];
- if ((customerId) && (marketplaceId)) {
- // Curent item ID.
- var canonical = document.querySelector("link[rel='canonical']").getAttribute("href");
- canonical = canonical.split('/');
- var current_item_id = canonical[canonical.length - 1];
- if (current_item_id) {
- var subDomain = document.domain;
- subDomain = (subDomain == 'www.amazon.com') ? 'atv-ps' : 'atv-ps-eu';
- // Build url.
- var url = 'https://' + subDomain + '.amazon.com/cdp/catalog/GetStreamingUrlSets?customerID=' + customerId + '&deviceTypeID=A324MFXUEZFF7B&xws-fa-ov=true&deviceID=1&token=' + token + '&marketplaceID=' + marketplaceId + '&version=1&format=json&asin=' + current_item_id + '&firmware=WIN%2017,0,0,188%20PlugIn';
- // Make request.
- var xmlHttp = new XMLHttpRequest();
- xmlHttp.open("GET", url, false);
- xmlHttp.send(null);
- var responseText = xmlHttp.responseText;
- // Replacements.
- responseText = responseText.replace(new RegExp("rtmpe:\/\/",'g'), 'http://');
- responseText = responseText.replace(new RegExp("azeufms-vod\/mp4:",'g'), '');
- responseText = responseText.replace(new RegExp('mp4\?(.*?)"','g'), 'mp4"');
- responseText = responseText.replace('"bitrate":10000', '"bitrate":"1080p (10Mbps)"');
- responseText = responseText.replace('"bitrate":6000', '"bitrate":"720p (6Mbps)"');
- responseText = responseText.replace('"bitrate":4000', '"bitrate":"720p (4Mbps)"');
- responseText = responseText.replace('"bitrate":2500', '"bitrate":"720p (2.5Mbps)"');
- responseText = responseText.replace('"bitrate":2000', '"bitrate":"480p (2Mbps)"');
- responseText = responseText.replace('"bitrate":1350', '"bitrate":"480p (1.35Mbps)"');
- responseText = responseText.replace('"bitrate":900', '"bitrate":"480p (0.9Mbps)"');
- responseText = responseText.replace('"bitrate":600', '"bitrate":"480p (0.6Mbps)"');
- responseText = responseText.replace('"bitrate":300', '"bitrate":"336p (0.3Mbps)"');
- // Contert to object.
- responseText = JSON.parse(responseText);
- if (responseText['message']['body']['urlSets']) {
- var urls = responseText['message']['body']['urlSets']['streamingURLInfoSet'][0]['streamingURLInfo'];
- var div = document.createElement('div');
- var oneUrl = '';
- var index;
- // Build links.
- for (index = 0; index < urls.length; ++index) {
- oneUrl += '<a target="_blank" href="' + urls[index]['url'] + '">' + urls[index]['bitrate'] + '</a>, ';
- }
- // Box links.
- var boxLinks = urls.slice(-1)[0];
- if (boxLinks) {
- // Page title.
- var title = document.getElementById('aiv-content-title');
- title = title.innerHTML;
- // Remove other tags.
- title = title.replace(/<([^ >]+)[^>]*>.*?<\/\1>|<[^\/]+\/>/ig, "");
- // Trim.
- title = title.replace(/^\s+|\s+$/g, '');
- // Episode title.
- var titleEpisode = document.querySelector('.dv-info > h2');
- if (titleEpisode) {
- titleEpisode = titleEpisode.innerHTML;
- // Remove other tags.
- titleEpisode = titleEpisode.replace(/<([^ >]+)[^>]*>.*?<\/\1>|<[^\/]+\/>/ig, "");
- // Trim.
- titleEpisode = titleEpisode.replace(/^\s+|\s+$/g, '');
- titleEpisode = ' - ' + titleEpisode;
- }
- else {
- titleEpisode = '';
- }
- var box = title + titleEpisode + ' - ' + boxLinks['url'];
- }
- // Remove last comma.
- oneUrl = oneUrl.replace(/,\s*$/, "");
- // Subtitle url.
- var subtitleUrl = 'https://' + subDomain + '.amazon.com/cdp/catalog/GetSubtitleUrls?customerID=' + customerId + '&deviceTypeID=A13Q6A55DBZB7M&NumberOfResults=1&deviceID=1&token=' + token + '&videoType=content&marketplaceID=' + marketplaceId + '&version=2&format=json&asin=' + current_item_id + '&firmware=WIN%2017,0,0,188%20PlugIn';
- // Make request.
- var xmlHttpSubtitle = new XMLHttpRequest();
- xmlHttpSubtitle.open("GET", subtitleUrl, false);
- xmlHttpSubtitle.send(null);
- var responseSubtilteText = xmlHttpSubtitle.responseText;
- // Use .srt for subtitles.
- responseSubtilteText = responseSubtilteText.replace('\.dfxp', '.srt');
- // Contert to object.
- responseSubtilteText = JSON.parse(responseSubtilteText);
- if (responseSubtilteText['message']['body']['subtitles']['content']['languages'][0]) {
- var subtitles = responseSubtilteText['message']['body']['subtitles']['content']['languages'];
- var subtitleUrls = '';
- var index;
- // Build subtitles links.
- for (index = 0; index < subtitles.length; ++index) {
- subtitleUrls += '<a target="_blank" href="' + subtitles[index]['url'] + '">' + subtitles[index]['displayName'] + '</a>, ';
- }
- // Remove last comma
- subtitleUrls = subtitleUrls.replace(/,\s*$/, "");
- subtitleUrls = '<br />Download subtitles: <br />' + subtitleUrls;
- }
- if (subtitleUrls) {
- oneUrl += subtitleUrls;
- }
- div.innerHTML = "Download video: <br />" + oneUrl;
- // Add links to page.
- document.querySelector('.dv-info').appendChild(div);
- // Textarea with info and link.
- var input = document.createElement("textarea");
- input.name = "post";
- input.maxLength = "5000";
- input.cols = "80";
- input.rows = "3";
- input.value = box;
- document.querySelector('.dv-info').appendChild(input);
- }
- else {
- var error = document.createElement("div");
- error.innerHTML = 'Links not found.';
- document.querySelector('.dv-info').appendChild(error);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement