Script Finder 油猴脚本查找

Script Finder 在任何网站上找到适用于该网站的greasyfork油猴脚本

当前为 2023-08-01 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Script Finder
  3. // @name:zh-CN Script Finder 油猴脚本查找
  4. // @namespace http://tampermonkey.net/
  5. // @version 0.1.4
  6. // @description Script Finder allows you to find userscripts from greasyfork on any website.
  7. // @description:zh-CN Script Finder 在任何网站上找到适用于该网站的greasyfork油猴脚本
  8. // @author shiquda
  9. // @namespace https://github.com/shiquda/shiquda_UserScript
  10. // @supportURL https://github.com/shiquda/shiquda_UserScript/issues
  11. // @match *://*/*
  12. // @icon data:image/jpeg;base64,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
  13. // @grant GM_xmlhttpRequest
  14. // @grant GM_addStyle
  15. // @license AGPL-3.0
  16. // ==/UserScript==
  17.  
  18. (function () {
  19. const domainParts = window.location.hostname.split('.').slice(-2);
  20. const domain = domainParts.join('.');
  21. const errorMessage = "Failed to retrieve script information or there are no available scripts for this domain.";
  22.  
  23. function getScriptsInfo(domain) {
  24.  
  25. var url = `https://greasyfork.org/scripts/by-site/${domain}?filter_locale=0`;
  26. GM_xmlhttpRequest({
  27. method: "GET",
  28. url: url,
  29. onload: (response) => {
  30.  
  31. const parser = new DOMParser();
  32. const doc = parser.parseFromString(response.responseText, "text/html");
  33. const scripts = doc.querySelector("#browse-script-list")?.querySelectorAll('[data-script-id]');
  34. let scriptsInfo = [];
  35. if (!scripts) {
  36. scriptsInfo = errorMessage
  37. } else {
  38. for (var i = 0; i < scripts.length; i++) {
  39. scriptsInfo.push(parseScriptInfo(scripts[i]));
  40. }
  41. }
  42. console.log(scriptsInfo);
  43. showScriptsInfo(scriptsInfo); // 显示脚本信息
  44. },
  45. onerror: () => {
  46. console.log("Some error!");
  47. const scriptsInfo = errorMessage
  48. showScriptsInfo(scriptsInfo)
  49. }
  50. });
  51. // oneClickInstall();
  52. }
  53.  
  54. // 解析脚本信息
  55. function parseScriptInfo(script) {
  56. return {
  57. id: script.getAttribute('data-script-id'),
  58. name: script.getAttribute('data-script-name'),
  59. author: script.querySelector("dd.script-list-author").textContent,
  60. description: script.querySelector(".script-description").textContent,
  61. version: script.getAttribute('data-script-version'),
  62. url: 'https://greasyfork.org/scripts/' + script.getAttribute('data-script-id'),
  63. createDate: script.getAttribute('data-script-created-date'),
  64. updateDate: script.getAttribute('data-script-updated-date'),
  65. installs: script.getAttribute('data-script-total-installs'),
  66. dailyInstalls: script.getAttribute('data-script-daily-installs'),
  67. ratingScore: script.getAttribute('data-script-rating-score')
  68. };
  69. }
  70.  
  71. function showScriptsInfo(scriptsInfo) {
  72. GM_addStyle(`
  73. button.script-button {
  74. position: fixed;
  75. bottom: 50%;
  76. right: -50px;
  77. transform: translateY(50%);
  78. padding: 10px;
  79. font-size: 16px;
  80. border: none;
  81. border-radius: 4px;
  82. background-color: #1e90ff;
  83. color: #ffffff;
  84. cursor: pointer;
  85. transition: right 0.3s;
  86. z-index: 9999999999999999; /* 设置一个较高的 z-index 值 */
  87. }
  88.  
  89. div.info-container {
  90. display: none;
  91. position: fixed;
  92. top: 10%;
  93. right: 100px;
  94. width: 650px;
  95. padding: 12px;
  96. background-color: #ffffff;
  97. box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3);
  98. border-radius: 4px;
  99. opacity: 0;
  100. transition: opacity 0.3s;
  101. z-index: 9999;
  102. max-height: 80vh;
  103. overflow-y: auto;
  104. }
  105. ul.info-list {
  106. list-style: none;
  107. margin: 0;
  108. padding: 0;
  109. }
  110.  
  111. li.info-item {
  112. margin-bottom: 15px;
  113. padding: 12px;
  114. padding-bottom: 22px;
  115. display: flex;
  116. flex-direction: column;
  117. border: 1px solid #1e90ff;
  118. border-radius: 5px;
  119. }
  120.  
  121. .div.script-container {
  122. display: flex;
  123. flex-direction: column;
  124. }
  125.  
  126. a.script-link {
  127. font-size: 18px !important;
  128. font-weight: bold !important;
  129. margin-bottom: 5px !important;
  130. color: #1e90ff !important;
  131. }
  132.  
  133. p.script-description {
  134. color: black !important;
  135. margin-top: 2px;
  136. margin-bottom: 5px;
  137. font-size: 16px;
  138. }
  139.  
  140. div.details-container {
  141. font-size: 15px;
  142. font-weight: bold;
  143. display: flex;
  144. justify-content: space-between;
  145. margin-bottom: 15px;
  146. }
  147.  
  148. span.script-details {
  149. font: !important
  150. color: black !important;
  151. flex-grow: 1 !important;
  152. text-align: center !important;
  153. border: 1px solid #1e90ff !important;
  154. border-radius: 5px !important;
  155. margin: 4px !important;
  156. }
  157.  
  158. div.table-header {
  159. color: #1e90ff !important;
  160. font-size: 25px;
  161. font-weight: bold;
  162. }
  163.  
  164. input.script-search-input {
  165. width: 96% !important;
  166. padding: 10px !important;
  167. font-size: 18px !important;
  168. border: 1px solid #1e90ff !important;
  169. border-radius: 4px !important;
  170. box-shadow: 0 2px 5px rgba(0, 0, 0, 0.3) !important;
  171. margin-bottom: 15px !important;
  172. margin-top: 20px !important;
  173. }
  174.  
  175. a.install-button {
  176. font-size: 20px;
  177. background-color: green;
  178. color: white;
  179. padding: 12px;
  180. }
  181.  
  182. button.to-greasyfork {
  183. position: absolute;
  184. top: 12px;
  185. right: 12px;
  186. border-radius: 4px;
  187. padding: 8px;
  188. font-size: 16px;
  189. border: none;
  190. background-color: #1e90ff;
  191. color: #ffffff;
  192. cursor: pointer;
  193. }
  194. span.match-count {
  195. background-color: #1e90ff;
  196. font-size: 25px;
  197. font-weight: bold;
  198. color: white;
  199. padding: 6px;
  200. position: absolute;
  201. right: 50%;
  202. border-radius: 12px;
  203. top: 10px;
  204. }
  205. `);
  206.  
  207.  
  208. // 创建打开列表按钮
  209. var button = document.createElement('button');
  210. button.className = 'script-button';
  211. button.innerText = 'Scripts';
  212.  
  213. // 创建脚本容器
  214. var infoContainer = document.createElement('div');
  215. infoContainer.className = 'info-container';
  216.  
  217. // 创建搜索框
  218. var searchInput = document.createElement('input');
  219. searchInput.type = 'text';
  220. searchInput.placeholder = 'Search scripts...';
  221. searchInput.className = 'script-search-input';
  222.  
  223. // 创建指向greasyfork的链接
  224. var toGreasyfork = document.createElement('button');
  225. toGreasyfork.className = 'to-greasyfork';
  226. toGreasyfork.innerText = 'View on Greasyfork';
  227.  
  228. // 创建计数器
  229. var matchCount = document.createElement('span');
  230. matchCount.className = 'match-count';
  231.  
  232. // 创建表头
  233. var tableHeader = document.createElement('div');
  234. tableHeader.className = 'table-header';
  235. tableHeader.appendChild(document.createTextNode('Script Finder'));
  236. tableHeader.appendChild(matchCount);
  237. tableHeader.appendChild(searchInput);
  238. tableHeader.appendChild(toGreasyfork);
  239.  
  240. // 创建脚本列表
  241. var infoList = document.createElement('ul');
  242. infoList.className = 'info-list';
  243.  
  244. // 插入脚本
  245. if (scriptsInfo === errorMessage) {
  246. infoList.innerHTML = errorMessage;
  247. } else {
  248. for (var i = 0; i < scriptsInfo.length; i++) {
  249. var script = scriptsInfo[i];
  250. var listItem = document.createElement('li');
  251. listItem.className = 'info-item';
  252.  
  253. var scriptContainer = document.createElement('div');
  254. scriptContainer.className = 'script-container';
  255.  
  256. var nameElement = document.createElement('a');
  257. nameElement.className = 'script-link';
  258. nameElement.innerText = script.name;
  259. nameElement.href = script.url;
  260. nameElement.target = '_blank';
  261.  
  262. var descriptionElement = document.createElement('p');
  263. descriptionElement.className = 'script-description';
  264. descriptionElement.innerHTML = script.description;
  265.  
  266. var detailsContainer = document.createElement('div');
  267. detailsContainer.className = 'details-container';
  268.  
  269. // 创建一键安装按钮
  270. var installButton = document.createElement('a');
  271. installButton.className = 'install-button';
  272. installButton.innerText = `Install ${script.version}`;
  273. installButton.href = `https://greasyfork.org/scripts/${script.id}/code/script.user.js`;
  274.  
  275. const details = [
  276. { key: 'Author', value: script.author },
  277. { key: 'Installs', value: script.installs },
  278. { key: 'Daily Installs', value: script.dailyInstalls },
  279. { key: 'Created', value: script.createDate },
  280. { key: 'Updated', value: script.updateDate },
  281. { key: 'Rating', value: script.ratingScore }
  282. ];
  283.  
  284. for (let i = 0; i < details.length; i++) {
  285. const spanElement = document.createElement('span');
  286. spanElement.className = 'script-details';
  287. spanElement.innerText = `${details[i].key}:\n${details[i].value}`;
  288. detailsContainer.appendChild(spanElement);
  289. }
  290.  
  291. scriptContainer.appendChild(nameElement);
  292. scriptContainer.appendChild(descriptionElement);
  293. scriptContainer.appendChild(detailsContainer);
  294. scriptContainer.appendChild(installButton);
  295.  
  296. listItem.appendChild(scriptContainer);
  297. listItem.scriptId = script.id;
  298. infoList.appendChild(listItem);
  299. }
  300. }
  301.  
  302. infoContainer.appendChild(tableHeader)
  303.  
  304. infoContainer.appendChild(infoList);
  305.  
  306. var timeout;
  307. button.addEventListener('mouseenter', function () {
  308. clearTimeout(timeout);
  309. button.style.right = '10px';
  310. });
  311.  
  312. button.addEventListener('mouseleave', function () {
  313. timeout = setTimeout(function () {
  314. button.style.right = '-50px';
  315. }, 500);
  316. });
  317.  
  318. button.addEventListener('click', function (event) {
  319. event.stopPropagation();
  320. button.style.right = '10px';
  321. infoContainer.style.display = "block"
  322. infoContainer.style.opacity = 1
  323. });
  324.  
  325. infoContainer.addEventListener('click', function (event) {
  326. event.stopPropagation();
  327. });
  328.  
  329. searchInput.addEventListener('input', () => {
  330. searchScript()
  331. updateMatches()
  332. })
  333.  
  334. toGreasyfork.addEventListener('click', function () {
  335. window.open(`https://greasyfork.org/scripts/by-site/${domain}?q=${searchInput.value}`)
  336. })
  337. document.body.addEventListener('click', function () {
  338. clearTimeout(timeout);
  339. button.style.right = '-50px';
  340. infoContainer.style.opacity = 0
  341. infoContainer.style.display = "none"
  342. });
  343.  
  344. document.body.appendChild(button);
  345.  
  346. document.body.appendChild(infoContainer);
  347.  
  348. infoContainer.addEventListener('change', () => {
  349. updateMatches()
  350. })
  351.  
  352. updateMatches()
  353. }
  354.  
  355. function searchScript() {
  356. const searchWord = document.querySelector('.script-search-input').value.toLowerCase(); // 将要匹配的文本转换为小写
  357. const scriptList = document.querySelectorAll('.info-item');
  358. for (let i = 0; i < scriptList.length; i++) {
  359. const scriptText = scriptList[i].innerText.toLowerCase(); // 将检索的文本转换为小写
  360. if (scriptText.includes(searchWord)) {
  361. scriptList[i].style.display = 'block';
  362. } else {
  363. scriptList[i].style.display = 'none';
  364. }
  365. }
  366. }
  367.  
  368. function updateMatches() {
  369. const matchCount = document.querySelectorAll('.info-item:not([style*="display: none"])').length;
  370. document.querySelector('.match-count').innerText = matchCount
  371. }
  372.  
  373. // function loadAll() {
  374.  
  375. // }
  376. function main() {
  377. if (window.self !== window.top) {
  378. // 在iframe中执行时,直接退出
  379. return;
  380. }
  381. getScriptsInfo(domain);
  382. }
  383.  
  384. main()
  385.  
  386.  
  387. })();