lib/geonames_api/country.rb in geonames_api-0.0.3 vs lib/geonames_api/country.rb in geonames_api-0.0.4
- old
+ new
@@ -1,8 +1,31 @@
module GeoNamesAPI
class Country < GeoNamesAPI::Object
METHOD = "countryInfoJSON"
- ID = "country"
+ ID = "country"
+ EXPORT_BASE_URL = "http://download.geonames.org/export/zip/"
+ EXPORT_HEADERS = %W(country_code postal_code place_name admin_name1 admin_code1 admin_name2 admin_code2 admin_name3 admin_code3 latitude longitude accuracy)
+
+ def postal_code_export
+ zip_data = open(postal_code_export_url) { |f| f.binmode; f.read }
+ stream = lambda { return zip_data.slice!(0, 256) }
+ csv = EXPORT_HEADERS.join("\t") + "\n"
+ Zip::Archive.open_buffer(stream) do |archive|
+ archive.each do |f|
+ csv << f.read if f.name =~ /\A#{country_code}/
+ end
+ end
+ csv
+ end
+
+ def postal_code_csv
+ CSV.parse(postal_code_export, headers: true, col_sep: "\t", header_converters: :symbol)
+ end
+
+ def postal_code_export_url
+ EXPORT_BASE_URL + country_code + ".zip"
+ end
+
end
end
\ No newline at end of file