4

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
    ]   
]

必要なファイルが存在するにもかかわらず、ファイルが見つからないというメッセージが何度も表示されます。複数のファイルが要求され、それらのいくつかがダウンロードされない場合、これはイライラします。再試行すると、ファイルを受け取ります。

waitRebol 2 ドキュメントのコマンドを読んだところ、ポートを開くためのデフォルトは待機であることがわかりました。私は何を間違っていますか?サーバーからの応答を得るために Rebol を数秒間待機させる方法はありますか?

編集 - 毎日のアクティビティのファイルがあります。たとえば、10 日間 (1 月 1 日から 1 月 10 日まで) ダウンロードしているとします。その後、数日間はファイルが取得され、数日間はエラーが発生します。同じ日付ですぐに再度ダウンロードすると、不足しているファイルがいくつか取得されます。3 番目と 4 番目try は残りのすべてのファイルを取得します. ただし、ファイルが見つからないというエラーは、日付のいずれかで毎回ランダムになります.

良い、

  1. tomcが言ったように、タイムアウトを10秒に増やしました。
  2. Graham Chiu が提案したように、失敗したもののリストも収集しました
  3. 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 がエラーでクラッシュします - エラー: 値が必要です。

4

2 に答える 2

2

tomc が言うように、Web サーバーの応答が遅い場合はタイムアウトを変更できます。これが、これらの問題が発生している理由であり、断続的である理由です。おそらく、結果がキャッシュされ、収集の準備ができたのは 2 回目です。

また、失敗したもののリストを収集し、2 回目のパスでそれらを再試行することもできます。

ところで

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
]

と書かれる

downloadNseBhav: func [Date] [
NSE_Url: rejoin [
    http://nseindia.com/content/historical/EQUITIES/
    uppercase form-date Date "%Y/%b/" "cm" Sd "bhav.csv" %.zip

    ; format NSE Bhavcopy url
]

再結合により、シリーズはシリーズの最初のものと同じデータ型になるため、括弧は不要です。

于 2016-01-16T01:21:04.777 に答える