「小説家になろう」一括ダウンロード(IE系非対応)
by
Lhankor_Mhy
2019-04-13 [2019/04/13 10:12:11]
テキストファイルダウンロードページで、「部分番号」の指定を末尾にして先頭の部分からダウンロード。その後、txt形式で保存します。サーバに配慮して各部分は5秒ごとにリクエストを飛ばしますので、時間がかかります。なお、利用規約14条17に抵触するかもしれないので、自己責任で使ってください。
-
/*
* @title 「小説家になろう」一括ダウンロード(IE系非対応)
* @description テキストファイルダウンロードページで、「部分番号」の指定を末尾にして先頭の部分からダウンロード。その後、txt形式で保存します。サーバに配慮して各部分は5秒ごとにリクエストを飛ばしますので、時間がかかります。なお、利用規約14条17に抵触するかもしれないので、自己責任で使ってください。
* @__caution__ https://syosetu.com/site/rule/
* @include https://ncode.syosetu.com/txtdownload/top/ncode/*
* @license public domain
* @require
* @javascript_url
*/
(async ()=>{
const sleep = time => new Promise(resolve=>setTimeout(resolve,time));
const title = document.querySelector('title').textContent.split(' - ')[0];
const noArr = document.querySelectorAll('select[name=no] option');
const noEnd = document.querySelector('select[name=no]').value;
const hankaku = document.querySelector('select[name=hankaku]').value;
const code = document.querySelector('select[name=code]').value;
const kaigyo = document.querySelector('select[name=kaigyo]').value;
const param = {no:1,hankaku,code,kaigyo};
const url = document.querySelector('form[name=dl]').action;
let blob = [title+'\r\n'];
const progress = document.createElement('div');
document.body.insertAdjacentElement('beforeend', progress);
for ( let x of noArr ){
param.no = x.value;
progress.textContent = x.textContent;
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);
};
const 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 です。