Skip to content

Instantly share code, notes, and snippets.

@captproton
Created November 8, 2009 21:08
Show Gist options
  • Select an option

  • Save captproton/229476 to your computer and use it in GitHub Desktop.

Select an option

Save captproton/229476 to your computer and use it in GitHub Desktop.
require 'httpclient'
require 'pp'
class Shop < ActiveRecord::Base
## validates_presence_of :lat, :lng
acts_as_mappable :auto_geocode => true
validates_presence_of :lat, :lng
before_validation_on_create :geocode_address
def get_page_source(page_id)
clnt = HTTPClient.new
body = { 'memberDirectoryPageId' => page_id }
uri = "http://www.peninsulashops.com/Content/Members/MemberDirectoryWebService.asmx/LoadMembers"
return clnt.post(uri, body).content
end
def parse_page(page)
records = page.match(/\[\[(\{.+\})\],/)[1]
results = []
records.scan(/(\{c1:\[(.+?)'\}\]\})/) do |record|
result = []
record[0].scan(/v:'(.*?)'\}/) do |vals|
result << vals[0]
end
results << result
end
return results
end
def update_from_json
map_page_data = get_page_source(463055) # This is a fixed page ID
pp parse_page( map_page_data )
puts parse_page( map_page_data ).size
# parse_page( map_page_data ).each do |location|
# m = Shop.new
# m.name = location[0]
# m.url = location[4]
# m.save
# end
end
private
def geocode_address
geo = GeoKit::Geocoders::MultiGeocoder.geocode(address)
if geo.success
self.lat, self.lng = geo.lat, geo.lng
else
self.address ="Seal Rock"
geoSealRock = GeoKit::Geocoders::MultiGeocoder.geocode("Seal Rock")
if geoSealRock.success
self.lat, self.lng = geoSealRock.lat, geoSealRock.lng
else
errors.add(:address, "Could not geocode address #{self.lat}, #{self.lng}")
end
end
## errors.add(:address, "Could not geocode address") unless geo.success
##self.lat, self.lng = geo.lat, geo.lng if geo.success
end
def find_center
end
def sum
self.inject(0) {|sum, x| sum + x}
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment