Advertisement
Guest User

Untitled

a guest
Oct 4th, 2015
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.07 KB | None | 0 0
  1. //
  2. UserScript
  3.  
  4. // @name Amazon Instans Video Direct links
  5. // @namespace hdbitsamazoniv
  6. // @description Direcet links to video and subtitle for Amazon Instans Video.
  7. // @include *.amazon.com/*
  8. // @include *.amazon.co.uk/*
  9. // @include *.amazon.de/*
  10. // @version 1
  11. // @grant none
  12. //
  13. /UserScript
  14.  
  15.  
  16. // Insert token from https://www.amazon.co.uk/gp/video/streaming/player-token.json?callback=onWebToken
  17. // (change domain for com or de if you need)
  18.  
  19. var token = 'YOUR_TOKEN';
  20.  
  21.  
  22. // Create link
  23. var buttonGet = document.createElement('a');
  24. buttonGet.textContent = 'Get direct links';
  25. buttonGet.href = '#';
  26. buttonGet.setAttribute('id', 'get-direct-links');
  27. document.querySelector('.dv-info').appendChild(buttonGet);
  28.  
  29. // Add Listener
  30. var elmLink = document.getElementById('get-direct-links');
  31. elmLink.addEventListener("click", getDirectLinks, true);
  32.  
  33. // Find links.
  34. function getDirectLinks() {
  35. var data = document.getElementById('dv-web-player');
  36. var attribute = data.getAttribute('data-config');
  37.  
  38. attribute = JSON.parse(attribute);
  39. var customerId = attribute['customerId'];
  40. var marketplaceId = attribute['marketplaceId'];
  41.  
  42. if ((customerId) && (marketplaceId)) {
  43. // Curent item ID.
  44. var canonical = document.querySelector("link[rel='canonical']").getAttribute("href");
  45. canonical = canonical.split('/');
  46. var current_item_id = canonical[canonical.length - 1];
  47.  
  48. if (current_item_id) {
  49. var subDomain = document.domain;
  50. subDomain = (subDomain == 'www.amazon.com') ? 'atv-ps' : 'atv-ps-eu';
  51.  
  52. // Build url.
  53. 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';
  54.  
  55. // Make request.
  56. var xmlHttp = new XMLHttpRequest();
  57. xmlHttp.open("GET", url, false);
  58. xmlHttp.send(null);
  59. var responseText = xmlHttp.responseText;
  60. // Replacements.
  61. responseText = responseText.replace(new RegExp("rtmpe:\/\/",'g'), 'http://');
  62. responseText = responseText.replace(new RegExp("azeufms-vod\/mp4:",'g'), '');
  63. responseText = responseText.replace(new RegExp('mp4\?(.*?)"','g'), 'mp4"');
  64. responseText = responseText.replace('"bitrate":10000', '"bitrate":"1080p (10Mbps)"');
  65. responseText = responseText.replace('"bitrate":6000', '"bitrate":"720p (6Mbps)"');
  66. responseText = responseText.replace('"bitrate":4000', '"bitrate":"720p (4Mbps)"');
  67. responseText = responseText.replace('"bitrate":2500', '"bitrate":"720p (2.5Mbps)"');
  68. responseText = responseText.replace('"bitrate":2000', '"bitrate":"480p (2Mbps)"');
  69. responseText = responseText.replace('"bitrate":1350', '"bitrate":"480p (1.35Mbps)"');
  70. responseText = responseText.replace('"bitrate":900', '"bitrate":"480p (0.9Mbps)"');
  71. responseText = responseText.replace('"bitrate":600', '"bitrate":"480p (0.6Mbps)"');
  72. responseText = responseText.replace('"bitrate":300', '"bitrate":"336p (0.3Mbps)"');
  73. // Contert to object.
  74. responseText = JSON.parse(responseText);
  75.  
  76. if (responseText['message']['body']['urlSets']) {
  77. var urls = responseText['message']['body']['urlSets']['streamingURLInfoSet'][0]['streamingURLInfo'];
  78.  
  79. var div = document.createElement('div');
  80.  
  81. var oneUrl = '';
  82. var index;
  83. // Build links.
  84. for (index = 0; index < urls.length; ++index) {
  85. oneUrl += '<a target="_blank" href="' + urls[index]['url'] + '">' + urls[index]['bitrate'] + '</a>, ';
  86. }
  87. // Box links.
  88. var boxLinks = urls.slice(-1)[0];
  89. if (boxLinks) {
  90. // Page title.
  91. var title = document.getElementById('aiv-content-title');
  92. title = title.innerHTML;
  93. // Remove other tags.
  94. title = title.replace(/<([^ >]+)[^>]*>.*?<\/\1>|<[^\/]+\/>/ig, "");
  95. // Trim.
  96. title = title.replace(/^\s+|\s+$/g, '');
  97.  
  98. // Episode title.
  99. var titleEpisode = document.querySelector('.dv-info > h2');
  100. if (titleEpisode) {
  101. titleEpisode = titleEpisode.innerHTML;
  102. // Remove other tags.
  103. titleEpisode = titleEpisode.replace(/<([^ >]+)[^>]*>.*?<\/\1>|<[^\/]+\/>/ig, "");
  104. // Trim.
  105. titleEpisode = titleEpisode.replace(/^\s+|\s+$/g, '');
  106. titleEpisode = ' - ' + titleEpisode;
  107. }
  108. else {
  109. titleEpisode = '';
  110. }
  111.  
  112. var box = title + titleEpisode + ' - ' + boxLinks['url'];
  113. }
  114. // Remove last comma.
  115. oneUrl = oneUrl.replace(/,\s*$/, "");
  116.  
  117. // Subtitle url.
  118. 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';
  119.  
  120. // Make request.
  121. var xmlHttpSubtitle = new XMLHttpRequest();
  122. xmlHttpSubtitle.open("GET", subtitleUrl, false);
  123. xmlHttpSubtitle.send(null);
  124. var responseSubtilteText = xmlHttpSubtitle.responseText;
  125. // Use .srt for subtitles.
  126. responseSubtilteText = responseSubtilteText.replace('\.dfxp', '.srt');
  127. // Contert to object.
  128. responseSubtilteText = JSON.parse(responseSubtilteText);
  129. if (responseSubtilteText['message']['body']['subtitles']['content']['languages'][0]) {
  130. var subtitles = responseSubtilteText['message']['body']['subtitles']['content']['languages'];
  131. var subtitleUrls = '';
  132. var index;
  133. // Build subtitles links.
  134. for (index = 0; index < subtitles.length; ++index) {
  135. subtitleUrls += '<a target="_blank" href="' + subtitles[index]['url'] + '">' + subtitles[index]['displayName'] + '</a>, ';
  136. }
  137. // Remove last comma
  138. subtitleUrls = subtitleUrls.replace(/,\s*$/, "");
  139.  
  140. subtitleUrls = '<br />Download subtitles: <br />' + subtitleUrls;
  141. }
  142.  
  143. if (subtitleUrls) {
  144. oneUrl += subtitleUrls;
  145. }
  146. div.innerHTML = "Download video: <br />" + oneUrl;
  147. // Add links to page.
  148. document.querySelector('.dv-info').appendChild(div);
  149.  
  150. // Textarea with info and link.
  151. var input = document.createElement("textarea");
  152. input.name = "post";
  153. input.maxLength = "5000";
  154. input.cols = "80";
  155. input.rows = "3";
  156. input.value = box;
  157. document.querySelector('.dv-info').appendChild(input);
  158. }
  159. else {
  160. var error = document.createElement("div");
  161. error.innerHTML = 'Links not found.';
  162. document.querySelector('.dv-info').appendChild(error);
  163. }
  164. }
  165. }
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement