Closed MurtadhaQahtan closed 3 years ago
問題を起こしている小説は以下のもので合っていますか? https://ncode.syosetu.com/n1996ed/
また、スクリーンショットから判断すると「なろう検索」タブからのダウンロードかと思われます。 それであれば、恐らくは Detail ボタンを押して出てきた詳細画面にて、Download ボタンを押すことで壊れているページを再度ダウンロードしようと試みそうに思いますが、それは試しましたでしょうか?
yes, that one is correct also I tried "detail" and "download" but it didn't work
なるほど。
とりあえず気になる点がいくつかあったので後日対応します。
それとは別に、その失敗しているテキストを確認したいのですが、まだ残っているでしょうか。
あぁ、やはり同一IPからの多重ダウンロードにひっかかっているわけですね。
それはそれとして、そのテキストは本当に「
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
No, it appears different when I posted it here
no, it appears different when I put it here
this is the original
markdown の Syntax highlighting を使ってください。 https://guides.github.com/features/mastering-markdown/
「```」だけの行で目的のテキストを挟みます。
<?xml...>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>エラー</title>
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta name="format-detection" content="telephone=no" />
<link rel="shortcut icon" href="https://static.syosetu.com/view/images/narou.ico" />
<link rel="icon" href="https://static.syosetu.com/view/images/narou.ico" />
<link rel="alternate" href="http://nk.syosetu.com/0/" media="handheld" />
<link rel="stylesheet" type="text/css" href="https://static.syosetu.com/view/css/lib/jquery.hina.css?oyb9lo" media="screen,print" />
<link rel="stylesheet" type="text/css" href="https://static.syosetu.com/novelview/css/novel_view.css?pcaz2v" media="screen,print" />
<script type="text/javascript"><!--
var domain = 'syosetu.com';
function wOpen(URL,NAME,OPTION){WO1 = window.open(URL,NAME,OPTION);WO1.window.focus();}
//--></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript" src="https://static.syosetu.com/view/js/lib/jquery.hina.js?oyez8w"></script>
<script type="text/javascript" src="https://static.syosetu.com/view/js/global.js?oyez8w"></script>
<script type="text/javascript" src="https://static.syosetu.com/novelview/js/novelview.js?p4feug"></script>
<!-- testutttt -->
<script type="text/javascript">
var microadCompass = microadCompass || {};
microadCompass.queue = microadCompass.queue || [];
</script>
<script type="text/javascript" charset="UTF-8" src="//j.microad.net/js/compass.js" onload="new microadCompass.AdInitializer().initialize();" async></script>
<!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="https://ncode.syosetu.com/0/
dc:identifier="https://ncode.syosetu.com/0/"
dc:title=""
trackback:ping="https://trackback.syosetu.com/send/novel/ncode//" />
</rdf:RDF>
-->
<script type="text/javascript" class="microad_blade_track">
<!--
var microad_blade_jp = microad_blade_jp || { 'params' : new Array(), 'complete_map' : new Object() };
(function() {
var param = {'co_account_id' : '13952', 'group_id' : '', 'country_id' : '1', 'ver' : '2.1.0'};
microad_blade_jp.params.push(param);
var src = (location.protocol == 'https:')
? 'https://d-cache.microad.jp/js/blade_track_jp.js' : 'http://d-cache.microad.jp/js/blade_track_jp.js';
var bs = document.createElement('script');
bs.type = 'text/javascript'; bs.async = true;
bs.charset = 'utf-8'; bs.src = src;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(bs, s);
})();
-->
</script>
</head>
<body onload="initRollovers();">
<a id="pageBottom" href="#footer">↓</a><div id="novel_header">
<ul id="head_nav">
<li id="login">
<a href="https://ssl.syosetu.com/login/input/"><span class="attention">ログイン</span></a>
</li>
<li><a href="https://ncode.syosetu.com/novelview/infotop/ncode/0/">小説情報</a></li>
<li><a href="https://novelcom.syosetu.com/impression/list/ncode//">感想</a></li>
<li><a href="https://novelcom.syosetu.com/novelreview/list/ncode//">レビュー</a></li>
<li><a href="https://pdfnovels.net/0/" class="menu" target="_blank">縦書きPDF</a></li>
<li>
<a
href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fncode.syosetu.com%2F0%2F&hashtags=narou%2Cnarou0">
<img src="https://static.syosetu.com/novelview/img/Twitter_logo_blue.png?nrkioy" class="menu" style="margin-left:7px; margin-right:7px;" height="20px" />
</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
</li></ul>
<div id="novelnavi_right">
<div class="toggle" id="menu_on">表示調整</div>
<div class="toggle_menuclose" id="menu_off">閉じる</div>
<div class="novelview_navi">
<img src="https://static.syosetu.com/novelview/img/novelview_on.gif?n7nper" width="100" height="20" style="cursor:pointer;" onclick="sasieclick(true);" id="sasieflag" alt="挿絵表示切替ボタン" />
<script type="text/javascript"><!--
sasieinit();
//--></script>
<div class="color">
▼配色<br />
<label><input type="radio" value="0" name="colorset" />指定なし(作者設定優先)</label><br />
<label><input type="radio" value="1" name="colorset" />標準設定</label><br />
<label><input type="radio" value="2" name="colorset" />ブラックモード</label><br />
<label><input type="radio" value="3" name="colorset" />ブラックモード2</label><br />
<label><input type="radio" value="4" name="colorset" />通常[1]</label><br />
<label><input type="radio" value="5" name="colorset" />通常[2]</label><br />
<label><input type="radio" value="6" name="colorset" />シンプル</label><br />
<label><input type="radio" value="7" name="colorset" />おすすめ設定</label>
</div>
▼メニューバー<br />
<label><input type="checkbox" name="fix_menu_bar" />追従</label>
<span id="menu_off_2">×閉じる</span>
</div><!--novelview_navi-->
</div><!-- novelnavi_right -->
</div><!--novel_header-->
<div id="container">
<div id="contents_main">
<h1>エラー</h1>
<div class="description">
<span class="attention">エラーが発生しました。</span>
<div class="nothing">接続規制:同一IPからの連続したアクセスを検知しサーバが一時的に接続を遮断しました。20秒程度待った上で再度、アクセスしてください。</div>
エラーの原因がわからない場合は<br />
<strong><a href="https://syosetu.com/help/top/" class="help">ヘルプ</a></strong>
<strong><a href="https://syosetu.com/man/touroku/" class="man">各種マニュアル</a></strong>をご確認ください。
</div>
</div><!--contents_main-->
<div class="koukoku_728">
<!--/* VASCO Javascript Tag v */-->
<script type='text/javascript'><!--//<![CDATA[
document.MAX_ct0 ='INSERT_CLICKURL_HERE';
if (location.protocol=='https:') {
} else {
var m3_u = 'http://vsc.send.microad.jp/delivery/ajs.php';
var m3_r = Math.floor(Math.random()*99999999999);
if (!document.MAX_used) document.MAX_used = ',';
document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
document.write ("?zoneid=16628");
document.write ('&snr=1&cb=' + m3_r);
if (document.MAX_used != ',') document.write ("&exclude=" + document.MAX_used);
document.write (document.charset ? '&charset='+document.charset : (document.characterSet ? '&charset='+document.characterSet : ''));
document.write ("&loc=" + encodeURIComponent(window.location));
if (document.referrer) document.write ("&referer=" + encodeURIComponent(document.referrer));
if (document.context) document.write ("&context=" + encodeURIComponent(document.context));
if ((typeof(document.MAX_ct0) != 'undefined') && (document.MAX_ct0.substring(0,4) == 'http')) {
document.write ("&ct0=" + encodeURIComponent(document.MAX_ct0));
}
if (document.mmm_fo) document.write ("&mmm_fo=1");
document.write ("'><\/scr"+"ipt>");
}
//]]>--></script><noscript><a href='http://vsc.send.microad.jp/delivery/ck.php?n=af67063c&cb=INSERT_RANDOM_NUMBER_HERE' target='_blank'><img src='http://vsc.send.microad.jp/delivery/avw.php?zoneid=16628&cb=INSERT_RANDOM_NUMBER_HERE&n=af67063c&ct0=INSERT_CLICKURL_HERE&snr=1' border='0' alt='' /></a></noscript>
</div><!--koukoku_728-->
<a id="pageTop" href="#main">↑ページトップへ</a>
</div><!--container-->
<!-- フッタここから -->
<div id="footer">
<ul class="undernavi">
<li><a href="https://syosetu.com">小説家になろう</a></li>
</ul>
</div><!--footer-->
<!-- フッタここまで -->
<!-- Google Tag Manager -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-WQ7JDB"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-WQ7JDB');</script>
<!-- End Google Tag Manager -->
</body></html>tml>ml>"```
なるほど…… わかりました。ありがとうございます。
なお、"HTTP 200 OK" 以外であればエラーとするような変更を加えました。 https://github.com/limura/NovelSpeaker/commit/e82fdc3a8a5a2fe062caed433c4684997e5a868a このエラーを吐いている時に "HTTP 200 OK" 以外を返しているのならエラーでダウンロードが停止すると思います。 まだ試していませんが。
sorry, I don't understand these things very well. but I hope this problem gets resolved thanks for your great work in advance
なお、このエラーメッセージを読む限りにおいては、「小説家になろう」サイトのダウンロード数制限を超えるダウンロードを行っているようです。 正確な値はわかりませんが、同じIPアドレスから10秒間に11回以上のリクエストを行うと、この制限に抵触してしばらくリクエストが全て失敗するという動作をすると記憶しています。
このエラーが出る場合は共有しているIPアドレスを使っているユーザが、小説家になろうのサイトへアクセスしている事が考えられます。 (例えば複数の iOS端末 に NovelSpeaker をインストールして同時にダウンロードしようとするとこの制限に抵触するはずです)
Ah........ yes, it's exactly as you say. I understand
NovelSpeaker は小説家になろうのサイトに対しては10.5秒中に最大10回のダウンロードを試みます。 なので、ダウンロードを試みる端末は一度に一つに絞って運用すればこの問題は概ね回避できると思います。
So I only need to avoid using two devices at the same time. I understand. Thank you very much
貴重な不都合報告ありがとうございました。
それはそれとして、一度ダウンロードされてしまったエラーのHTMLを排除する方法がうまく動いていないのは困り物ですね。 こちらの問題にも対処しようと思いますので、この issue はまだ close しません。
確認しました。
一度ダウンロードされたエラーのHTMLを排除する部分は以下の部分です。 https://github.com/limura/NovelSpeaker/blob/e82fdc3a8a5a2fe062caed433c4684997e5a868a/NovelSpeaker/NarouDownloadQueue.m#L414
この部分はHTMLであった場合には該当のページを削除して再度ダウンロードキューに追加するという動作をしています。 先程確認したところ、この部分は正しく動作しているのですが、以下の操作をした場合に一つのページが保存に失敗している事が確認されました。
この 4. の時点で開かれているページについては保存しようとするとconflictを起こして保存に失敗しています。原因はまた後で調査しようと思います。
なおこの問題は、1. の時点で開いているページを正常にダウンロードできているページに変更してから 2. 以降の操作をすることで回避できそうです。
Version 2.0.0 としてリリースしたのでこのIssueはcloseします。
sometimes when attempting to download a new chapter. a problem happens, like in the photo below.
and the only solution is to delete the whole novel and redownload it