doko 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.8
1
+ 0.1.9
data/doko.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "doko"
8
- s.version = "0.1.8"
8
+ s.version = "0.1.9"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Masaki Sawamura"]
data/lib/doko.rb CHANGED
@@ -10,8 +10,32 @@ class Doko
10
10
  self.new(str).parse
11
11
  end
12
12
 
13
+ def self.deep(url)
14
+ addrs = parse(url)
15
+ if addrs.empty?
16
+ addrs = links(url).map{ |u|
17
+ parse(u)
18
+ }.flatten
19
+ end
20
+ addrs
21
+ end
22
+
23
+ def self.links(url)
24
+ uri = URI.parse(url)
25
+ out = []
26
+ doc = Nokogiri::HTML(open(url).read)
27
+ doc.search("a").each do |a|
28
+ if a[:href].match(/access/) && !a[:href].match(/http/)
29
+ out << uri + a[:href]
30
+ end
31
+ end
32
+ out.uniq
33
+ end
34
+
13
35
  def initialize(str)
14
- if str.match( /^#{URI.regexp}$/ )
36
+ if str.kind_of? URI
37
+ str = open(str.to_s).read
38
+ elsif str.match( /^#{URI.regexp}$/ )
15
39
  str = open(str).read
16
40
  end
17
41
  if str.match(/<html/i)
data/sample/Gemfile.lock CHANGED
@@ -1,8 +1,12 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ doko (0.1.8)
5
+ nokogiri
6
+
1
7
  GEM
2
8
  remote: http://rubygems.org/
3
9
  specs:
4
- doko (0.1.7)
5
- nokogiri
6
10
  nokogiri (1.5.3)
7
11
  rack (1.3.6)
8
12
  rack-protection (1.2.0)
@@ -17,5 +21,5 @@ PLATFORMS
17
21
  ruby
18
22
 
19
23
  DEPENDENCIES
20
- doko
24
+ doko!
21
25
  sinatra
data/sample/app.rb CHANGED
@@ -9,6 +9,6 @@ end
9
9
 
10
10
  post '/' do
11
11
  @url = params[:url]
12
- @addrs = Doko.parse(@url)
12
+ @addrs = Doko.deep(@url)
13
13
  erb :index
14
14
  end
data/spec/doko_spec.rb CHANGED
@@ -5,59 +5,67 @@ require 'open-uri'
5
5
 
6
6
  describe "Doko" do
7
7
 
8
- it "should retrieve address from string" do
9
- Doko.parse("ここは\n東京都港区芝浦3-4-1\nです").first.should == "東京都港区芝浦3-4-1"
10
- end
11
-
12
- it "should retrieve address from html" do
13
- addrs = Doko.parse(open("http://r.tabelog.com/tokyo/A1304/A130401/13130066/").read)
14
- addrs.first.should == "東京都新宿区新宿3-38-1 ルミネエスト7F"
15
- end
16
-
17
- it "should return addr from tabelog url" do
8
+ describe "parse" do
9
+
10
+ it "should retrieve address from string" do
11
+ Doko.parse("ここは\n東京都港区芝浦3-4-1\nです").first.should == "東京都港区芝浦3-4-1"
12
+ end
13
+
14
+ it "should retrieve address from html" do
15
+ addrs = Doko.parse(open("http://r.tabelog.com/tokyo/A1304/A130401/13130066/").read)
16
+ addrs.first.should == "東京都新宿区新宿3-38-1 ルミネエスト7F"
17
+ end
18
+
19
+ it "should return addr from tabelog url" do
18
20
  addrs = Doko.parse("http://r.tabelog.com/kanagawa/A1401/A140104/14001924/")
19
21
  addrs.first.should == "神奈川県横浜市中区海岸通1-1"
20
- end
21
-
22
- it "should return from 30min" do
23
- addrs = Doko.parse("http://30min.jp/place/23481")
24
- addrs.first.should == "東京都墨田区業平1-21-4 第2刀川ビル1F"
25
- end
26
-
27
- it "should return addr from site 1" do
28
- Doko.parse("http://thanikitchen.com/")[0] == "東京都品川区南大井6-11-10"
29
- Doko.parse("http://thanikitchen.com/")[1] == "東京都品川区大井7-29-8"
30
- end
31
-
32
- it "should return addr in kyoto" do
33
- addrs = Doko.parse("http://www.tripadvisor.jp/Hotel_Review-g298564-d2317992-Reviews-Royal_Park_Hotel_The_Kyoto-Kyoto_Kyoto_Prefecture_Kinki.html")
34
- addrs.first.should == "京都府京都市中京区三条通河原町東入ル"
35
- end
36
-
37
- it "should return addr in kumamoto" do
38
- addrs = Doko.parse("http://travel.rakuten.co.jp/HOTEL/68236/68236_std.html")
39
- addrs.first.should == "熊本県阿蘇郡南阿蘇村河陽4673-18"
40
- end
41
-
42
- it do
43
- Doko.parse("http://www.ynu.ac.jp/index.html").first.should == "神奈川県横浜市保土ケ谷区常盤台79-1"
44
- end
45
-
46
- it do
47
- Doko.parse("http://www.nissan-stadium.jp/").first.should == "横浜市港北区小机町3300"
22
+ end
23
+
24
+ it "should return from 30min" do
25
+ addrs = Doko.parse("http://30min.jp/place/23481")
26
+ addrs.first.should == "東京都墨田区業平1-21-4 第2刀川ビル1F"
27
+ end
28
+
29
+ it "should return addr from site 1" do
30
+ Doko.parse("http://thanikitchen.com/")[0] == "東京都品川区南大井6-11-10"
31
+ Doko.parse("http://thanikitchen.com/")[1] == "東京都品川区大井7-29-8"
32
+ end
33
+
34
+ it "should return addr in kyoto" do
35
+ addrs = Doko.parse("http://www.tripadvisor.jp/Hotel_Review-g298564-d2317992-Reviews-Royal_Park_Hotel_The_Kyoto-Kyoto_Kyoto_Prefecture_Kinki.html")
36
+ addrs.first.should == "京都府京都市中京区三条通河原町東入ル"
37
+ end
38
+
39
+ it "should return addr in kumamoto" do
40
+ addrs = Doko.parse("http://travel.rakuten.co.jp/HOTEL/68236/68236_std.html")
41
+ addrs.first.should == "熊本県阿蘇郡南阿蘇村河陽4673-18"
42
+ end
43
+
44
+ it do
45
+ Doko.parse("http://www.ynu.ac.jp/index.html").first.should == "神奈川県横浜市保土ケ谷区常盤台79-1"
46
+ end
47
+
48
+ it do
49
+ Doko.parse("http://www.nissan-stadium.jp/").first.should == "横浜市港北区小机町3300"
50
+ end
51
+
52
+ it do
53
+ Doko.parse("http://atnd.org/events/28384").first.should == "東京都千代田区神田駿河台2-3 DH2001Bldg."
54
+ end
55
+
56
+ it do
57
+ page = open("http://www.nttr.co.jp/corporate_profile/index.htm").read.encode("utf-8")
58
+ Doko.parse(page).first.should == "東京都港区芝浦3-4-1 グランパークタワー"
59
+ end
60
+
61
+ it do
62
+ Doko.parse("http://www.stadium2002.com/stadium/index.php").first.should == "さいたま市緑区中野田500"
63
+ end
48
64
  end
49
65
 
50
- it do
51
- Doko.parse("http://atnd.org/events/28384").first.should == "東京都千代田区神田駿河台2-3 DH2001Bldg."
66
+ describe "deep" do
67
+ it do
68
+ Doko.deep("http://www.risonare-atami.com/").first.should == "静岡県熱海市水口町2-13-1"
69
+ end
52
70
  end
53
-
54
- it do
55
- page = open("http://www.nttr.co.jp/corporate_profile/index.htm").read.encode("utf-8")
56
- Doko.parse(page).first.should == "東京都港区芝浦3-4-1 グランパークタワー"
57
- end
58
-
59
- it do
60
- Doko.parse("http://www.stadium2002.com/stadium/index.php").first.should == "さいたま市緑区中野田500"
61
- end
62
-
63
71
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doko
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -146,7 +146,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
146
146
  version: '0'
147
147
  segments:
148
148
  - 0
149
- hash: 3221838572154724490
149
+ hash: 2942783918463996752
150
150
  required_rubygems_version: !ruby/object:Gem::Requirement
151
151
  none: false
152
152
  requirements: