9729


[こちらのサイト](http://www.jsf.co.jp/de/stock/search.php?target=pcsl)のcsvを毎日さくらのVPSから自動で保存しています。

保存には以下の様なスクリプトを使っていて、今までは問題なくまた現在も4/24、4/17以外の最近のデータは取得できます。またローカルからアクセスした場合は全て問題なくダウンロードできます。

[code]

      def get_csv(date_string)
        stream = open("http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=#{date_string}", "r:shift_jis")
        return if stream.content_type != "text/x-csv"
        csv_text = stream.read.encode("utf-8", invalid: :replace, undef: :replace)
      end
    
      get_csv("2015-04-17")
    
[/code]

もし、相手先のサーバーがVPSからのアクセスをはじくようになったのであれば取得は諦めて別の方法を探そうと思うのですが、他の日付を取得できることからアクセス制限ではないと思うんです。

どうやらサーバー上から取得した時は`stream.content_type`が`text/html`になってしまっているのが原因のようです。

何故このような事が起こるかわからないのですが、調査方法また解決策はどのようなものがありますか？


CC BY-SA 3.0
2015-04-30T13:17:11.503
9700
2015-05-02T16:58:55.450
2015-05-02T16:58:55.450
3271
3271
question
ruby
同一サイトの特定のファイルだけがローカルで取得できてサーバで取得できない時の対処法


即席のスクリプトを作ってローカルで4/1-4/30のデータ(content-type)を取得してみました。

[code]

    require 'open-uri'
    
    def get_csv(date_string)
      url = "http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=#{date_string}"
      puts url
      stream = open(url, "r:shift_jis")
      stream.content_type
      # return if stream.content_type != "text/x-csv"
      # csv_text = stream.read.encode("utf-8", invalid: :replace, undef: :replace)
    end
    
    (1..30).each do |i|
      puts get_csv("2015-04-#{i.to_s.rjust(2, '0')}")
      sleep 0.5
    end
    
[/code]

実行結果（text/x-csvとtext/htmlが混在している）

[code]

    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-01
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-02
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-03
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-04
    text/html
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-05
    text/html
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-06
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-07
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-08
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-09
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-10
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-11
    text/html
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-12
    text/html
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-13
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-14
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-15
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-16
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-17
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-18
    text/html
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-19
    text/html
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-20
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-21
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-22
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-23
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-24
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-25
    text/html
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-26
    text/html
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-27
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-28
    text/x-csv
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-29
    text/html
    http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-30
    text/x-csv
    
[/code]

で、この実行結果と <http://www.jsf.co.jp/de/stock/search.php?target=pcsl>
を開いてみて思ったのですが、失敗しているのは単純に「データが存在しない日付がある」というだけではありませんか？

「ローカルからアクセスした場合は全て問題なくダウンロードできる」というのも、実はたまたまデータが存在している日付のみにアクセスしたから、ではないですか？

実際、ブラウザで
[http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-18](http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-18)
にアクセスしてみると「指定された日付の品貸料率一覧表はありません。」という文言が表示されます。  
一方、
[http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-17](http://www.jsf.co.jp/de/stock/dlcsv.php?target=pcsl&date=2015-04-17)
であればCSVファイルがダウンロードされます。

もう一度対象の日付と実行結果の関係を見直してみてください。

## P.S.

質問で挙げられているコードでは、引数の`date_string`が使われていません。`@date`がnilだったりするとうまく動かないと思うので、実際に使っているコードにも問題が無いか確認してみてください。


CC BY-SA 3.0
2015-05-01T03:21:06.097
9729
2015-05-01T03:21:06.097
85
9700
answer