memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

Javascriptでスクレイピングしてみた

JRと西鉄の乗り継ぎを一発で調べるページまたはアプリがないため、ずいぶん前にphpスクレイピングしたことがあります。こちら

Yahooや西鉄バスのページが変更されると検索できなくなるため、そのたびに修正していました。

西鉄バスのページが数日前に変更になったらしく表示されなくなりました。

せっかくの機会なのでjavascript版に書き換えてみました。

参考にさせていただいたのは以下のページです。

Link: Javascriptスクレイピング!jquery.xdomainajax.js(ITかあさん)

jQueryもなんとなく使っている感じです。

知っている人からするとめちゃくちゃだと思いますが。。。とりあえず動きますので晒します。もしかすると何かの役に立つかもしれませんので。ちなみに以前はYahoo乗換案内を利用させていただいていたのですがレスポンスがありませんでした(YQLを利用しているからなのでしょうか?)。とりあえずGoogleに変えました。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <script src="jquery.xdomainajax.js" type="text/javascript"></script>
  <meta content="width=device-width,initial-scale=1.0" name="viewport">
  <title>いき</title>
</head>
<body>
<pre>
博多⇒新飯塚
<div id="t2"></div>

新飯塚⇒大学
<div id="t3"></div>
</pre>

  <script>
    function jr(res) {
      var content = $(res).find('div.altroute-info');
      var content2 = "";
      jQuery.each(content, function() {
        var tmp = $(this).text();
        if (tmp.indexOf(':') > 0) {
          var p = tmp.indexOf('-');
          content2 += tmp.substring(p-6, p+7);
          content2 += "\n";
        }
      });
      return content2;
    }
  
    function nishitetsu(res) {
      var content = $(res).find('td').attr('rowspan', '2');
      var content2 = "";
      jQuery.each(content, function() {
        var tmp = $(this).text();
        if (tmp.indexOf(':') > 0 && tmp.indexOf('通過済') == -1) {
          var p = tmp.indexOf(':');
          content2 += tmp.substring(p-2, p+3);
          var p1 = tmp.indexOf('約');
          var p2 = tmp.indexOf('分');
          if (p1 > 0) {
            content2 += '約' + tmp.substring(p1+1, p2) + "分遅れ";
          }
          content2 += "\n";
        }
      });
      return content2;
    }

    $(document).ready(function(){
      $.ajax({
        url: 'https://www.google.co.jp/maps?ie=UTF8&saddr=博多&daddr=新飯塚',
        type: 'GET',
        cache: false,
        success: function(res) { $('div#t2').text(jr(res.responseText)); }
      });
      $.ajax({
        url: 'http://jik.nishitetsu.jp/busroute?f=busnavi&ftei_type=0&f_list=0001%2C814960&ttei_type=0&t_list=0001%2C813130&lang=ja',
        type: 'GET',
        cache: false,
        success: function(res) { $('div#t3').text(nishitetsu(res.responseText)); }
      });
    });
  </script>
</body>
</html>