-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTokyoToshoJAVPic.js
432 lines (388 loc) · 52.1 KB
/
TokyoToshoJAVPic.js
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
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
// ==UserScript==
// @name TokyoToshoJAVPic
// @namespace http://xia.sava.to
// @include https://www.tokyotosho.info/*
// @version 1
// @grant GM_xmlhttpRequest
// @connect www.heyzo.com
// @connect javbest.net
// @connect www.caribbeancom.com
// @connect javarchive.com
// @connect javbest.net
// @connect www.tokyo-hot.com
// @connect my.cdn.tokyo-hot.com
// @connect www.tokyomotion.net
// @connect www.s-cute.com
// @connect dmm.co.jp
// @connect jav.work
// @require https://code.jquery.com/jquery-3.2.1.min.js
// ==/UserScript==
class Signature {
/**
*
* @param {string} url
* @param {string} image
* @param {string} title
*/
constructor(url, image, title) {
this.url = url;
this.image = image;
this.title = title;
}
static get NOT_FOUND() {
return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAJjklEQVR4nNVbzW8URxYvG5uPDQdgwRwXxCFi4Qq4XtlmoF7VzGDZ2Ehz4sJlR4HLEgScQGrEEQInomQl/gHfNgiOcVZhk6zkJErQHhLDVHXPhBmbKDgSEImPqT3MjN1d0z2fPba3pJIsT3283+v3Va9eEdLb1reQhn2aD5/2kN3QCPdcAY80h2eawxuNYDSC0RzeaAGLroBHGuGeh+yG5sOnF9Kwr8f0xd9mHWegIMeOa4SPFTJ3GWSHvbrGnYIcOz7rOANrjS+ylablUI7Tqy6HfLegIzuHvJZw5bGEobXGu9weSxhykd3WHP5oEcg7jfSli7TgCppzBc1phF9cpC8rvzVfw0X6SiO7VUyP7loz4HPZ7KDH4YIW9PfGBNOcRrjrImTzydHDz6cS24wxffZ6juP0P59KbMsnRw+7CNnKHJpruLagv2sOF8xqq0ZpPHFQc/g2WlSpUpxec9Ojf+12LzfJDriCXtOcqmiJYHOehINxYGva1HH2gUYWIe7sK8XplHGc/rj3NY7T70k6pQX7OkotXIRs3PuuEJDNDrpy5B8RX+EnV45MtAJiYZLv9lJHD2nBTmhkpzSyU1qwE17q6KHcJN/djHnGmD6FcFIh/TmcEfCpyWYH40NOCHk6MfEnLdiDEFF/rRGum0xmYxSxGof3uwIuV+az3xobNyhrZL9pwR7kJbukcXh/mL0ghJD5dHqTh3C9SoNlG9gDk8lsiQ284vCvMP+skA2HzVnMJLZ6Es4phB+7dX2Ksx8UwtnFTGJr2F46BdRF5tXTB1/ku2WCyWYHQ788wpdhLkglEps1skuaw7NugddLGzzzkF006fQme9+KK6YPQyThflceIkznFbJ/qkRic91YHEHN2ePYgdtqImC+ICi3989nMlsUp5+F2YSOwFesfT34OcvA/DeT2aiR3dIcyr0G75OGshZw0zZ2JpsdjGBCe96hNJ44GOLqvrS/fD5Jd2iks6sGvK7T2XyS7ggw4Uxic506cPij5ThhLpsdtIMchcy1dT43yXdXT29rBH5ZJR6VpmXgbFANz4OGkcO3LdkDj8OF4ET62rb2+STdsR7Ar3wg+HFpfGS7n0adAqoR3vrHeRwuNAT/WMJQSGx/3T+movNrKfYRncPntn3SCNctlVl6OpHYGckAF9lta+Gf7CBHI7u15mCjuoCP/LRW3DLM+8e4yG6Hgi9NyyH7SGuHtxVXt4rWvv3+zrVcpCfYZJAB9EWoFOQ4vRpcjH1Vx81V8PNdd84e+4MlY0yfFvQb/5gcp1cD4GcdZ8DO5ChOpyzRv9QZQVDuMDL8tXNGsEuBj8fpVBAb6MChq5rD8xFNlX/AYiaxtSMQHMquoH8vphJ7FAfd+jyqiqnEHhfZ+Q5VbrEk5XvLUjAzs8Hev5Bkx3xfFz62vv61gB5JONcp+NoaxVRiT6Okhg1+xe50xgRPwjlLCq5ZY+7Ufuuzs7f+TI4xpk9x9kM34P1MaCgJnCrlA79MfGdM+N6/hptkB+y9CCGELKRhX3AizfknahzeHwf4pkzgVD09cfwvUfM6YUIuxd4PYPFLIIdySY7tJZoPn7Ym3g1wTsDlNhnwrBjyFRsyoQl4QggpybG9LrZnh1wBl4MfE+4GaR0+Tao3NiuTrJNTRD6gYVccdMtMsHQ+CnxbRrTWBXvgX6eabV6xE8huEI1wz//PfHL0cG2CcZz+ZmmsRvrcChN6Bh7BKIQFf0otL0eOWGPuEetQ8+75VGJbbcLCJN/dEfg2JKEpeITOr9c4lP2HpPn06C5LRR6RoH+nLwMcS44e7oYB3TChAr77u8Un/Oih2prGcfqVP4nK4Rnx39K6SAt+Iiqp6+4I6IQJ3Yh9XRfsRAATsqKPAW9IUCSCLjCP7FQsRLTBBB0neASjkZ3yr2+vTYKD7RggPga0YhRrDNCihYgxNgb4CxUQfgkQE5MKtAq+1oqpxJ7YmNBUBQQsLqsA0peO7xAUhxFsJciJYkIcqtDQCApYbOgGc5N8d+W6anXBx8YEyw0WQ91gDwOhsIONv2k5tlfLsb29YkJLgVAvQuG2wlvRWsTYu1C4yWGockvb1sa/th3etsgE3WaWKC+DmSEddhiyj8Nut8dhBOMiO98QfEiE1yxOUMg+bE8KoZw71vg4vKx+dQmRJDtQm9RxQiSECc1i+ygmeO2Cr/TvAhIUlRCpisadAANEMCWmEM62TQCHsvIxodXw1maCh+zDTlJiCuGsH4MrolNiPU2KKmTn243ta0xoW+xXwDdNiuZTI4llBsw6zoC20uKeDKbFPWQXOyGmog6rnha/GKBdNkmLE0KIlnAlsIhgX/t9qEmnN7kieM20Pjudty9GFKf/CYyRcIXYrVpm8soSpZP+MQVB+Xq/GivIseNByYWT/jEu0hcFzv9cxwBC6i8+FdKf562aHC3g5joAGt4F3PTTms9kttRf57FboeAJqcbK1vW4Z12Pm2x2cL1ej9sFEF671+OEEKJDCiR0CmiAs/8PBRKSgrYKJHSzAglCCDGOM+Aim/NPdJF5dol6aVoOxVEHGAd4u3ynNC3rS2SQzbX83sCTcNA2iC7Sh3bh4dL4yHbN4fO1FHv7y1fK5eDflhS/8ke3LTX75KQRjOL0M7s0bS6bHdQCPtIt1vrH1N9pATdtnTeZzEZtHe81gskj/K0t8D4mfBrKhDMhhZKC8tUpoKDztqsjpGrxQ8C7gn7SEXhCoktlXaQPw56tmHR6U7WQYjFu4AphUUeUypam5VCd2CMYjV2WyhJCiMlktiiEL+qZwDzbOywTJOV71ZqC77vU8bJG+E4hnPXH9v6mJYWwYmmNdNacOVMnqR21fCazRQt2P4TItxrhephK1Fouxd6vlcsrhIWGkSSHskJYqJXL2+d5m6aqn39bvxa7Hxv4Wqu4x3qbUO3znmCTUbX9y2sY07c0PrL9Ca9/MPGEHz20ND6yvZU1PISTUfbGFfSTnr4hKiBkI1+ICfqN4nTKzMxsiHtfMzOzwZN0qu5gsyw99FXH1r7d5klo+GhKcdCK02tt+96QVqw+mmqcT2BzcezVVjOOM1CpK6ZLjQ0ZVbr2bE6OHJlPj+4KexdkHKe/mB7dlZcjR2rP5poXVdElzeHCmr4ofTqR2Okiu+0ifdGyS+P0tUZWrFWIVP4OefsT0St7sVtNDzar2Z5OJHbmOL0a781uvWppCVciz/ProRnH6S8k2TGNcEdzqrpKoHAoV9Xgjk6yY714j9jzVpJjezt9Pt/s2iyO9j/wx71nAfeQewAAAABJRU5ErkJggg==";
}
static get LOADING() {
return "data:image/png;base64,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";
}
}
class Recipe {
/**
*
* @param {Element} target
* @param {string} code
*/
constructor(target, code) {
this.target = target;
this.code = code;
}
async apply() {
const loading = document.createElement('span');
loading.textContent = this.constructor.name;
const img = document.createElement('img');
img.src = Signature.LOADING;
img.height = 60;
loading.append(img);
this.target.appendChild(loading);
let signature;
try {
signature = await this.findSignature();
} catch (e) {
signature = await new NotFoundRecipe(this.target, `${this.constructor.name} ${this.code} ERROR`).findSignature();
console.log(signature);
}
if (signature) {
await this.appendImage(signature);
}
this.target.removeChild(loading)
}
/**
*
* @returns {Promise<Signature>}
*/
async findSignature() {
return null;
}
/**
* @param {string} url
* @param {Object} options
* @param {Object} postdata
* @returns {Promise<Document>|Promise<GMXMLHttpRequestResponse>}
*/
async request(url, options = null, postdata = null) {
if (url.match(/^\/\//)) {
url = 'https:' + url;
}
options = Object.assign({
headers: {
'Referer': undefined,
},
parseHtml: true,
}, options);
let method = 'GET';
if (postdata !== null) {
method = 'POST';
options.headers['Content-Type'] = 'application/x-www-form-urlencoded';
}
console.log('request.url', url, options, postdata);
return new Promise((resolve, reject) => {
const request = {
method: method,
data: postdata,
headers: options.headers,
url: url.replace(/ /g, '+'),
onload: response => {
if (options.parseHtml) {
resolve((new DOMParser()).parseFromString(response.responseText, 'text/html'));
} else {
resolve(response.response);
}
},
onerror: response => {
reject(response);
}
};
if (!options.parseHtml) {
request.responseType = 'blob';
}
GM_xmlhttpRequest(request);
})
}
/**
*
* @param {Signature} signature
*/
async appendImage(signature) {
console.log('appendImage', signature);
this.target.append(document.createElement('br'));
const span = document.createElement('span');
span.textContent = '→';
this.target.append(span);
const link = document.createElement('a');
link.rel = 'noopener';
link.target = '_blank';
link.href = signature.url;
if (signature.image) {
try {
const imageBlob = await this.request(signature.image,
{parseHtml: false, headers: {Referer: signature.url}});
const img = document.createElement('img');
img.src = window.URL.createObjectURL(imageBlob);
img.height = '180';
link.appendChild(img);
} catch (/** @Type {GMXMLHttpRequestResponse} */ e) {
if (e.error.match(/Refused to connect/)) {
const div = document.createElement('div');
div.textContent = signature.image;
div.setAttribute('style', 'color: red');
this.target.append(div);
}
}
}
link.appendChild(document.createTextNode(signature.title));
this.target.append(link);
}
/**
*
* @param {Element} target
* @param {string} text
*/
static detect(target, text) {
if (text.match(/carib(?:bean(?:com(?:pr)?)?)?[- _]+(\d+.?\d+)/i)) {
return new JavarchiveRecipe(target, RegExp.$1);
} else if (text.match(/heyzo[- _hd]*(\d+)/i)) {
return new HeyzoRecipe(target, RegExp.$1);
} else if (text.match(/heydouga[- _hd]*(\d+(?:[- _]+\w+)?)/i)) {
return new JavarchiveRecipe(target, RegExp.$1);
} else if (text.match(/(\d{5}[-_ ]+\d{3}|gachi.?\d+)/i)) {
return new JavbestRecipe(target, RegExp.$1);
} else if (text.match(/fc2[- _]*(?:ppv[- _]*)?(\d+(?:[- _]+\d+)?)/i)) {
return new JavarchiveRecipe(target, 'FC2+PPV+' + RegExp.$1.replace(/^0+/, ''));
} else if (text.match(/((?:sm-miracle|XXX-AV)[- _]\w?\d{4})/i)) {
return new JavarchiveRecipe(target, RegExp.$1);
} else if (text.match(/((?:10musume)[- _]\d{6}[- _]\d{2})/i)) {
return new JavarchiveRecipe(target, RegExp.$1);
} else if (text.match(/H(0930|4610)[- _]\w+/i)) {
return new JavbestRecipe(target, RegExp['$&']);
} else if (text.match(/tokyo[-_ ]?hot[-_ ].+$/i)) {
return new TokyohotRecipe(target, RegExp['$&']);
} else if (text.match(/uralesbian[- ]\d+/i)) {
return new Fc2Recipe(target, RegExp['$&']);
} else if (text.match(/s-cute[- \w]+/i)) {
return new ScuteRecipe(target, RegExp['$&'].replace('_HD', ''));
} else {
const matches = text.match(/((?:[a-z]{2,5})-?[a-z]?[0-9]{2,4})/ig);
if (matches) {
for (const matched of matches) {
if (matched.match(/f?hd-(?:1080|720)/i)) {
continue;
}
if (matched.match(/SIS001/i)) {
continue;
}
return new JavarchiveRecipe(target, matched.replace(/-/g, ''));
}
} else {
return new NotFoundRecipe("Not Found");
}
}
}
}
class NotFoundRecipe extends Recipe {
async findSignature() {
return new Signature(
"",
Signature.NOT_FOUND,
`---${this.code} NOT FOUND---`,
);
}
}
class JavarchiveRecipe extends Recipe {
async findSignature() {
console.log(['javarchive', this.code]);
const keyword = this.code.replace(/[- _]/g, '+');
const url = `http://javarchive.com/?s=${keyword}`;
const docs = await this.request(url);
let div = docs.querySelector('div.post-content');
if (!div) {
div = docs.querySelector('div.post-meta');
}
return new Signature(
div.querySelector('a')?.href || url,
div.querySelector('img').src,
div.querySelector('a')?.title || this.code,
);
}
}
class JavbestRecipe extends Recipe {
async findSignature() {
console.log(['javbest', this.code]);
const keyword = this.code.replace(/[- _]/g, '+');
const url = `http://javbest.net/?s=${keyword}`;
const docs = await this.request(url);
let div = docs.querySelector('article.post');
if (!div) {
div = docs.querySelector('div.post-meta');
}
return new Signature(
div.querySelector('a.h1')?.href || url,
div.querySelector('div.entry-content p img')?.src,
div.querySelector('a.h1')?.textContent || this.code,
);
}
}
class HeyzoRecipe extends Recipe {
async findSignature() {
console.log(['heyzo', this.code]);
this.code.match(/\d{4}/);
const num = RegExp['$&'];
const url = `https://www.heyzo.com/moviepages/${this.code}/index.html`;
const docs = await this.request(url);
return new Signature(
url,
docs.querySelector('meta[property="og:image"]')?.content ||
`https://www.heyzo.com/contents/3000/${num}/images/player_thumbnail.jpg`,
docs.querySelector('div#movie h1')?.textContent || this.code
);
}
}
class TokyohotRecipe extends Recipe {
async findSignature() {
console.log(['tokyohot', this.code]);
if (this.code.match(/[a-z]{1,3}[-_ ]?\d{3,4}/i)) {
this.code = RegExp['$&']
.replace(/(red|sky)[- _]?(\d+)/i, '$1-$2')
.replace(/(pp|sr)[- _]?(\d+)/i, '$1$2');
const url = `https://www.tokyo-hot.com/product/?q=${this.code}`;
const docs = await this.request(url);
const frame = docs.querySelector('div#main').querySelector('a.rm');
return new Signature(
frame?.href || url,
frame.querySelector('img')?.src?.replace('220x124', '820x462'),
frame.querySelector('div.title')?.textContent || this.code,
);
} else {
return null;
}
}
}
class JavworkRecipe extends Recipe {
async findSignature() {
console.log(['javwork', this.code]);
const url = `https://jav.work/?s=${this.code}`;
const docs = await this.request(url);
const a = docs.querySelector('ul.video_list li:first-child a');
const href = a.getAttribute('href');
const img = a.querySelector('img');
return new Signature(
href || url,
img.src,
img.alt || this.code,
);
}
}
class ScuteRecipe extends Recipe {
async findSignature() {
this.code = this.code.replace(/^s-?cute/i, '').replace(/[- _]+/g, '_').replace(/^_/, '').toLowerCase();
console.log(['scute', this.code]);
const url = `http://www.s-cute.com/contents/${this.code}/`;
const docs = await this.request(url);
return new Signature(
url,
docs.querySelector('div.content-cover img').src,
docs.querySelector('h3.h1').textContent,
);
}
}
class DmmcomRecipe extends Recipe {
async findSignature() {
console.log(['dmm_com', this.code]);
const search_url = `http://www.dmm.co.jp/search/=/searchstr=${this.code}`;
const searched = await this.request(search_url);
let item_url = searched.querySelector('ul#list p.tmb a').getAttribute('href');
console.log([item_url]);
if (item_url) {
let docs = await this.request(item_url);
if (docs.querySelector('.ageCheck')) {
docs = await this.request(docs.querySelector('a.ageCheck__link--r18').href)
}
console.log(['page', docs.querySelector('meta[property="og:image"]').content.replace(/s.jpg$/, 'l.jpg')]);
console.log([docs.querySelector('h1')?.textContent || this.code]);
return new Signature(
item_url,
docs.querySelector('meta[property="og:image"]').content.replace(/s.jpg$/, 'l.jpg'),
docs.querySelector('h1')?.textContent || this.code,
);
}
return null;
}
}
class Fc2Recipe extends Recipe {
async findSignature() {
console.log(['fc2', this.code]);
const keyword = this.code.replace(/[- _]/g, '+');
const url = `https://video.fc2.com/a/search/video/?keyword=${keyword}`;
const docs = await this.request(url);
let div = docs.querySelector('.c-boxList-111_video_thumb');
if (!div) {
div = docs.querySelector('div.post-meta');
}
const image = div.querySelector('div.c-image-101_image')
?.getAttribute('style')
?.replace(/^background-image: url\((.+)\);$/, '$1')
return new Signature(
div.querySelector('a.c-boxList-111_video_ttl')?.href || url,
image,
div.querySelector('a.c-boxList-111_video_ttl')?.title || this.code,
);
}
}
function main() {
const tops = Array.prototype.slice.call(
document.querySelectorAll('table.listing tr.category_0'))
.filter(row => row.querySelectorAll('td').length === 3);
const bottoms = Array.prototype.slice.call(
document.querySelectorAll('table.listing tr.category_0'))
.filter(row => row.querySelectorAll('td').length === 2);
const recipes = [];
for (let i = 0; i < tops.length; ++i) {
const cat = tops[i].querySelector('td[rowspan="2"] a');
if (!cat || cat.search !== '?cat=15') {
continue;
}
const target = tops[i].querySelector('td.desc-top');
const texts = [target.textContent];
const comm = bottoms[i].querySelector('td.desc-bot');
if (comm.textContent.match(/Comment: (.+)$/)) {
texts.unshift(RegExp.$1);
}
for (const text of texts) {
const recipe = Recipe.detect(target, text);
if (recipe) {
recipes.push(recipe);
break;
}
}
}
/** @Type: Array<Promise> */
const promises = [];
for (const recipe of recipes) {
promises.push(recipe.apply());
}
Promise.all(promises).then();
}
try {
main();
} catch (e) {
console.log(e);
}