豆瓣电影自定义搜索

利用Google自定义搜索引擎给豆瓣电影加上下载链接

  1. // ==UserScript==
  2. // @name Movie CSE for douban
  3. // @name:zh-CN 豆瓣电影自定义搜索
  4. // @namespace http://www.einverne.tk
  5. // @version 1.3
  6. // @description find useful movie download link from Google Custom Search Engine
  7. // @description:zh-cn 利用Google自定义搜索引擎给豆瓣电影加上下载链接
  8. // @match http://movie.douban.com/subject/*
  9. // @copyright 2014+, einverne
  10. // ==/UserScript==
  11.  
  12. (function () {
  13. var nextpage_index = 0;
  14. var url;
  15. var keyword2;
  16. var cx = "013193653470345952139:rmavzl75vbq";
  17. var CSEFunction = function () {
  18. console.log("CSEFunction");
  19. var douban_url = this.location.href;
  20. var reg = /(\d{7,8})/g; //正則
  21. var douban_id = douban_url.match(reg); //獲取movie id
  22. var title = $('html head title').text();
  23. var keyword1 = title.replace('(豆瓣)', '').trim();
  24. keyword2 = encodeURIComponent(keyword1);
  25. var html_title_start = '<div id="movie_cse"><div class="da3" style="margin-bottom:0px;padding-bottom: 5px;"><h2 style="margin: 0">可下载的资源&nbsp; ·&nbsp;·&nbsp;<span class="pl">共有'
  26. var html_title_end = '条结果 (<a href="http://www.google.com/cse?cx=' + cx + '&q=' + keyword2 + '#gsc.tab=0&gsc.q=' + keyword2 + '&gsc.page=1" target="_blank">全部</a>)</h2></span></div>';
  27. var html_body_start = '<div class="indent csecontent" id="db-doulist-section" style="padding-left:5px;padding-right:5px;margin:0;border:1px #F4F4EC solid;"><ul class="bs">';
  28. var html_body_yes = '';
  29. var html_body_no = '<li>没有找到相关资源,手动去<a href="http://www.google.com/cse?cx=' + cx + '&q=' + keyword2 + '#gsc.tab=0&gsc.q=' + keyword2 + '&gsc.page=1" target="_blank">搜索</a></li>';
  30. var html_body_error = '<li>每日调用次数过多,手动去<a href="http://www.google.com/cse?cx=' + cx + '&q=' + keyword2 + '#gsc.tab=0&gsc.q=' + keyword2 + '&gsc.page=1" target="_blank">搜索</a></li>';
  31. var html_body_end = '</ul></div>';
  32. var html_body_nextpage = '<div class="indent" id="db-doubanlist-section" style="text-align: left; padding: 5px 5px 5px 10px;margin: 0"><button value="下一页" id="nextPageButton">下一页</button><span id="pager" style="float: right;padding-right: 10px;">第1页</span></b>';
  33. var html_body_morelinks = 'More on <a href="http://btdigg.org/search?q='+keyword2+'" target="_blank">BTDigg</a> <a href="http://movie.doubanpi.com/subject/'+douban_id+'" target="_blank">豆瓣皮</a> <a href="https://www.google.com/search?q='+keyword2+'%20下载" target="_blank">Google</a> ';
  34. var html_body_endmore = '<div padding:5px 10px 5px 0px;">'+html_body_morelinks+'<div style="text-align:right"><a href="http://www.einverne.tk/2013/10/movie-cse-for-douban.html" target="_blank">反馈</a></div></div>';
  35. var html_body_endend = '</div></div>';
  36. url = 'https://www.googleapis.com/customsearch/v1?key=AIzaSyAEPLlfl_OvTjYXc_-Vv7oKKVaBYEfl1kA&cx=013193653470345952139:rmavzl75vbq&alt=json&q=' + keyword2;
  37. var length = 30;
  38. $.ajax({
  39. type:'GET',
  40. //HTTP請求方法
  41. dataType:'json',
  42. //一旦獲取到數據,立刻當做腳本執行
  43. url:url,
  44. //獲取數據url
  45. success:function (data) {
  46. if (data.queries.request[0].totalResults > 0) {
  47. var totalResults = data.queries.request[0].totalResults;
  48. var html_title = html_title_start + totalResults + html_title_end;
  49. nextpage_index = data.queries.nextPage[0].startIndex;
  50. var items = data.items;
  51. for (var i = 0; i < items.length; i++) {
  52. var title = items[i].title;
  53. var link = items[i].link;
  54. html_body_yes += '<li><a href="' + link + '?from=douban" title="' + title + '" target="_blank">' + title + '</a></li>';
  55. }
  56. $('.aside').prepend(html_title + html_body_start + html_body_yes + html_body_end + html_body_nextpage + html_body_endmore + html_body_endend);
  57. var b_nextpage = document.getElementById("nextPageButton");
  58. b_nextpage.addEventListener('click', nextPage, false);
  59. } else {
  60. $('.aside').prepend(html_title + html_body_start + html_body_no + html_body_end + html_body_endend);
  61. }
  62. },
  63. error:function (jqXHR, textStatus, errorThrown) {
  64. //console.log("error"+jqXHR.status+textStatus+errorThrown);
  65. //jqXHR.responseText.message
  66. $('.aside').prepend(html_title_start + "0" + html_title_end + html_body_start + html_body_error + html_body_end + html_body_endmore + html_body_endend);
  67. }
  68. });
  69.  
  70. function nextPage() {
  71. console.log("nextPage" + nextpage_index);
  72. html_body_yes = "";
  73. url = 'https://www.googleapis.com/customsearch/v1?key=AIzaSyAEPLlfl_OvTjYXc_-Vv7oKKVaBYEfl1kA&cx=013193653470345952139:rmavzl75vbq&alt=json&q=' + keyword2 + '&start=' + nextpage_index;
  74. $.ajax({
  75. type:'GET',
  76. //HTTP請求方法
  77. dataType:'json',
  78. //一旦獲取到數據,立刻當做腳本執行
  79. url:url,
  80. //獲取數據url
  81. success:function (data) {
  82. console.log("success");
  83. var pager = document.getElementById("pager");
  84. pager.innerHTML = "第" + Math.floor(nextpage_index / 10 + 1) + "页";
  85. if (data.queries.request[0].count > 0) {
  86. nextpage_index = data.queries.nextPage[0].startIndex;
  87. var items = data.items;
  88. for (var i = 0; i < items.length; i++) {
  89. var title = items[i].title;
  90. var link = items[i].link;
  91. html_body_yes += '<li><a href="' + link + '?from=douban" title="' + title + '" target="_blank">' + title + '</a></li>';
  92. }
  93. var html_body = html_body_start + html_body_yes + html_body_end;
  94. $("#movie_cse>.csecontent").replaceWith(html_body);
  95. //$('.aside').prepend(html_title + html_body_start + html_body_yes + html_body_end + html_body_endmore + html_body_endend);
  96. } else {
  97. //$('.aside').prepend(html_title + html_body_start + html_body_no + html_body_end + html_body_endend);
  98. }
  99. }
  100. });
  101. }
  102. }
  103.  
  104. function contentEval(source) {
  105. console.log("contentEval");
  106. // Check for function input.
  107. if ('function' == typeof source) {
  108. // Execute this function with no arguments, by adding parentheses.
  109. // One set around the function, required for valid syntax, and a
  110. // second empty set calls the surrounded function.
  111. source = '(' + source + ')();'
  112. }
  113.  
  114. // Create a script node holding this source code.
  115. var script = document.createElement('script');
  116. script.setAttribute("type", "application/javascript");
  117. script.textContent = source;
  118.  
  119. // Insert the script node into the page, so it will run, and immediately
  120. // remove it to clean up.
  121. document.body.appendChild(script);
  122. document.body.removeChild(script);
  123. }
  124.  
  125. contentEval(CSEFunction());
  126. }());

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址