Skip to content

Instantly share code, notes, and snippets.

@yuru4c
Last active June 18, 2018 13:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yuru4c/786810608d14306ff49d4bb623c00935 to your computer and use it in GitHub Desktop.
Save yuru4c/786810608d14306ff49d4bb623c00935 to your computer and use it in GitHub Desktop.
いま pixiv アカウントを作ると id はいくつになるか調べます
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja-JP">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>pixiv member id</title>
<style type="text/css">
* {
font-size: large;
}
body {
white-space: nowrap;
}
label {
display: block;
font-weight: normal;
}
label, input {
text-align: right;
}
button {
width: 100%;
}
.half button {
width: 50%;
}
#abort, .invert #button {
display: none;
}
.invert #abort {
display: inline;
}
#out {
list-style-type: none;
}
</style>
</head>
<body>
<table>
<tr id="initials">
<th><label for="initial">初期値: </label></th>
<td><input id="initial" value="1"></td>
<td><button type="button">0</button></td>
<td><button type="button">-0</button></td>
<td><button type="button">-1</button></td>
</tr>
<tr id="deltas">
<th><label for="delta">幅: </label></th>
<td><input id="delta" value="8388608"></td>
<td><button type="button">1</button></td>
<td colspan="2" class="half">
<button type="button">/2</button><!--
--><button type="button">*2</button>
</td>
</tr>
<tr>
<td colspan="5" id="buttons">
<button type="button" id="button">検索</button>
<button type="button" id="abort" >中断</button>
</td>
</tr>
</table>
<ul id="out"><li></li></ul>
<script type="text/javascript" src="member_id.js"></script>
<script type="text/javascript">
var log = function (str) {
// console.log(str);
};
(function ($) {
function getButtons(id) {
return $.getElementById(id)
.getElementsByTagName('button');
}
function initButton(button, input) {
var value = button.firstChild.data;
button.onclick = function () {
input.value = value;
};
}
$.onreadystatechange = function () {
$.onreadystatechange = null;
search.init();
var initial = $.getElementById('initial');
var delta = $.getElementById('delta');
var initials = getButtons('initials');
var deltas = getButtons('deltas');
var buttons = $.getElementById('buttons');
var button = $.getElementById('button');
var abort = $.getElementById('abort');
var out = $.getElementById('out');
function setInitial(value) {
if (isNaN(value)) {
value = 0;
}
if (value == 0 && 1 / value < 0) {
initial.value = '-0';
} else {
initial.value = value;
}
return value;
}
function getInitial() {
return setInitial(parseInt(initial.value));
}
function setDelta(value) {
if (isNaN(value) || value < 1) {
value = 1;
}
delta.value = value;
return value;
}
function getDelta() {
return setDelta(parseInt(delta.value));
}
initButton(initials[0], initial);
initButton(initials[1], initial);
initButton(initials[2], initial);
initButton(deltas[0], delta);
deltas[1].onclick = function () {
setDelta(parseInt(delta.value) >> 1);
};
deltas[2].onclick = function () {
setDelta(parseInt(delta.value) << 1);
};
function disabled(bool) {
initial .disabled = bool;
initials[0].disabled = bool;
initials[1].disabled = bool;
initials[2].disabled = bool;
delta .disabled = bool;
deltas[0].disabled = bool;
deltas[1].disabled = bool;
deltas[2].disabled = bool;
}
function done() {
disabled(false);
buttons.className = '';
}
var callback = function () {
initial.value = '-0';
delta.value = '16';
callback = done;
done();
};
button.onclick = function () {
disabled(true);
buttons.className = 'invert';
search(getInitial(), getDelta(), callback);
};
abort.onclick = function () {
search.abort();
done();
};
var _log = log;
log = function (str) {
_log(str);
var li = $.createElement('li');
li.appendChild($.createTextNode(str));
out.insertBefore(li, out.firstChild);
};
};
})(document);
</script>
</body>
</html>
var search = (function ($) {
var title = '<title>イラストコミュニケーションサービス[pixiv]</title>';
var url = (function () {
var yql0 = 'http://query.yahooapis.com/v1/public/yql?q=';
var q0 = 'select * from htmlstring where url="';
var pixiv = 'https://www.pixiv.net/member.php?id=';
var q1 = '" and xpath="/html/head/title"';
var yql1 = '&format=json&env=';
var env = 'store://datatables.org/alltableswithkeys';
var yql2 = '&callback=';
var url0 = yql0 +
encodeURIComponent(q0 + pixiv);
var url1 =
encodeURIComponent(q1) + yql1 +
encodeURIComponent(env) + yql2;
return function (id, callback) {
return url0 + id + url1 + callback;
};
})();
var head;
var known, running;
var n, delta, callback;
var testCallback, testN;
var key, script;
var date, result;
function finish() {
log('[' + new Date(date).toLocaleString() + ']: ' + n);
running = false;
callback(n);
}
function stop() {
delete search[key];
script = null;
}
function onload(json) {
stop();
var query = json.query;
result = title == query.results.result;
if (result) date = query.created;
else known = testN;
testCallback();
}
function skip() {
if (running) {
result = false;
testCallback();
}
}
function test(n) {
testN = n;
if (n > known) {
log('確認中 ' + n + ' ' + delta);
key = '_' + Math.random().toFixed(15).slice(2);
search[key] = onload;
script = $.createElement('script');
script.type = 'text/javascript';
script.src = url(n, 'search.' + key);
head.appendChild(script);
} else {
log('既知  ' + n + ' ' + delta);
setTimeout(skip, 0);
}
}
function abortTest() {
if (script) {
head.removeChild(script);
stop();
}
}
function binary() {
if (delta == 1) {
finish();
return;
}
delta = Math.ceil(delta / 2);
test(n - delta);
}
function binaryCallback() {
if (result) n = testN;
binary();
}
function step() {
test(n);
}
function stepCallback() {
if (result) {
testCallback = binaryCallback;
binary();
} else {
n += delta;
step();
}
}
function exec(_n, _delta, _callback) {
n = _n; delta = _delta; callback = _callback;
running = true;
if (1 / n < 0) {
n = known - n;
}
if (n <= known) {
n += Math.ceil((known - n + 1) / delta) * delta;
}
testCallback = stepCallback;
step();
}
function abort() {
if (running) {
abortTest();
running = false;
log('中断');
}
}
function init() {
abort();
head = $.getElementsByTagName('head')[0];
known = 1;
}
function search(initial, delta, callback) {
abort();
exec(initial, delta, callback);
}
search.init = init;
search.abort = abort;
return search;
})(document);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment