「小説家になろう」一括ダウンロード(IE系非対応) Fork

    @@ -23,9 +23,14 @@ 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; + param.no = x.value; + progress.textContent = x.textContent; + response = await fetch( url, {
  • /*
     * @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 です。