National Stock Exchange からテキスト ファイルをダウンロードするプログラムを作成しました。これはダウンロード機能です:
downloadNseBhav: func [Date] [
NSE_Url: to-url rejoin [
"http://nseindia.com/content/historical/EQUITIES/"
(uppercase form-date Date "%Y/%b/") "cm" Sd "bhav.csv.zip"
; format NSE Bhavcopy url
]
either error? try [
write/binary to-file rejoin ["./NSE/" Sd "bhav.csv.zip"]
read/binary NSE_Url
; download bhavcopy zip file to disk in ./NSE folder
][
append Log/text "Server made a boo boo ......NSE Bhavcopy not found^/^/"
scroll-text Log
Exit
][
append Log/text "Downloaded NSE Bhavcopy Zip^/"
scroll-text Log
]
]
必要なファイルが存在するにもかかわらず、ファイルが見つからないというメッセージが何度も表示されます。複数のファイルが要求され、それらのいくつかがダウンロードされない場合、これはイライラします。再試行すると、ファイルを受け取ります。
wait
Rebol 2 ドキュメントのコマンドを読んだところ、ポートを開くためのデフォルトは待機であることがわかりました。私は何を間違っていますか?サーバーからの応答を得るために Rebol を数秒間待機させる方法はありますか?
編集 - 毎日のアクティビティのファイルがあります。たとえば、10 日間 (1 月 1 日から 1 月 10 日まで) ダウンロードしているとします。その後、数日間はファイルが取得され、数日間はエラーが発生します。同じ日付ですぐに再度ダウンロードすると、不足しているファイルがいくつか取得されます。3 番目と 4 番目try は残りのすべてのファイルを取得します. ただし、ファイルが見つからないというエラーは、日付のいずれかで毎回ランダムになります.
良い、
- tomcが言ったように、タイムアウトを10秒に増やしました。
- Graham Chiu が提案したように、失敗したもののリストも収集しました
Hostilfork が示唆するように、Wireshark を使用できませんでしたが、以下のようにコードを少し変更することでエラーをトラップできました。
either error? err: try [ BC: read/binary NSE_Url ] ; download bhavcopy zip file to disk in ./NSE folder [ err: disarm err probe err write/append %log.txt rejoin ["NSE EQUITIES/bhavcopy not found " DateYmd "^/"] Exit ] [] ]
その後、2015 年 12 月 1 日から 2015 年 12 月 15 日まで 2 回ダウンロードしました。
最初の試行で失敗したリスト -
NSE EQUITIES/bhavcopy not found 2015-12-08
NSE EQUITIES/bhavcopy not found 2015-12-09
2 回目の試行で失敗したリスト -
NSE EQUITIES/bhavcopy not found 2015-12-01
NSE EQUITIES/bhavcopy not found 2015-12-02
エラーメッセージはすべてのケースで同じでした-
emake object! [
code: 507
type: 'access
id: 'no-connect
arg1: "nseindia.com"
arg2: none
arg3: none
near: [BC: read/binary NSE_Url]
where: 'open-proto
]
先ほどエラーを正しくトラップできなかったことをお許しください。私はRebolを初めて使用します。
これに対する解決策は何なのかわかりません。8 mbps のネット接続があり、完全に機能しています。
好奇心から、Rebol コンソールを開いて google.co.in に接続しました。これは、2 回同時に試行した結果です。
test: read http:// google . co. in
Access Error: Cannot connect to google.co.in
Where: open-proto
Near: test: read http://google.co.in
test: read http://google.co.in
== {<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en-IN"><head><meta content="text/html; charset=UTF...
したがって、現時点では、両方の提案に従っています。
もう1つ学んだこと-トラップエラーはこのようには機能しません-
either error? err: try [
write/binary to-file rejoin ["./NSE/" Sd "bhav.csv.zip"]
read/binary NSE_Url]
ファイルを変数に読み込む必要があります。そうしないと、ファイルが実際に受信された場合、Rebol2 がエラーでクラッシュします - エラー: 値が必要です。