「小説家になろう」一括ダウンロード(IE系非対応)
by
Lhankor_Mhy
2019-04-13 [2019/04/13 10:12:11]
テキストファイルダウンロードページで、「部分番号」の指定を末尾にして先頭の部分からダウンロード。その後、txt形式で保存します。サーバに配慮して各部分は5秒ごとにリクエストを飛ばしますので、時間がかかります。なお、利用規約14条17に抵触するかもしれないので、自己責任で使ってください。
/*
* @title 「小説家になろう」一括ダウンロード(IE系非対応)
* @description テキストファイルダウンロードページで、「部分番号」の指定を末尾にして先頭の部分からダウンロード。その後、txt形式で保存します。サーバに配慮して各部分は5秒ごとにリクエストを飛ばしますので、時間がかかります。なお、利用規約14条17に抵触するかもしれないので、自己責任で使ってください。
* @include https://ncode.syosetu.com/txtdownload/top/ncode/*
* @license MIT License
* @require
* @javascript_url
*/
(()=>{
var sleep = time => new Promise(resolve=>setTimeout(resolve,time));
var title = document.querySelector('title').textContent.split(' - ')[0];
var test = async ()=>{
var noArr = Array.from(document.querySelectorAll('select[name=no] option'));
var noEnd = document.querySelector('select[name=no]').value;
var hankaku = document.querySelector('select[name=hankaku]').value;
var code = document.querySelector('select[name=code]').value;
var kaigyo = document.querySelector('select[name=kaigyo]').value;
var param = {no:1,hankaku,code,kaigyo};
var url = document.querySelector('form[name=dl]').action;
var blob = Array.from(title+'\r\n');
for ( var x of noArr ){
param.no =x.value;
response = await fetch(
url,
{
method:'POST',
body:new URLSearchParams(param),
}
);
blob.push((await response.blob()).slice());
blob.push('\r\n');
if ( x.value == noEnd ) break;
await sleep(5000);
};
return blob;
};
test().then(blob=>{
var a = document.createElement('a');
a.href = URL.createObjectURL(new Blob(blob), {
type: "text/plain"
});
a.download = title+'.txt';
document.body.insertAdjacentElement('beforeend', a);
a.click();
});
})()
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。