以前、YQLが急に使えなくなった際に
上記記事のような対策を取ったことがありましたが
On Jan. 3, 2019, YQL service at https://t.co/g4W9RhdMLk will be retired. YQL based services that use https://t.co/g4W9RhdMLk, including users of https://t.co/5IkUaEykdl, will no longer operate. Yahoo Weather API users see the tweet below for info about continuing your service.
— Y! Developer Network (@ydn) 2018年12月31日
今回は仕様が変わったとかそんな話ではなく
YQLそのものがなくなってしまいました。
そこで、対策についてあちこち探してはみたのですが
残念ながら私が使わせてもらっているサーバーでは
そのどちらも使えない様子。
そこで、それ以外の対策として行った内容について備忘録を残しておきます。
query.yahooapis.comが使えない以上、これは不要ですので
<script src="http://xxxx/jquery.xdomainajax.js"></script>
上記記述は削除。
今回の方法では、CSVファイルでは駄目なようなのでJSONファイルに変換を行います。
変換方法については色々あるとは思いますが
私はこちらのサイトで変換しました。
その結果・・・
こんな感じのCSVファイルから・・・
こんな感じの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が変わってしまっていた、ということなんだろうか?