プログラミング

タウンワークから案件の交通情報をスクレイピングして最寄り駅からの距離を出力する

タウンワーク見てて、この駅って最寄り駅(自分の地域)からどれくらいかかるんだろう…と思うことはないでしょうか。
僕は東京住みはじめて1ヶ月しかたってなくて、東京の駅のことなんかさっぱりで、有名な駅がどこらへんにあるか、どれくらいかかるか、なんて全くわかりません。

タウンワークって、案件それぞれに最寄り駅とか駅から徒歩何分とは書いてあるけど、最寄り駅とか近いのかとかってわからないですよね。

ほんとはタウンワーク側で、最寄り駅なんかを設定して、近い順番にソートするとか、何時間くらいで着けるとか表示するとか実装するべきだと思うのですが、そういう機能がなかったので。

Rubyで書いてみました。

urlを、案件一覧のページに、
@now_location と @APIKEY は各自で埋めてください。

require "open-uri"
require "rubygems"
require "nokogiri"

# タウンワークから案件の交通情報をスクレイピングする https://townwork.net/tokyo/kwd_0000000018/

Encoding.default_external = 'UTF-8'

url = "https://townwork.net/tokyo/kwd_0000000018/"

charset = nil
html = open(url) do |f|
  charset = f.charset
  f.read
end
doc = Nokogiri::HTML.parse(html, nil, charset)

@list=[]
p doc.xpath('//*[@id="jsi-content-wrapper"]/div[1]/div[4]/div[*]/div/a/div/table/tbody/tr[2]/td/p/text()').each{|i|
  i=i.text ;
  i=i.gsub(/徒歩.{1,3}分/,"") ;
  # p i
  @list << i
}
# p @list # => ["四ツ谷駅", "大森駅", "新大久保駅", "中野駅", "飯田橋駅", "八王子駅", "府中駅", "神田駅"]

# Google Maps APIで駅や場所の2点距離(km)を出力する
# __END__
require 'net/http'
require 'json'

Encoding.default_external = 'UTF-8'

@now_location = "桜上水駅"

if @list
else
@list="
八王子駅
八王子
"
@list=@list.split("\n").compact.reject(&:empty?)
end

until @list.empty?
  # puts 1
  # @location="八王子"
  @location = @list.pop
  @APIKEY = ""

  url="https://maps.googleapis.com/maps/api/distancematrix/json?origins=#{@now_location}&destinations=#{@location}&mode=walking&language=ja&key=#{@APIKEY}"
  uri = URI(URI.encode(url))
  response = Net::HTTP.get(uri)
  data=JSON.parse(response)

  puts @location + ":" + km= data['rows'][0]['elements'][0]['distance']['text'] ;
  # puts @location + ":" + km= data['rows'][0]['elements'][0]['duration']['text'] ; # => 電車での時間ではなく、徒歩での時間?なので使えない。

end


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です