Greasy Fork

Shined up real nice.

Greasy Fork is available in English.

pixiv_sk

pixivの検索結果をソートしたりフィルタリングしたり1ページに表示する数を増やしたりできます。

このスクリプトを使ってみて、質問、レビュー、問題の報告 をすることできます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
// ==UserScript==
// @name           pixiv_sk
// @namespace      http://alexam.hateblo.jp/
// @author         shikato
// @description    pixivの検索結果をソートしたりフィルタリングしたり1ページに表示する数を増やしたりできます。
// @version        1.1.1
// @include        https://www.pixiv.net/search.php*
// @include        https://www.pixiv.net/tags.php*
// ==/UserScript==

(function (doc, func) {

  var head = doc.getElementsByTagName('head')[0]; 

  var jquery = doc.createElement('script'); 
  jquery.setAttribute('src', 'https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js');
  jquery.addEventListener('load', function() {
    var myScript = doc.createElement('script');
    myScript.textContent = 'jQuery.noConflict();(' + func.toString() + ')(jQuery);';
    head.appendChild(myScript);
  }, false); 

  head.appendChild(jquery);
})(document, function ($) {

  /** 設定値 ここから **/
  
  // 1ページに何ページ分の作品を表示するか
  // ex) 1なら通常通り
  //     2にすると2ページ分表示
  var GETTING_PAGE_COUNT = 3;
  // 作品のブックマーク数が以下の値未満の場合は表示しない
  var FAV_FILTER = 3;
  // リンクを別のタブで開くかどうか true / false
  var IS_LINK_BLANK = true; 

  /** 設定値 ここまで **/ 

  var LOADING_IMG = 'https://raw.githubusercontent.com/shikato/pixiv_sk/master/loading.gif';

  if (GETTING_PAGE_COUNT < 1 || FAV_FILTER < 0) return;

  var mCurrentGettingPageCount = null;
  var mCurrentUrl = null;
  var mCurrentPage = null;
  var mWorks = [];

  // mCurrentPageの作品を取得する
  var getWorks = function (onloadCallback) { 
    var url = mCurrentUrl;

    if (mCurrentPage === 1) {
      url += ('&p='+mCurrentPage); 
    } else {
      url = mCurrentUrl.replace(/p=\d+/, 'p='+mCurrentPage); 
    } 
    mCurrentUrl = url; 

    var req = new XMLHttpRequest();
    req.open('GET', mCurrentUrl, true);
    req.onload = function (event) {
      onloadCallback(req); 
      req = null;
    };
    req.onerror = function (event) {
      alert('作品の取得に失敗しました。');
      req = null;
    };

    req.send(null); 
  };
  
  // mWorksをフィルタリングしてソートしてHTML(文字列)を返す
  var filterAndSort = function () {
    // FAV_FILTER未満の作品をremove 
    mWorks.forEach(function (work, i) { 
      var fav = work.children('ul').children('li:first').children('a').text();
      if (fav < FAV_FILTER) {
        mWorks.splice(i, 1);
      } else {
        // blank onの場合 target属性追加
        if (!IS_LINK_BLANK) return;
        work.children('a').attr('target', 'blank');
      }
    });

    // ソート 
    mWorks.sort(function (a, b) {
      var favA = a.children('ul').children('li:first').children('a').text();
      var favB = b.children('ul').children('li:first').children('a').text();
      if (favA === '') {
        favA = 0; 
      } else {
        favA = parseInt(favA); 
      }
      if (favB === '') {
        favB = 0; 
      } else {
        favB = parseInt(favB); 
      }
      if (favA > favB) {
        return -1;
      }
      if (favA < favB) {
        return 1;
      }
      return 0;
    }); 

    var results = ''; 
    for (var i = 0; i < mWorks.length; i++) { 
      results += $('<div>').append(mWorks[i]).html();                    
    }

    return results;
  }; 


  mCurrentGettingPageCount = 0;
  mCurrentUrl = location.href;
  mCurrentPage = mCurrentUrl.match(/p=(\d+)/); 

  if (mCurrentPage !== null) {
    mCurrentPage = parseInt(mCurrentPage[1]);
  } else {
    mCurrentPage = 1;
  }

  if (GETTING_PAGE_COUNT > 1) {
    // load時のスピナー表示
    $('.column-search-result').children('ul').hide(); 
    $('.column-search-result').prepend(
      '<div id="loading" style="width:50px;margin-left:auto;margin-right:auto;">'
       + '<img src="' + LOADING_IMG + '" /></div>'
    );

    // pixiv_sk用のページネーションリンク表示
    if (mCurrentPage === 1) {
      $('.pager-container').empty().append(
        '<a href="' + mCurrentUrl + '" style="margin-right:15px;">&lt;&lt;</a>'
         + '<a href="' + mCurrentUrl + '&p=' + (mCurrentPage+GETTING_PAGE_COUNT) +'">&gt;</a>'
      ); 
    } else {
      $('.pager-container').empty().append(
        '<a href="'+mCurrentUrl.replace(/&p=\d+/, '') + '" style="margin-right:15px;">&lt;&lt;</a>'
         + '<a href="'+mCurrentUrl.replace(/p=\d+/, 'p=' + (mCurrentPage - GETTING_PAGE_COUNT)) + '" style="margin-right:10px;">&lt;</a>'
         + '<a href="'+mCurrentUrl.replace(/p=\d+/, 'p=' + (mCurrentPage + GETTING_PAGE_COUNT)) + '" style="margin-right:10px;">&gt;</a>'
      ); 
    }

    var onloadCallback = function (req) { 
      $(req.responseText).find('.column-search-result').children('._image-items').children('.image-item').each(function() {
        var thumb = $(this).children('.work').children('._layout-thumbnail').children('._thumbnail');
        thumb.attr('src', thumb.attr('data-src')); 
        mWorks.push($(this));
      }); 

      mCurrentPage++; 
      mCurrentGettingPageCount++; 
      // GETTING_PAGE_COUNTで指定した分だけ作品を取得したらソートして表示
      if (mCurrentGettingPageCount === GETTING_PAGE_COUNT) {
        $('#loading').remove();
        var sortedImages = filterAndSort();
        $('.column-search-result').children('ul').empty().append(sortedImages).show(); 
      } else { 
        getWorks(onloadCallback);
      } 
    };
    
    getWorks(onloadCallback);
  } else {
    // filterAndSortだけ実行して表示
    var sortedImages = filterAndSort(); 
    $('.column-search-result').children('ul').empty().append(sortedImages);
  }

  // 被さって表示されてしまう要素をremove
  $('.popular-introduction').remove();
});