zillow_demographics 0.0.1 → 0.0.2
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.
- data/lib/zillow_demographics/people.rb +1 -1
- data/lib/zillow_demographics/version.rb +1 -1
- data/spec/client_spec.rb +29 -0
- data/spec/people_spec.rb +32 -0
- data/spec/spec_helper.rb +13 -0
- data/zillow_demographics.gemspec +3 -2
- metadata +26 -12
- data/client.rb +0 -23
- data/national.rb +0 -48
- data/people.rb +0 -63
@@ -35,7 +35,7 @@ module ZillowApi
|
|
35
35
|
|
36
36
|
def mode_of_transit(location)
|
37
37
|
key = parsed_response(location).search("uniqueness").search("category").last.attributes['type'].value.downcase
|
38
|
-
value = parsed_response(location).search("uniqueness").search("category").last.text
|
38
|
+
value = parsed_response(location).search("uniqueness").search("category").last.children.map {|s| s.text}
|
39
39
|
{ key => value }
|
40
40
|
end
|
41
41
|
|
data/spec/client_spec.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ZillowApi::Client do
|
4
|
+
let(:client) { ZillowApi::Client.new }
|
5
|
+
VALID_CITY = ({city: 'chicago', state: 'il'})
|
6
|
+
INVALID_CITY = ({city: 'denver'})
|
7
|
+
REQUEST = {
|
8
|
+
'0' => "Request successfully processed",
|
9
|
+
'1' => "Error: missing parameters"
|
10
|
+
}
|
11
|
+
|
12
|
+
describe "#get_city_data" do
|
13
|
+
context "when given a hash including a valid city and state" do
|
14
|
+
it "returns an xml package of data for the specified city" do
|
15
|
+
response = Nokogiri::HTML(client.get_city_data(VALID_CITY))
|
16
|
+
message = response.search("message").children.first.text
|
17
|
+
message.should == REQUEST['0']
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "when given an invalid hash" do
|
22
|
+
it "returns an error message" do
|
23
|
+
response = Nokogiri::HTML(client.get_city_data(INVALID_CITY))
|
24
|
+
message = response.search("message").children.first.text
|
25
|
+
message.should == REQUEST['1']
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/spec/people_spec.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class MockClient
|
4
|
+
def get_city_data
|
5
|
+
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
describe ZillowApi::People do
|
10
|
+
describe ".demo_attributes" do
|
11
|
+
end
|
12
|
+
|
13
|
+
describe ".lives_here_attributes" do
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '.mode_of_transit' do
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '.home_value' do
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '.find_by_city' do
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '.parse_all' do
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '.parsed_response' do
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'faraday'
|
3
|
+
require 'nokogiri'
|
4
|
+
require './lib/zillow_demographics'
|
5
|
+
require 'client_spec'
|
6
|
+
# require 'people_spec'
|
7
|
+
# require 'national_spec'
|
8
|
+
|
9
|
+
RSpec.configure do |config|
|
10
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
11
|
+
config.run_all_when_everything_filtered = true
|
12
|
+
config.filter_run :focus
|
13
|
+
end
|
data/zillow_demographics.gemspec
CHANGED
@@ -4,8 +4,8 @@ require File.expand_path('../lib/zillow_demographics/version', __FILE__)
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.authors = ["michael verdi"]
|
6
6
|
gem.email = ["michael.v.verdi@gmail.com"]
|
7
|
-
gem.description = %q{wrapper for the
|
8
|
-
gem.summary = %q{wrapper for the
|
7
|
+
gem.description = %q{wrapper for the zillow_demographics api}
|
8
|
+
gem.summary = %q{wrapper for the zillow_demographics api}
|
9
9
|
gem.homepage = ""
|
10
10
|
|
11
11
|
gem.files = `git ls-files`.split($\)
|
@@ -17,4 +17,5 @@ Gem::Specification.new do |gem|
|
|
17
17
|
|
18
18
|
gem.add_runtime_dependency('faraday')
|
19
19
|
gem.add_runtime_dependency('nokogiri')
|
20
|
+
gem.add_development_dependency('rspec')
|
20
21
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zillow_demographics
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
16
|
-
requirement: &
|
16
|
+
requirement: &70342049238340 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70342049238340
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: nokogiri
|
27
|
-
requirement: &
|
27
|
+
requirement: &70342049237720 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,8 +32,19 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
|
35
|
+
version_requirements: *70342049237720
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &70342049237020 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70342049237020
|
47
|
+
description: wrapper for the zillow_demographics api
|
37
48
|
email:
|
38
49
|
- michael.v.verdi@gmail.com
|
39
50
|
executables: []
|
@@ -45,14 +56,14 @@ files:
|
|
45
56
|
- LICENSE
|
46
57
|
- README.md
|
47
58
|
- Rakefile
|
48
|
-
- client.rb
|
49
59
|
- lib/zillow_demographics.rb
|
50
60
|
- lib/zillow_demographics/client.rb
|
51
61
|
- lib/zillow_demographics/national.rb
|
52
62
|
- lib/zillow_demographics/people.rb
|
53
63
|
- lib/zillow_demographics/version.rb
|
54
|
-
-
|
55
|
-
-
|
64
|
+
- spec/client_spec.rb
|
65
|
+
- spec/people_spec.rb
|
66
|
+
- spec/spec_helper.rb
|
56
67
|
- version.rb
|
57
68
|
- zillow_demographics.gemspec
|
58
69
|
homepage: ''
|
@@ -78,5 +89,8 @@ rubyforge_project:
|
|
78
89
|
rubygems_version: 1.8.17
|
79
90
|
signing_key:
|
80
91
|
specification_version: 3
|
81
|
-
summary: wrapper for the
|
82
|
-
test_files:
|
92
|
+
summary: wrapper for the zillow_demographics api
|
93
|
+
test_files:
|
94
|
+
- spec/client_spec.rb
|
95
|
+
- spec/people_spec.rb
|
96
|
+
- spec/spec_helper.rb
|
data/client.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
require 'nokogiri'
|
3
|
-
|
4
|
-
module ZillowApi
|
5
|
-
class Client
|
6
|
-
BASE_URL = 'http://www.zillow.com'
|
7
|
-
|
8
|
-
def initialize
|
9
|
-
@connection = Faraday.new(url: BASE_URL)
|
10
|
-
end
|
11
|
-
|
12
|
-
def get_city_data(location)
|
13
|
-
response = @connection.get do |req|
|
14
|
-
req.url "/webservice/GetDemographics.htm"
|
15
|
-
req.headers['Accepts'] = 'application/xml'
|
16
|
-
req.params['zws-id'] = 'X1-ZWz1bn1je20hzf_1wtus'
|
17
|
-
req.params['state'] = location[:state]
|
18
|
-
req.params['city'] = location[:city]
|
19
|
-
end
|
20
|
-
response.body
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
data/national.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'nokogiri'
|
2
|
-
|
3
|
-
module ZillowApi
|
4
|
-
class National
|
5
|
-
attr_accessor :single_males, :single_females, :median_age, :average_commute_time, :home_value
|
6
|
-
|
7
|
-
def initialize(attributes)
|
8
|
-
self.average_commute_time = attributes['average commute time (minutes)']
|
9
|
-
self.single_females = attributes['single females']
|
10
|
-
self.single_males = attributes['single males']
|
11
|
-
self.median_age = attributes['median age']
|
12
|
-
self.home_value = attributes['zillow home value index']
|
13
|
-
end
|
14
|
-
|
15
|
-
class << self
|
16
|
-
|
17
|
-
def client
|
18
|
-
ZillowApi::Client.new
|
19
|
-
end
|
20
|
-
|
21
|
-
def demo_attributes(location)
|
22
|
-
keys = parsed_response(location).search("page")[-1].search("table")[0].search("attribute").map {|key| key.child.text.downcase }
|
23
|
-
values = parsed_response(location).search("page")[-1].search("table")[0].search("attribute").search("nation").map { |values| values.child.text }
|
24
|
-
Hash[keys.zip(values)]
|
25
|
-
end
|
26
|
-
|
27
|
-
def home_value(location)
|
28
|
-
key = parsed_response(location).search("page").first.search("data").first.search("attribute").first.child.text.downcase
|
29
|
-
value = parsed_response(location).search("page").first.search("data").first.search("nation").first.text
|
30
|
-
{ key => value }
|
31
|
-
end
|
32
|
-
|
33
|
-
def find_by_city(location)
|
34
|
-
attributes = demo_attributes(location).merge(home_value(location))
|
35
|
-
ZillowApi::National.new(attributes)
|
36
|
-
end
|
37
|
-
|
38
|
-
def parsed_response(location)
|
39
|
-
parse_all(client.get_city_data(location))
|
40
|
-
end
|
41
|
-
|
42
|
-
def parse_all(xml_package)
|
43
|
-
Nokogiri::HTML(xml_package)
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
data/people.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'nokogiri'
|
2
|
-
|
3
|
-
module ZillowApi
|
4
|
-
class People
|
5
|
-
attr_accessor :single_males, :single_females, :median_age, :average_commute_time
|
6
|
-
attr_accessor :transportation, :home_value, :who_live_here
|
7
|
-
|
8
|
-
def initialize(attributes)
|
9
|
-
self.average_commute_time = attributes['average commute time (minutes)']
|
10
|
-
self.single_females = attributes['single females']
|
11
|
-
self.single_males = attributes['single males']
|
12
|
-
self.median_age = attributes['median age']
|
13
|
-
self.who_live_here = attributes['lives here']
|
14
|
-
self.transportation = attributes['transportation']
|
15
|
-
self.home_value = attributes['zillow home value index']
|
16
|
-
end
|
17
|
-
|
18
|
-
class << self
|
19
|
-
|
20
|
-
def client
|
21
|
-
ZillowApi::Client.new
|
22
|
-
end
|
23
|
-
|
24
|
-
def demo_attributes(location)
|
25
|
-
keys = parsed_response(location).search("page")[-1].search("table")[0].search("attribute").map {|key| key.child.text.downcase }
|
26
|
-
values = parsed_response(location).search("page")[-1].search("table")[0].search("attribute").search("city").map { |values| values.child.text }
|
27
|
-
Hash[keys.zip(values)]
|
28
|
-
end
|
29
|
-
|
30
|
-
def lives_here_attributes(location)
|
31
|
-
keys = parsed_response(location).search("page")[-1].search("liveshere").search("title").map { |value| value.text.downcase }
|
32
|
-
values = parsed_response(location).search("page")[-1].search("liveshere").search("name").map { |key| key.text }
|
33
|
-
{ 'lives here' => Hash[keys.zip(values)] }
|
34
|
-
end
|
35
|
-
|
36
|
-
def mode_of_transit(location)
|
37
|
-
key = parsed_response(location).search("uniqueness").search("category").last.attributes['type'].value.downcase
|
38
|
-
value = parsed_response(location).search("uniqueness").search("category").last.text
|
39
|
-
{ key => value }
|
40
|
-
end
|
41
|
-
|
42
|
-
def home_value(location)
|
43
|
-
key = parsed_response(location).search("page").first.search("data").first.search("attribute").first.child.text.downcase
|
44
|
-
value = parsed_response(location).search("page").first.search("data").first.search("city").first.text
|
45
|
-
{ key => value }
|
46
|
-
end
|
47
|
-
|
48
|
-
def find_by_city(location)
|
49
|
-
attributes = lives_here_attributes(location).merge(demo_attributes(location)).merge(home_value(location)).merge(mode_of_transit(location))
|
50
|
-
ZillowApi::People.new(attributes)
|
51
|
-
end
|
52
|
-
|
53
|
-
def parsed_response(location)
|
54
|
-
parse_all(client.get_city_data(location))
|
55
|
-
end
|
56
|
-
|
57
|
-
def parse_all(xml_package)
|
58
|
-
Nokogiri::HTML(xml_package)
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|