sandy 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/lib/sandy/area.rb +14 -0
- data/lib/sandy/provider.rb +6 -0
- data/lib/sandy/providers/coned/report.rb +52 -0
- data/lib/sandy/providers/coned.rb +6 -0
- data/lib/sandy/version.rb +3 -0
- data/lib/sandy.rb +5 -0
- data/sandy.gemspec +25 -0
- data/spec/area_spec.rb +33 -0
- data/spec/fixtures/vcr_cassettes/Sandy_Provider_ConEd_Report/_areas/.yml +194 -0
- data/spec/fixtures/vcr_cassettes/Sandy_Provider_ConEd_Report/_neighborhoods/.yml +194 -0
- data/spec/fixtures/vcr_cassettes/Sandy_Provider_ConEd_Report/_outages/.yml +194 -0
- data/spec/fixtures/vcr_cassettes/Sandy_Provider_ConEd_Report/_regions/.yml +194 -0
- data/spec/providers/coned/report_spec.rb +26 -0
- data/spec/spec_helper.rb +13 -0
- metadata +153 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Cameron Cundiff
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Sandy
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'sandy'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install sandy
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/sandy/area.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
module Sandy
|
2
|
+
class Area
|
3
|
+
attr_reader :name, :region, :customers_affected, :latitude, :longitude
|
4
|
+
|
5
|
+
def initialize(customers_affected, location, options = {})
|
6
|
+
@name = location
|
7
|
+
@customers_affected = customers_affected
|
8
|
+
@region = options[:region]
|
9
|
+
@total_customers = options[:total_customers]
|
10
|
+
@latitude = options[:latitude]
|
11
|
+
@longitude = options[:longitude]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require "sandy/area"
|
2
|
+
require "httparty"
|
3
|
+
require "json"
|
4
|
+
|
5
|
+
module Sandy::Provider
|
6
|
+
module ConEd
|
7
|
+
class Report
|
8
|
+
attr_reader :regions, :neighborhoods
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
raw_report = JSON.parse(HTTParty.get(coned_url))
|
12
|
+
area_hash = raw_report.fetch("file_data")["curr_custs_aff"]["areas"].first["areas"]
|
13
|
+
@regions = regions_from_report(area_hash)
|
14
|
+
@neighborhoods = neighborhoods_from_report(area_hash)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def regions_from_report(areas)
|
20
|
+
areas.collect do |area|
|
21
|
+
Sandy::Area.new(area.fetch("custs_out"), area.fetch("area_name"),
|
22
|
+
{ latitude: area["latitude"],
|
23
|
+
longitude: area["longitude"],
|
24
|
+
total_customers: area["total_custs"] })
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def neighborhoods_from_report(areas)
|
30
|
+
neighborhoods = []
|
31
|
+
areas.each do |area|
|
32
|
+
area["areas"].each do |sub_area|
|
33
|
+
neighborhoods << Sandy::Area.new(sub_area.fetch("custs_out"), sub_area.fetch("area_name"),
|
34
|
+
{ region: area["area_name"],
|
35
|
+
total_customers: sub_area["total_custs"],
|
36
|
+
latitude: sub_area["latitude"],
|
37
|
+
longitude: sub_area["longitude"] })
|
38
|
+
end
|
39
|
+
end
|
40
|
+
neighborhoods
|
41
|
+
end
|
42
|
+
|
43
|
+
def coned_url
|
44
|
+
base_uri = "http://apps.coned.com"
|
45
|
+
directory_url = "#{base_uri}/stormcenter_external/stormcenter_externaldata/data/interval_generation_data/metadata.xml"
|
46
|
+
response = HTTParty.get(directory_url, format: :xml)
|
47
|
+
directory = response.parsed_response.fetch("root").fetch("directory")
|
48
|
+
"#{base_uri}/stormcenter_external/stormcenter_externaldata/data/interval_generation_data/#{directory}/report.js"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/sandy.rb
ADDED
data/sandy.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'sandy/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "sandy"
|
8
|
+
gem.version = Sandy::VERSION
|
9
|
+
gem.authors = ["Cameron Cundiff"]
|
10
|
+
gem.email = ["ckundo@gmail.com"]
|
11
|
+
gem.description = %q{Present a simple API to consume power outage data for the Greater New York area.}
|
12
|
+
gem.summary = %q{Power outage data for ConEd in NYC}
|
13
|
+
gem.homepage = "http://www.github.com/ckundo/sandy"
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.add_dependency("httparty", "~> 0.9.0")
|
21
|
+
gem.add_development_dependency("rake")
|
22
|
+
gem.add_development_dependency("rspec", "~> 2.11.0")
|
23
|
+
gem.add_development_dependency("webmock", "~> 1.8.11")
|
24
|
+
gem.add_development_dependency("vcr", "~> 2.3.0")
|
25
|
+
end
|
data/spec/area_spec.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Sandy::Area do
|
4
|
+
let(:customers_affected) { 100 }
|
5
|
+
let(:options) { {} }
|
6
|
+
|
7
|
+
describe "#customers_affected" do
|
8
|
+
subject { Sandy::Area.new(customers_affected, nil).customers_affected }
|
9
|
+
it { should == customers_affected }
|
10
|
+
end
|
11
|
+
|
12
|
+
context "with an area name" do
|
13
|
+
let(:area_name) { "Battery Park" }
|
14
|
+
describe "#name" do
|
15
|
+
subject { Sandy::Area.new(customers_affected, area_name).name }
|
16
|
+
it { should == area_name }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "with a region name" do
|
21
|
+
describe "#parent_region" do
|
22
|
+
subject { Sandy::Area.new(customers_affected, nil, { region: "Manhattan" }).region }
|
23
|
+
it { should == "Manhattan" }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "with lat/lng" do
|
28
|
+
subject { Sandy::Area.new(customers_affected, nil, { latitude: 70.5, longitude: -115.5 }) }
|
29
|
+
its(:latitude) { should == 70.5 }
|
30
|
+
its(:longitude) { should == -115.5 }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
@@ -0,0 +1,194 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://apps.coned.com/stormcenter_external/stormcenter_externaldata/data/interval_generation_data/metadata.xml
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 200
|
13
|
+
message: OK
|
14
|
+
headers:
|
15
|
+
Content-Length:
|
16
|
+
- '101'
|
17
|
+
Content-Type:
|
18
|
+
- text/xml
|
19
|
+
Last-Modified:
|
20
|
+
- Fri, 02 Nov 2012 18:21:13 GMT
|
21
|
+
Accept-Ranges:
|
22
|
+
- bytes
|
23
|
+
Etag:
|
24
|
+
- W/"579c21d726b9cd1:2319c"
|
25
|
+
Server:
|
26
|
+
- Microsoft-IIS/6.0
|
27
|
+
X-Powered-By:
|
28
|
+
- ASP.NET
|
29
|
+
Date:
|
30
|
+
- Fri, 02 Nov 2012 18:26:47 GMT
|
31
|
+
body:
|
32
|
+
encoding: US-ASCII
|
33
|
+
string: ! "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<root>\r\n<directory>2012_11_02_14_00_27</directory>\r\n</root>\r\n"
|
34
|
+
http_version:
|
35
|
+
recorded_at: Fri, 02 Nov 2012 18:26:47 GMT
|
36
|
+
- request:
|
37
|
+
method: get
|
38
|
+
uri: http://apps.coned.com/stormcenter_external/stormcenter_externaldata/data/interval_generation_data/2012_11_02_14_00_27/report.js
|
39
|
+
body:
|
40
|
+
encoding: US-ASCII
|
41
|
+
string: ''
|
42
|
+
headers: {}
|
43
|
+
response:
|
44
|
+
status:
|
45
|
+
code: 200
|
46
|
+
message: OK
|
47
|
+
headers:
|
48
|
+
Content-Length:
|
49
|
+
- '16734'
|
50
|
+
Content-Type:
|
51
|
+
- application/x-javascript
|
52
|
+
Last-Modified:
|
53
|
+
- Fri, 02 Nov 2012 18:21:11 GMT
|
54
|
+
Accept-Ranges:
|
55
|
+
- bytes
|
56
|
+
Etag:
|
57
|
+
- ! '"d6b85bd626b9cd1:2319c"'
|
58
|
+
Server:
|
59
|
+
- Microsoft-IIS/6.0
|
60
|
+
X-Powered-By:
|
61
|
+
- ASP.NET
|
62
|
+
Date:
|
63
|
+
- Fri, 02 Nov 2012 18:26:47 GMT
|
64
|
+
body:
|
65
|
+
encoding: US-ASCII
|
66
|
+
string: ! '{"file_title":"report","file_data":{"curr_custs_aff":{"areas":[{"area_name":"CONED","areas":[{"area_name":"Bronx","areas":[{"area_name":"Central
|
67
|
+
Bronx","custs_out":26,"total_custs":44452,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.82,"longitude":-73.86},{"area_name":"Fordham","custs_out":239,"total_custs":114772,"etr":"Nov
|
68
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.86,"longitude":-73.9},{"area_name":"Northeast
|
69
|
+
Bronx","custs_out":14012,"total_custs":79942,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.87,"longitude":-73.82},{"area_name":"Riverdale","custs_out":4029,"total_custs":34772,"etr":"Nov
|
70
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.89,"longitude":-73.9},{"area_name":"Southeast
|
71
|
+
Bronx","custs_out":6966,"total_custs":89736,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.83,"longitude":-73.82},{"area_name":"West
|
72
|
+
Bronx","custs_out":56,"total_custs":62352,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.82,"longitude":-73.91}],"custs_out":30535,"total_custs":426026,"etr":"Nov
|
73
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.86,"longitude":-73.86},{"area_name":"Brooklyn","areas":[{"area_name":"Bay
|
74
|
+
Ridge","custs_out":261,"total_custs":93430,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.62,"longitude":-74.0},{"area_name":"Borough
|
75
|
+
Hall","custs_out":3673,"total_custs":52631,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.67,"longitude":-73.97},{"area_name":"Brighton
|
76
|
+
Beach","custs_out":869,"total_custs":27831,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.45,"longitude":-73.96},{"area_name":"Crown
|
77
|
+
Heights","custs_out":445,"total_custs":84214,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.62,"longitude":-73.91},{"area_name":"Flatbush","custs_out":13435,"total_custs":135665,"etr":"Nov
|
78
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.6,"longitude":-73.93},{"area_name":"Ocean
|
79
|
+
Parkway","custs_out":2934,"total_custs":117965,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.6,"longitude":-73.97},{"area_name":"Park
|
80
|
+
Slope","custs_out":1647,"total_custs":114131,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.63,"longitude":-73.98},{"area_name":"Prospect
|
81
|
+
Park","custs_out":5,"total_custs":32124,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.66,"longitude":-73.98},{"area_name":"Ridgewood","custs_out":228,"total_custs":89163,"etr":"Nov
|
82
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.69,"longitude":-73.91},{"area_name":"Sheepshead
|
83
|
+
Bay","custs_out":7505,"total_custs":63947,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.59,"longitude":-73.92},{"area_name":"Williamsburg","custs_out":273,"total_custs":94606,"etr":"Nov
|
84
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.69,"longitude":-73.96}],"custs_out":35635,"total_custs":1026426,"etr":"Nov
|
85
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.66,"longitude":-73.91},{"area_name":"Manhattan","areas":[{"area_name":"Battery
|
86
|
+
Park City","custs_out":1,"total_custs":5042,"etr":"Nov 03, 23:59 PM","etrmillis":-5,"latitude":40.71,"longitude":-73.99},{"area_name":"Beekman","custs_out":1,"total_custs":9259,"etr":"Nov
|
87
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.75,"longitude":-73.96},{"area_name":"Bowling
|
88
|
+
Green","custs_out":2514,"total_custs":2587,"etr":"Nov 03, 23:59 PM","etrmillis":-5,"latitude":40.71,"longitude":-73.99},{"area_name":"Canal","custs_out":8479,"total_custs":8505,"etr":"Nov
|
89
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.71,"longitude":-73.99},{"area_name":"Central
|
90
|
+
Park","custs_out":1,"total_custs":78552,"etr":"Nov 03, 23:59 PM","etrmillis":-5,"latitude":40.78,"longitude":-73.96},{"area_name":"Chelsea","custs_out":27396,"total_custs":27526,"etr":"Nov
|
91
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.74,"longitude":-73.98},{"area_name":"City
|
92
|
+
Hall","custs_out":8805,"total_custs":8770,"etr":"Nov 03, 23:59 PM","etrmillis":-5,"latitude":40.71,"longitude":-73.99},{"area_name":"Columbus
|
93
|
+
Circle","custs_out":0,"total_custs":19820,"etr":"Nov 03, 23:59 PM","etrmillis":-5},{"area_name":"Cooper
|
94
|
+
Square","custs_out":66650,"total_custs":67237,"etr":"Nov 03, 23:59 PM","etrmillis":-5,"latitude":40.71,"longitude":-73.98},{"area_name":"Cortlandt","custs_out":206,"total_custs":2010,"etr":"Nov
|
95
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.71,"longitude":-73.99},{"area_name":"Empire","custs_out":15,"total_custs":3605,"etr":"Nov
|
96
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.74,"longitude":-73.98},{"area_name":"Fashion","custs_out":44,"total_custs":6342,"etr":"Nov
|
97
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.74,"longitude":-73.99},{"area_name":"Freedom","custs_out":0,"total_custs":1,"etr":"Nov
|
98
|
+
03, 23:59 PM","etrmillis":-5},{"area_name":"Fulton","custs_out":4001,"total_custs":3966,"etr":"Nov
|
99
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.71,"longitude":-73.99},{"area_name":"Grand
|
100
|
+
Central","custs_out":1,"total_custs":4871,"etr":"Nov 03, 23:59 PM","etrmillis":-5,"latitude":40.74,"longitude":-73.97},{"area_name":"Greeley
|
101
|
+
Square","custs_out":3092,"total_custs":3053,"etr":"Nov 03, 23:59 PM","etrmillis":-5,"latitude":40.74,"longitude":-73.97},{"area_name":"Greenwich","custs_out":10109,"total_custs":10166,"etr":"Nov
|
102
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.72,"longitude":-73.99},{"area_name":"Harlem","custs_out":4,"total_custs":57399,"etr":"Nov
|
103
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.81,"longitude":-73.93},{"area_name":"Herald
|
104
|
+
Square","custs_out":2,"total_custs":1368,"etr":"Nov 03, 23:59 PM","etrmillis":-5,"latitude":40.74,"longitude":-73.97},{"area_name":"Hudson","custs_out":1,"total_custs":8288,"etr":"Nov
|
105
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.76,"longitude":-73.99},{"area_name":"Hunter","custs_out":0,"total_custs":2219,"etr":"Nov
|
106
|
+
03, 23:59 PM","etrmillis":-5},{"area_name":"Kips Bay","custs_out":21086,"total_custs":21628,"etr":"Nov
|
107
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.74,"longitude":-73.97},{"area_name":"Lenox
|
108
|
+
Hill","custs_out":0,"total_custs":44042,"etr":"Nov 03, 23:59 PM","etrmillis":-5},{"area_name":"Lincoln
|
109
|
+
Square","custs_out":0,"total_custs":23019,"etr":"Nov 03, 23:59 PM","etrmillis":-5},{"area_name":"Madison
|
110
|
+
Square","custs_out":30189,"total_custs":30652,"etr":"Nov 03, 23:59 PM","etrmillis":-5,"latitude":40.73,"longitude":-73.97},{"area_name":"Park
|
111
|
+
Place","custs_out":4901,"total_custs":4905,"etr":"Nov 03, 23:59 PM","etrmillis":-5,"latitude":40.71,"longitude":-73.99},{"area_name":"Pennsylvania","custs_out":13,"total_custs":12366,"etr":"Nov
|
112
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.75,"longitude":-73.97},{"area_name":"Plaza","custs_out":0,"total_custs":6368,"etr":"Nov
|
113
|
+
03, 23:59 PM","etrmillis":-5},{"area_name":"Randalls Island","custs_out":0,"total_custs":9,"etr":"Nov
|
114
|
+
03, 23:59 PM","etrmillis":-5},{"area_name":"Rockefeller Center","custs_out":0,"total_custs":833,"etr":"Nov
|
115
|
+
03, 23:59 PM","etrmillis":-5},{"area_name":"Roosevelt","custs_out":8,"total_custs":8877,"etr":"Nov
|
116
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.75,"longitude":-73.94},{"area_name":"Sheridan
|
117
|
+
Square","custs_out":38229,"total_custs":36661,"etr":"Nov 03, 23:59 PM","etrmillis":-5,"latitude":40.73,"longitude":-73.99},{"area_name":"Sutton","custs_out":0,"total_custs":10423,"etr":"Nov
|
118
|
+
03, 23:59 PM","etrmillis":-5},{"area_name":"Times Square","custs_out":86,"total_custs":2560,"etr":"Nov
|
119
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.75,"longitude":-73.96},{"area_name":"Triboro","custs_out":7,"total_custs":37140,"etr":"Nov
|
120
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.81,"longitude":-73.93},{"area_name":"Turtle
|
121
|
+
Bay","custs_out":0,"total_custs":827,"etr":"Nov 03, 23:59 PM","etrmillis":-5},{"area_name":"Washington
|
122
|
+
Heights","custs_out":2,"total_custs":69829,"etr":"Nov 03, 23:59 PM","etrmillis":-5,"latitude":40.85,"longitude":-73.92},{"area_name":"Yorkville","custs_out":385,"total_custs":80474,"etr":"Nov
|
123
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.78,"longitude":-73.95}],"custs_out":226231,"total_custs":721199,"etr":"Nov
|
124
|
+
03, 23:59 PM","etrmillis":-5,"latitude":40.76,"longitude":-73.97},{"area_name":"Queens","areas":[{"area_name":"Borden","custs_out":0,"total_custs":12267,"etr":"Nov
|
125
|
+
11, 23:59 PM","etrmillis":-5},{"area_name":"Flushing","custs_out":14421,"total_custs":119742,"etr":"Nov
|
126
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.75,"longitude":-73.8},{"area_name":"Jackson
|
127
|
+
Heights","custs_out":335,"total_custs":71263,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.76,"longitude":-73.9},{"area_name":"Jamaica","custs_out":38104,"total_custs":147658,"etr":"Nov
|
128
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.69,"longitude":-73.78},{"area_name":"Long
|
129
|
+
Island City","custs_out":707,"total_custs":73785,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.77,"longitude":-73.91},{"area_name":"Maspeth","custs_out":2100,"total_custs":107094,"etr":"Nov
|
130
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.71,"longitude":-73.89},{"area_name":"Rego
|
131
|
+
Park","custs_out":8948,"total_custs":70828,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.73,"longitude":-73.84},{"area_name":"Richmond
|
132
|
+
Hill","custs_out":21312,"total_custs":120719,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.68,"longitude":-73.86},{"area_name":"Sunnyside","custs_out":0,"total_custs":24571,"etr":"Nov
|
133
|
+
11, 23:59 PM","etrmillis":-5}],"custs_out":87095,"total_custs":627208,"etr":"Nov
|
134
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.71,"longitude":-73.86},{"area_name":"Staten
|
135
|
+
Island","areas":[{"area_name":"Fox Hills","custs_out":24467,"total_custs":59350,"etr":"Nov
|
136
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.58,"longitude":-74.09},{"area_name":"Fresh
|
137
|
+
Kills","custs_out":14804,"total_custs":38152,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.6,"longitude":-74.17},{"area_name":"Wainwright","custs_out":5819,"total_custs":24613,"etr":"Nov
|
138
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.54,"longitude":-74.16},{"area_name":"Willowbrook","custs_out":3013,"total_custs":23936,"etr":"Nov
|
139
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.58,"longitude":-74.13},{"area_name":"Woodrow","custs_out":7211,"total_custs":28151,"etr":"Nov
|
140
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.52,"longitude":-74.22}],"custs_out":55943,"total_custs":174202,"etr":"Nov
|
141
|
+
11, 23:59 PM","etrmillis":-5,"latitude":40.57,"longitude":-74.17},{"area_name":"Westchester","areas":[{"area_name":"Ardsley
|
142
|
+
Village","custs_out":1537,"total_custs":1786,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.0,"longitude":-73.83},{"area_name":"Bedford
|
143
|
+
town","custs_out":810,"total_custs":1018,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.2,"longitude":-73.7},{"area_name":"Briarcliff
|
144
|
+
Manor village","custs_out":1858,"total_custs":2964,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.13,"longitude":-73.82},{"area_name":"Briarcliff
|
145
|
+
Ossining","custs_out":0,"total_custs":0,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.17,"longitude":-73.83},{"area_name":"Bronxville
|
146
|
+
village","custs_out":846,"total_custs":2529,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.94,"longitude":-73.8},{"area_name":"Buchanan
|
147
|
+
village","custs_out":5,"total_custs":1010,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.25,"longitude":-73.93},{"area_name":"Cortlandt
|
148
|
+
town","custs_out":4165,"total_custs":12295,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.25,"longitude":-73.89},{"area_name":"Croton-on-Hudson
|
149
|
+
village","custs_out":988,"total_custs":3629,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.19,"longitude":-73.87},{"area_name":"Dobbs
|
150
|
+
Ferry village","custs_out":1581,"total_custs":4153,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.0,"longitude":-73.83},{"area_name":"Eastchester
|
151
|
+
town","custs_out":3468,"total_custs":7900,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.95,"longitude":-73.79},{"area_name":"Elmsford
|
152
|
+
village","custs_out":235,"total_custs":2104,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.04,"longitude":-73.79},{"area_name":"Greenburgh
|
153
|
+
town","custs_out":8962,"total_custs":18736,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.04,"longitude":-73.79},{"area_name":"Harrison
|
154
|
+
village","custs_out":3465,"total_custs":9470,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.01,"longitude":-73.68},{"area_name":"Hastings-on-Hudson
|
155
|
+
village","custs_out":963,"total_custs":3436,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.98,"longitude":-73.85},{"area_name":"Irvington
|
156
|
+
village","custs_out":1498,"total_custs":2632,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.02,"longitude":-73.83},{"area_name":"Larchmont
|
157
|
+
village","custs_out":1639,"total_custs":1983,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.91,"longitude":-73.72},{"area_name":"Mamaroneck
|
158
|
+
town","custs_out":3217,"total_custs":5259,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.94,"longitude":-73.72},{"area_name":"Mamaroneck
|
159
|
+
village","custs_out":2785,"total_custs":8704,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.94,"longitude":-73.72},{"area_name":"Mount
|
160
|
+
Kisco (Town of Bedford)","custs_out":0,"total_custs":0,"etr":"Nov 11, 23:59
|
161
|
+
PM","etrmillis":-5,"latitude":41.2,"longitude":-73.7},{"area_name":"Mount
|
162
|
+
Kisco (Town of New Castle)","custs_out":0,"total_custs":0,"etr":"Nov 11, 23:59
|
163
|
+
PM","etrmillis":-5,"latitude":41.18,"longitude":-73.76},{"area_name":"Mount
|
164
|
+
Kisco village","custs_out":668,"total_custs":5075,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.19,"longitude":-73.71},{"area_name":"Mount
|
165
|
+
Pleasant town","custs_out":4053,"total_custs":8783,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.1,"longitude":-73.78},{"area_name":"Mount
|
166
|
+
Vernon city","custs_out":6878,"total_custs":29297,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.9,"longitude":-73.8},{"area_name":"New
|
167
|
+
Castle town","custs_out":5280,"total_custs":6574,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.18,"longitude":-73.76},{"area_name":"New
|
168
|
+
Rochelle city","custs_out":12385,"total_custs":28958,"etr":"Nov 11, 23:59
|
169
|
+
PM","etrmillis":-5,"latitude":40.92,"longitude":-73.75},{"area_name":"North
|
170
|
+
Castle town","custs_out":3715,"total_custs":4894,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.18,"longitude":-73.77},{"area_name":"North
|
171
|
+
Pelham","custs_out":636,"total_custs":2071,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.89,"longitude":-73.78},{"area_name":"Ossining
|
172
|
+
town","custs_out":637,"total_custs":2307,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.15,"longitude":-73.84},{"area_name":"Ossining
|
173
|
+
village","custs_out":2867,"total_custs":8980,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.15,"longitude":-73.84},{"area_name":"Peekskill
|
174
|
+
city","custs_out":453,"total_custs":10239,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.28,"longitude":-73.83},{"area_name":"Pelham
|
175
|
+
Manor village","custs_out":1582,"total_custs":2051,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.89,"longitude":-73.78},{"area_name":"Pelham
|
176
|
+
village","custs_out":358,"total_custs":760,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.89,"longitude":-73.78},{"area_name":"Pleasantville
|
177
|
+
village","custs_out":1191,"total_custs":3338,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.13,"longitude":-73.76},{"area_name":"Port
|
178
|
+
Chester village","custs_out":5678,"total_custs":10254,"etr":"Nov 11, 23:59
|
179
|
+
PM","etrmillis":-5,"latitude":40.99,"longitude":-73.63},{"area_name":"Rye
|
180
|
+
Brook village","custs_out":2952,"total_custs":3720,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.02,"longitude":-73.66},{"area_name":"Rye
|
181
|
+
city","custs_out":4540,"total_custs":6070,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.99,"longitude":-73.66},{"area_name":"Rye
|
182
|
+
town","custs_out":0,"total_custs":0,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.96,"longitude":-73.65},{"area_name":"Scarsdale
|
183
|
+
village","custs_out":4506,"total_custs":6025,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.98,"longitude":-73.75},{"area_name":"Sleepy
|
184
|
+
Hollow","custs_out":1007,"total_custs":3515,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.08,"longitude":-73.84},{"area_name":"Somers
|
185
|
+
town","custs_out":0,"total_custs":0,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.1,"longitude":-73.78},{"area_name":"Tarrytown
|
186
|
+
village","custs_out":1849,"total_custs":5217,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.05,"longitude":-73.84},{"area_name":"Tuckahoe
|
187
|
+
village","custs_out":202,"total_custs":2867,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.94,"longitude":-73.8},{"area_name":"White
|
188
|
+
Plains city","custs_out":8821,"total_custs":23854,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.02,"longitude":-73.73},{"area_name":"Yonkers
|
189
|
+
city","custs_out":15573,"total_custs":75568,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":40.94,"longitude":-73.85},{"area_name":"Yorktown
|
190
|
+
town","custs_out":3966,"total_custs":8173,"etr":"Nov 11, 23:59 PM","etrmillis":-5,"latitude":41.26,"longitude":-73.79}],"custs_out":128665,"total_custs":348198,"etr":"Nov
|
191
|
+
11, 23:59 PM","etrmillis":-5,"latitude":41.01,"longitude":-73.78}],"custs_out":0,"total_custs":0,"etr":"","etrmillis":-9}]}}}'
|
192
|
+
http_version:
|
193
|
+
recorded_at: Fri, 02 Nov 2012 18:26:48 GMT
|
194
|
+
recorded_with: VCR 2.3.0
|