【YQL終了対応】 クロスドメインでxmlファイルを取得したい。


クロスドメインでxmlファイルを取得したい

西川です。
クロスドメインでajax通信するために、今まではxdomainajax.jsを使用。
が、年明けにサイトを見てみると、こんなエラーがコンソールに表示されている!

Failed to load resource: net::ERR_NAME_NOT_RESOLVED

ライブラリで使用されていたYQL(Yahoo Query Language)が2019/1/3にサービス終了してしまったようです…
(「YQLは、米Yahoo! Developer Networkが提供している、ありとあらゆるWeb上のリソースにアクセスすることができるサービス」でした。ドメインも削除されている…XMLもJSONに変換してくれるので便利だったのに…)
https://developer.yahoo.com/yql/

急ぎで対応する必要があったので、いくつか調べてみました。

クロスドメインでajax通信する方法

  1. xdomainajax.js
  2. JSONP
  3. phpを使用して実現

今回の問題

(1)は今回から使えなくなったので、除外。YQLの代替サイトを探す時間はない…
また、出力側のデータを修正することはできないので(2)の方法は今回は使用できませんでした。

今回は(3)で対応していきたいと思います。
参考記事は以下です。

参考
https://qiita.com/tsunet111/items/c1a4ce1499e53fce449a

用意したもの

phpでxmlをテキストデータで取得して、jsでxmlに変換してしまいます。

ajax.php


    <?php
        if(isset($_GET["url"]) && preg_match("/^https?:/",$_GET["url"])){
        echo file_get_contents($_GET["url"]);
    }else{
        echo "error";
    }

function.js


   var xurl = encodeURIComponent('取得したいxmlのurl');
    
    $.ajax({
        url: "ajax.php?url="+xurl,
        dataType: 'text',
        type: "GET",
        success: function(res) {
            var xmlText = res,
                xmlDoc = $.parseXML(xmlText);
            console.log(res);
        }
    })

まとめ

サーバーサイドプログラムはあまり得意じゃないので、いつもjsでなんとかしようとしてましたが、
ちょっと調べてみれば、jsで書くよりも簡単にできました。

今年はphpやpythonを勉強していきたいです。