Uni FM96.7 Player Updater

產生下載連結,修改 Flash Player 為 HTML5 內鍵撥放器

  1. // ==UserScript==
  2. // @name Uni FM96.7 Player Updater
  3. // @name:zh-TW FM96.7 環宇廣播電台線上收聽播放器調整
  4. // @namespace http://www.twsiyuan.com/
  5. // @version 0.4
  6. // @description:zh-TW 產生下載連結,修改 Flash Player 為 HTML5 內鍵撥放器
  7. // @author Siyuan
  8. // @match http://www.uni967.com/newweb/AOD*
  9. // @match http://www.uni967.com/newweb/index.php*
  10. // @grant none
  11. // @require http://code.jquery.com/jquery-latest.js
  12. // @description 產生下載連結,修改 Flash Player 為 HTML5 內鍵撥放器
  13. // ==/UserScript==
  14.  
  15. $(document).ready(function() {
  16. if (window.location.pathname.toString().startsWith('/newweb/AOD2_no')) {
  17. doPlayer();
  18. } else {
  19. doTable();
  20. }
  21. });
  22.  
  23. var analysisCallback = function(embed, url, callback) {
  24. if (!embed) {
  25. return;
  26. }
  27. var flashvars = embed.attr("flashvars");
  28. if (!flashvars) {
  29. return;
  30. }
  31. // 音源位置
  32. var vars = /son=([^&]+)/.exec(flashvars);
  33. if (!vars){
  34. return;
  35. }
  36.  
  37. var audioUrl = vars[1];
  38.  
  39. // 節目資料網頁位置
  40. var ids = /ID=([0-9]+)$/.exec(url);
  41. if (!ids){
  42. return;
  43. }
  44. var id = ids[1];
  45. var dataUrl = "http://www.uni967.com/newweb/index.php?menu=2&page=2_1&ID=" + id;
  46.  
  47. $.get(dataUrl, function(data) {
  48. // 分析資料網頁,抓取節目名稱
  49. var title = $(data).find("span.news_title_blue").text();
  50.  
  51. callback(audioUrl, title);
  52. });
  53. };
  54.  
  55. var doPlayer = function() {
  56. var embed = $("embed");
  57. analysisCallback(embed, window.location.href, function(audioUrl, title) {
  58. // 產生下載連結
  59. var download = $('<a href="' + audioUrl + '" download="' + title + '">Download (' + title + ')</a>');
  60.  
  61. // 產生音源播放 (HTML5 標準)
  62. var paramSaveName = "ui967Volume";
  63. var volumeChanged = "if(typeof(Storage) !== 'undefined'){localStorage.setItem('" + paramSaveName + "', this.volume);}";
  64. var loadStart = "if(typeof(Storage) !== 'undefined'){this.volume=localStorage.getItem('" + paramSaveName + "');}";
  65. var playbackRateChanged = "var a = document.getElementById('audioPlayer'); a.playbackRate = this.value;";
  66. var player = $('<audio controls="true" autoplay="true" playbackRate="1.0" src="' + audioUrl + '" onvolumechange="javascript:' + volumeChanged + '" onloadstart="javascript:' + loadStart + '" style="width:100%;" id="audioPlayer">Your browser does not support the audio tag.</audio>');
  67. var playbackRate = $('<select onchange="javascript:' + playbackRateChanged + '"><option value="0.5">x 0.5</option><option value="0.6">x 0.6</option><option value="0.7">x 0.7</option><option value="0.8">x 0.8</option><option value="0.9">x 0.9</option><option value="1.0" selected="true">x 1.0</option><option value="1.1">x 1.1</option><option value="1.2">x 1.2</option><option value="1.3">x 1.3</option><option value="1.4">x 1.4</option><option value="1.5">x 1.5</option><option value="1.6">x 1.6</option><option value="1.7">x 1.7</option><option value="1.8">x 1.8</option><option value="1.9">x 1.9</option><option value="2.0">x 2.0</option></select>');
  68. var parent = embed.parent();
  69. parent.append(player);
  70. parent.append(playbackRate);
  71. parent.append(download);
  72.  
  73. embed.remove();
  74. });
  75. };
  76.  
  77. var doTable = function() {
  78. var links = $("a");
  79. links.each(function(){
  80. var link = $(this);
  81. var onclick = link.attr('onclick');
  82. if (onclick) {
  83. var arr = /window.open\('([^']+)'/.exec(onclick);
  84. if (arr) {
  85. var uri = arr[1];
  86. var dataUrl = "http://www.uni967.com/newweb/" + uri;
  87.  
  88. $.get(dataUrl, function(data) {
  89. var embed = /<embed(.+)<\/embed>/.exec(data);
  90. if (embed) {
  91. analysisCallback($(embed[0]), dataUrl, function(audioUrl, title) {
  92. var parent = link.parent();
  93. var download = $('<a href="' + audioUrl + '" download="' + title + '">下載</a>');
  94.  
  95. parent.append($('<br/>'));
  96. parent.append(download);
  97. });
  98. }
  99. });
  100. }
  101. }
  102. });
  103. };