Direct Image Link E621/926

Рипалка ссылок / имён / номеров картинок

질문, 리뷰하거나, 이 스크립트를 신고하세요.
  1. // ==UserScript==
  2. // @name Direct Image Link E621/926
  3. // @name:en Direct Image Link E621/926
  4. // @version 2025.02.19
  5. // @description Рипалка ссылок / имён / номеров картинок
  6. // @description:en Ripper of image links / names / numbers
  7. // @match http*://e621.net/posts*
  8. // @match http*://e621.net/pool*
  9. // @match http*://e621.net/favorites*
  10. // @match http*://e926.net/posts*
  11. // @match http*://e926.net/pool*
  12. // @match http*://e926.net/favorites*
  13. // @author Rainbow-Spike
  14. // @namespace https://greasyfork.org/users/7568
  15. // @homepage https://greasyfork.org/ru/users/7568-rainbow-spike
  16. // @icon https://www.google.com/s2/favicons?domain=e621.net
  17. // @grant none
  18. // @run-at document-end
  19. // ==/UserScript==
  20.  
  21. var post_list = document . querySelectorAll ( '.thumbnail' );
  22. if ( post_list != null ) {
  23. var mode = 2, // 0 - номера постов post numbers, 1 - имена файлов file names, 2 - полные ссылки full links
  24. lever = { // 0 - нет no, 1 - да yes
  25. nl: 1, // использовать "чёрный список" тегов use tag negative list
  26. pl: 1, // использовать "белый список" тегов use tag positive list
  27. dl: 1, // фильтр уже скачанных картинок filter of already downloaded pics
  28. top: 1, // полный список вверху страницы full list on page top
  29. pic: 1, // вставка под каждой картинкой insertion under every pic
  30. },
  31. tag = {
  32. nl: /^censored|gore|male\/male/,
  33. pl: /[^_]pussy[^_]|female_on_top|tribadism|camel_toe|vaginal_masturbation/,
  34. },
  35. css = { // стили styles
  36. nl: 'opacity: 0.5; border: 3px dotted red;', // "чёрный список" negative list
  37. neut: 'opacity: 0.5; border: 3px dashed gray;', // вне "белого списка" out of positive list
  38. dl: 'opacity: 0.5; border: 16px double green;', // скачанное downloaded
  39. top: 'columns: 300px; font-size: 40%; line-height: .25em; max-height: 100px;', // колонки в полном списке columns in full list
  40. pic: 'word-wrap: anywhere;', // под каждой картинкой under every pic
  41. },
  42. node = {
  43. top: document . querySelector ( 'body' ),
  44. new: document . createElement ( 'span' ),
  45. },
  46. md5_list = [ // список MD5-кодов уже закачанных файлов, ВСТАВЬ СВОЙ СПИСОК list of MD5-codes of already downloaded files, INSERT YOUR LIST
  47. '00000000000000000000000000000000', '00000000000000000000000000000000'
  48. ],
  49. x, y, post_tags, src, name, md5, ext, num, insert;
  50. for ( x = 0; x < post_list . length; x++ ) {
  51. // получение данных data mining
  52. post_tags = post_list [ x ] . getAttribute ( 'data-tags' );
  53. src = post_list [ x ] . getAttribute ( 'data-file-url' );
  54. name = src . split ( '/' ) . pop ( );
  55. [ md5, ext ] = name . split ( '.' );
  56. num = post_list [ x ] . getAttribute ( 'data-id' );
  57. // фильтрация filtering
  58. if ( md5 != '' && lever . nl && tag . nl . test ( post_tags ) ) { post_list [ x ] . style = css . nl; md5 = ''; }; // сначала "чёрный список" negative list in first
  59. if ( md5 != '' && lever . pl && !tag . pl . test ( post_tags ) ) { post_list [ x ] . style = css . neut; md5 = ''; }; // затем "белый список" positive list in middle
  60. if ( md5 != '' && lever . dl ) { // фильтр скачанного в конце filter of downloaded in last
  61. for ( y = 0; y < md5_list . length; y++ ) {
  62. if ( md5_list [ y ] == md5 ) { post_list [ x ] . style = css . dl; md5 = ''; break; };
  63. };
  64. };
  65. if ( md5 != '' ) {
  66. if ( lever . top && node . top != null ) { // пополнение и режим полного списка complection and mode of full list
  67. switch ( mode ) {
  68. case 0: insert = num + '.' + ext; break; // номер поста + расширение post number + extension
  69. case 1: insert = name; break; // имя файла file name
  70. case 2: insert = src; break; // путь картинки pic path
  71. };
  72. node . new . innerHTML += '<a href = "' + src + '">' + insert + ' </a><br>';
  73. };
  74. if ( lever . pic ) {
  75. switch ( mode ) {
  76. case 0: insert = num; break; // номер поста post number
  77. case 1: case 2: insert = md5; break; // MD5-код картинки pic MD5-code
  78. };
  79. post_list [ x ] . innerHTML += '<a href = "' + src + '" style = "' + css . pic + '">' + insert + ' </a>'; // вставка MD5-кода под избранными картинками insertion of MD5-code under the chosen pics
  80. };
  81. };
  82. };
  83. if ( lever . top && node . top != null ) { // вставка и выделение полного списка insertion and selection of full list
  84. node . new . style = css . top;
  85. node . top . insertBefore ( node . new, node . top . firstChild);
  86. function selectblock ( sel_node ) {
  87. var rng = document . createRange ( );
  88. rng . selectNode ( sel_node );
  89. var sel = window . getSelection ( );
  90. sel . removeAllRanges ( );
  91. sel . addRange ( rng );
  92. };
  93. selectblock ( node . new );
  94. }
  95. }