YQLがなくなったのでJSONPで対策してみた

以前、YQLが急に使えなくなった際に

上記記事のような対策を取ったことがありましたが

今回は仕様が変わったとかそんな話ではなく

YQLそのものがなくなってしまいました。

そこで、対策についてあちこち探してはみたのですが

.htaccessPHPでの対策が多く、

残念ながら私が使わせてもらっているサーバーでは

そのどちらも使えない様子。

そこで、それ以外の対策として行った内容について備忘録を残しておきます。

 

jquery.xdomainajax.jsは不要

query.yahooapis.comが使えない以上、これは不要ですので

<script src="http://xxxx/jquery.xdomainajax.js"></script>

上記記述は削除。

 

CSVJSONへの変換

今回の方法では、CSVファイルでは駄目なようなのでJSONファイルに変換を行います。

変換方法については色々あるとは思いますが

私はこちらのサイトで変換しました。

その結果・・・

f:id:LITTLEWING:20190114133836j:plain

こんな感じのCSVファイルから・・・

 

f:id:LITTLEWING:20190114133847j:plain

こんな感じのJSONファイルが出来上がりました。

ただしこれだけでは不十分なので、JSONファイル内に以下のような感じで追記。

callback([
データ部分
]);

先頭に「callback(」を、そして最後に「);」を追加します。

 

データ取得処理

変更前

var stamp= new Date().getTime();
  url = 'http://xxxx/xxxx.csv?stamp='+stamp;
  $.get(url, function(csvData){
    var tempArray = csvData;
    if(typeof csvData.responseText != "undefined")
    {
      tempArray = csvData.responseText.split("\n");
    }
    else
    {
      tempArray = csvData.split("\n");
    }
    var cnt=0;
    for(var i = 3; i<tempArray.length-2;i++){
      if(trim(tempArray[i])!="")
      {
        csvArray[cnt] = tempArray[i].split(",");
        cnt=cnt+1;
      }
    }
  });
}

変更後

var stamp= new Date().getTime();
url = 'http://xxxx/xxxx.json?stamp='+stamp;
$.ajax({
    type: "GET",
    url: url,
    dataType: "jsonp",
    jsonpCallback:"callback",
    timeout:5000
})
.done(function(csvData){
    var cnt=0;
    for(var i = 1; i<csvData.length;i++){
        if(csvData[i]!="")
        {
            csvArray[cnt] = csvData[i];
            cnt=cnt+1;
        }
    }
})
.fail(function(jqXHR,textStatus,errorThrown){
  console.log('['+textStatus+'] '+errorThrown);
});

dataTypeにjsonpを指定。ここが大事なポイント。

あと、jsonpCallbackに先ほどJSONファイル内に追記した名称(今回はcallback)を指定。

 

以上の対策で、ひとまずデータの取得は行えるようになりました。

ただ、以前はデータがカンマ区切りで取得したのを配列にセットしていたため

取得したデータの取り扱いにも手を加える必要は出てくるかと思います。



【1/28追記】

数日後、またデータ取得が出来ない状況に。

parsererror callback was not called

とかいわれても、あれからソース弄ってないじゃん・・・。

で、あちこち調べてみた結果

このサイトで書かれていることが解決の鍵となりました。


MIME Typeの関係で拡張子をjsにしておくとよいです。


「xxxx.json」を「xxxx.js」のように拡張子を変更。ただそれだけ。

数日あれこれと調べまくった苦労は何なのよ・・・

というくらいアッサリ動きました。

データファイルを再アップロードした際に

MIME Typeが変わってしまっていた、ということなんだろうか?