ya_yahoo_geocode 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,21 +4,35 @@ module YaYahooGeocode
|
|
4
4
|
@@YAHOO_GEOCODE_ENDPOINT = 'http://where.yahooapis.com/geocode'
|
5
5
|
@@YAHOO_PLACES_ENDPOINT = 'http://where.yahooapis.com/v1/place'
|
6
6
|
|
7
|
+
attr_accessor :app_id
|
8
|
+
|
9
|
+
def initialize(app_id = nil)
|
10
|
+
self.app_id = app_id
|
11
|
+
end
|
12
|
+
|
7
13
|
def search_for_place(search_terms)
|
8
14
|
begin
|
9
15
|
url = @@YAHOO_GEOCODE_ENDPOINT + '?q=' + URI::escape(search_terms)
|
10
|
-
|
11
|
-
|
16
|
+
url += '&appid=' + app_id if app_id #app_id is optional for this service call
|
17
|
+
do_search(url)
|
18
|
+
rescue Exception => e
|
19
|
+
raise "Error searching for location: #{search_terms.inspect}. Got error: #{e.message}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def search_for_place_by_location(lat, lon)
|
24
|
+
begin
|
25
|
+
url = @@YAHOO_GEOCODE_ENDPOINT + '?q=' + lat.to_s + '+' + lon.to_s + '&gflags=R'
|
26
|
+
url += '&appid=' + app_id if app_id #app_id is optional for this service call
|
27
|
+
do_search(url)
|
12
28
|
rescue Exception => e
|
13
29
|
raise "Error searching for location: #{search_terms.inspect}. Got error: #{e.message}"
|
14
30
|
end
|
15
|
-
handle_errors(response_hash, search_terms)
|
16
|
-
select_match(response_hash)
|
17
31
|
end
|
18
32
|
|
19
33
|
def get_place_by_woeid(woeid)
|
20
34
|
begin
|
21
|
-
url = @@YAHOO_PLACES_ENDPOINT + '/' + woeid.to_s + '?appid=' +
|
35
|
+
url = @@YAHOO_PLACES_ENDPOINT + '/' + woeid.to_s + '?appid=' + app_id.to_s #app_id is required
|
22
36
|
response = do_http_get(url)
|
23
37
|
response = Nori.parse(response)
|
24
38
|
response['place']
|
@@ -27,16 +41,21 @@ module YaYahooGeocode
|
|
27
41
|
end
|
28
42
|
end
|
29
43
|
|
30
|
-
|
31
|
-
|
32
44
|
private
|
45
|
+
def do_search(url)
|
46
|
+
response = do_http_get(url)
|
47
|
+
response_hash = Nori.parse(response)['ResultSet']
|
48
|
+
handle_errors(response_hash)
|
49
|
+
select_match(response_hash)
|
50
|
+
end
|
51
|
+
|
33
52
|
def do_http_get(url)
|
34
53
|
Net::HTTP.get_response(URI.parse(url)).body.to_s
|
35
54
|
end
|
36
55
|
|
37
|
-
def handle_errors(response_hash
|
56
|
+
def handle_errors(response_hash)
|
38
57
|
if response_hash['Error'].to_i > 0
|
39
|
-
raise "
|
58
|
+
raise "#{response_hash['ErrorMessage']}"
|
40
59
|
end
|
41
60
|
end
|
42
61
|
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require './lib/ya_yahoo_geocode'
|
2
|
+
|
3
|
+
describe YaYahooGeocode::Client do
|
4
|
+
|
5
|
+
def sample_search_for_place
|
6
|
+
# just copy the output of a successful call
|
7
|
+
<<END
|
8
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
9
|
+
<ResultSet version="1.0"><Error>0</Error><ErrorMessage>No error</ErrorMessage><Locale>us_US</Locale><Quality>50</Quality><Found>1</Found><Result><quality>50</quality><latitude>40.796761</latitude><longitude>-73.942207</longitude><offsetlat>40.796761</offsetlat><offsetlon>-73.942207</offsetlon><radius>2100</radius><name></name><line1></line1><line2>East Harlem, NY 10029</line2><line3></line3><line4>United States</line4><house></house><street></street><xstreet></xstreet><unittype></unittype><unit></unit><postal>10029</postal><neighborhood>East Harlem</neighborhood><city>New York</city><county>New York County</county><state>New York</state><country>United States</country><countrycode>US</countrycode><statecode>NY</statecode><countycode></countycode><uzip>10029</uzip><hash></hash><woeid>23511892</woeid><woetype>22</woetype></Result></ResultSet>
|
10
|
+
<!-- gws25.maps.re3.yahoo.com uncompressed/chunked Fri Jun 10 13:42:37 PDT 2011 -->
|
11
|
+
END
|
12
|
+
end
|
13
|
+
|
14
|
+
def sample_search_for_place_by_woeid
|
15
|
+
<<END
|
16
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
17
|
+
<ResultSet version="1.0"><Error>0</Error><ErrorMessage>No error</ErrorMessage><Locale>us_US</Locale><Quality>50</Quality><Found>1</Found><Result><quality>50</quality><latitude>40.796761</latitude><longitude>-73.942207</longitude><offsetlat>40.796761</offsetlat><offsetlon>-73.942207</offsetlon><radius>2100</radius><name></name><line1></line1><line2>East Harlem, NY 10029</line2><line3></line3><line4>United States</line4><house></house><street></street><xstreet></xstreet><unittype></unittype><unit></unit><postal>10029</postal><neighborhood>East Harlem</neighborhood><city>New York</city><county>New York County</county><state>New York</state><country>United States</country><countrycode>US</countrycode><statecode>NY</statecode><countycode></countycode><uzip>10029</uzip><hash></hash><woeid>23511892</woeid><woetype>22</woetype></Result></ResultSet>
|
18
|
+
<!-- gws25.maps.re3.yahoo.com uncompressed/chunked Fri Jun 10 13:42:37 PDT 2011 -->
|
19
|
+
END
|
20
|
+
end
|
21
|
+
|
22
|
+
def sample_get_place_by_woeid
|
23
|
+
<<END
|
24
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
25
|
+
<place xmlns="http://where.yahooapis.com/v1/schema.rng" xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:uri="http://where.yahooapis.com/v1/place/28751381" xml:lang="en-US"><woeid>28751381</woeid><placeTypeName code="22">Suburb</placeTypeName><name>Midtown</name><country type="Country" code="US">United States</country><admin1 type="State" code="US-NY">New York</admin1><admin2 type="County" code="">Manhattan</admin2><admin3></admin3><locality1 type="Town">New York</locality1><locality2 type="Suburb">Midtown</locality2><postal type="Zip Code">10017</postal><centroid><latitude>40.751122</latitude><longitude>-73.977859</longitude></centroid><boundingBox><southWest><latitude>40.734409</latitude><longitude>-73.996986</longitude></southWest><northEast><latitude>40.767841</latitude><longitude>-73.958817</longitude></northEast></boundingBox><areaRank>2</areaRank><popRank>0</popRank></place>
|
26
|
+
END
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
it "should instantiate" do
|
31
|
+
YaYahooGeocode::Client.new
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "app_id" do
|
35
|
+
it "should not have an app_id by default" do
|
36
|
+
YaYahooGeocode::Client.new.app_id.should be_nil
|
37
|
+
end
|
38
|
+
it "should accept the app_id at init" do
|
39
|
+
client = YaYahooGeocode::Client.new('12345')
|
40
|
+
client.app_id.should == '12345'
|
41
|
+
end
|
42
|
+
it "should accept the app_id with a setter" do
|
43
|
+
client = YaYahooGeocode::Client.new
|
44
|
+
client.app_id = '12345'
|
45
|
+
client.app_id.should == '12345'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "#search_for_place" do
|
50
|
+
context "all goes well" do
|
51
|
+
before :each do
|
52
|
+
@client = YaYahooGeocode::Client.new
|
53
|
+
@client.stub!(:do_http_get).and_return(sample_search_for_place)
|
54
|
+
end
|
55
|
+
it "should find a result for 'East Harlem, NY, NY'" do
|
56
|
+
place_details = @client.search_for_place("East Harlem, NY, NY")
|
57
|
+
place_details['line2'].should include("East Harlem")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
context "error occurs" do
|
61
|
+
before :each do
|
62
|
+
@client = YaYahooGeocode::Client.new
|
63
|
+
@client.stub!(:do_http_get).and_raise("yahoo hates you")
|
64
|
+
end
|
65
|
+
it "should raise an exception" do
|
66
|
+
lambda { @client.search_for_place("East Harlem, NY, NY") }.should raise_error(RuntimeError) { | error|
|
67
|
+
error.message.should include("East Harlem")
|
68
|
+
error.message.should include("Got error")
|
69
|
+
}
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "#search_for_place_by_location" do
|
75
|
+
before :each do
|
76
|
+
@client = YaYahooGeocode::Client.new
|
77
|
+
@client.stub!(:do_http_get).and_return(sample_search_for_place_by_woeid)
|
78
|
+
end
|
79
|
+
it "should find a place" do
|
80
|
+
place_details = @client.search_for_place_by_location("40.796761", "-73.942207")
|
81
|
+
place_details['woeid'].should == 23511892.to_s
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "#get_place_by_woeid" do
|
86
|
+
context "all goes well" do
|
87
|
+
before :each do
|
88
|
+
# Note, an app id is actually required here
|
89
|
+
@client = YaYahooGeocode::Client.new '12345'
|
90
|
+
@client.stub!(:do_http_get).and_return(sample_get_place_by_woeid)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should find Midtown by 28751381" do
|
94
|
+
place = @client.get_place_by_woeid(28751381)
|
95
|
+
place['name'].should == "Midtown"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: ya_yahoo_geocode
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.4
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- John Hinnegan
|
@@ -52,8 +52,7 @@ files:
|
|
52
52
|
- lib/ya_yahoo_geocode.rb
|
53
53
|
- lib/ya_yahoo_geocode/client.rb
|
54
54
|
- lib/ya_yahoo_geocode/version.rb
|
55
|
-
- spec/ya_yahoo_geocode/
|
56
|
-
- spec/ya_yahoo_geocode/client__search_for_place_spec.rb
|
55
|
+
- spec/ya_yahoo_geocode/client_spec.rb
|
57
56
|
- ya_yahoo_geocode.gemspec
|
58
57
|
has_rdoc: true
|
59
58
|
homepage: ""
|
@@ -84,5 +83,4 @@ signing_key:
|
|
84
83
|
specification_version: 3
|
85
84
|
summary: This is a gem to help make various calls to yahoo's geo-aware api's
|
86
85
|
test_files:
|
87
|
-
- spec/ya_yahoo_geocode/
|
88
|
-
- spec/ya_yahoo_geocode/client__search_for_place_spec.rb
|
86
|
+
- spec/ya_yahoo_geocode/client_spec.rb
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require './lib/ya_yahoo_geocode.rb'
|
2
|
-
|
3
|
-
describe YaYahooGeocode::Client do
|
4
|
-
def sample
|
5
|
-
<<END
|
6
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
7
|
-
<place xmlns="http://where.yahooapis.com/v1/schema.rng" xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:uri="http://where.yahooapis.com/v1/place/28751381" xml:lang="en-US"><woeid>28751381</woeid><placeTypeName code="22">Suburb</placeTypeName><name>Midtown</name><country type="Country" code="US">United States</country><admin1 type="State" code="US-NY">New York</admin1><admin2 type="County" code="">Manhattan</admin2><admin3></admin3><locality1 type="Town">New York</locality1><locality2 type="Suburb">Midtown</locality2><postal type="Zip Code">10017</postal><centroid><latitude>40.751122</latitude><longitude>-73.977859</longitude></centroid><boundingBox><southWest><latitude>40.734409</latitude><longitude>-73.996986</longitude></southWest><northEast><latitude>40.767841</latitude><longitude>-73.958817</longitude></northEast></boundingBox><areaRank>2</areaRank><popRank>0</popRank></place>
|
8
|
-
END
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "#get_place_by_woeid" do
|
12
|
-
context "all goes well" do
|
13
|
-
before :each do
|
14
|
-
@client = YaYahooGeocode::Client.new
|
15
|
-
@client.stub!(:do_http_get).and_return(sample)
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should find Midtown by 28751381" do
|
19
|
-
place = @client.get_place_by_woeid(28751381)
|
20
|
-
place['name'].should == "Midtown"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require './lib/ya_yahoo_geocode'
|
2
|
-
|
3
|
-
describe YaYahooGeocode::Client do
|
4
|
-
|
5
|
-
def sample
|
6
|
-
# just copy the output of a successful call
|
7
|
-
<<END
|
8
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
9
|
-
<ResultSet version="1.0"><Error>0</Error><ErrorMessage>No error</ErrorMessage><Locale>us_US</Locale><Quality>50</Quality><Found>1</Found><Result><quality>50</quality><latitude>40.796761</latitude><longitude>-73.942207</longitude><offsetlat>40.796761</offsetlat><offsetlon>-73.942207</offsetlon><radius>2100</radius><name></name><line1></line1><line2>East Harlem, NY 10029</line2><line3></line3><line4>United States</line4><house></house><street></street><xstreet></xstreet><unittype></unittype><unit></unit><postal>10029</postal><neighborhood>East Harlem</neighborhood><city>New York</city><county>New York County</county><state>New York</state><country>United States</country><countrycode>US</countrycode><statecode>NY</statecode><countycode></countycode><uzip>10029</uzip><hash></hash><woeid>23511892</woeid><woetype>22</woetype></Result></ResultSet>
|
10
|
-
<!-- gws25.maps.re3.yahoo.com uncompressed/chunked Fri Jun 10 13:42:37 PDT 2011 -->
|
11
|
-
END
|
12
|
-
end
|
13
|
-
|
14
|
-
it "should instantiate" do
|
15
|
-
YaYahooGeocode::Client.new
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "#search_for_place" do
|
19
|
-
context "all goes well" do
|
20
|
-
before :each do
|
21
|
-
@client = YaYahooGeocode::Client.new
|
22
|
-
@client.stub!(:do_http_get).and_return(sample)
|
23
|
-
end
|
24
|
-
it "should find a result for 'East Harlem, NY, NY'" do
|
25
|
-
place_details = @client.search_for_place("East Harlem, NY, NY")
|
26
|
-
place_details['line2'].should include("East Harlem")
|
27
|
-
end
|
28
|
-
end
|
29
|
-
context "error occurs" do
|
30
|
-
before :each do
|
31
|
-
@client = YaYahooGeocode::Client.new
|
32
|
-
@client.stub!(:do_http_get).and_raise("yahoo hates you")
|
33
|
-
end
|
34
|
-
it "should raise an exception" do
|
35
|
-
lambda { @client.search_for_place("East Harlem, NY, NY") }.should raise_error(RuntimeError) { | error|
|
36
|
-
error.message.should include("East Harlem")
|
37
|
-
error.message.should include("Got error")
|
38
|
-
}
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|