Skip to content

Instantly share code, notes, and snippets.

@ldodds
Last active March 13, 2017 17:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ldodds/95b6b8f9491ed5c7e29fe6fb9ae55221 to your computer and use it in GitHub Desktop.
Save ldodds/95b6b8f9491ed5c7e29fe6fb9ae55221 to your computer and use it in GitHub Desktop.
Dump open banking ATM data to CSV
require 'csv'
require 'json'
require 'rest-client'
#Hack to work around SSL error received from Bank of Ireland and Nationwide end points
#SSL_connect returned=1 errno=0 state=error: certificate verify failed
def get_no_ssl(url, headers={}, &block)
RestClient::Request.execute(method: :get, url: url, headers: headers, verify_ssl: false, &block)
end
#Certificate errors on two, need an updated SSL root cert?
URLS = [
"https://openapi.bankofireland.com/open-banking/v1.2/atms",
"https://atlas.api.barclays/open-banking/v1.3/atms",
"https://obp-api.danskebank.com/open-banking/v1.2/atms",
"https://openapi.nationwide.co.uk/open-banking/v1.2/atms",
"https://openapi.natwest.com/open-banking/v1.2/atms",
"https://openapi.rbs.co.uk/open-banking/v1.2/atms",
"https://api.santander.co.uk/retail/open-banking/v1.2/atms",
"https://openapi.ulsterbank.co.uk/open-banking/v1.2/atms"
]
CSV.open("atms.csv", "w:UTF-8") do |csv|
csv << ["ATMID", "SiteName", "BuildingNumberOrName", "Country", "PostCode", "StreetName", "TownName", "Currency", "Services", "LocationCategory","MinimumValueDispensed", "Organisation", "SupportedLanguages", "Latitude", "Longitude"]
URLS.each do |url|
puts url
resp = JSON.parse( get_no_ssl(url) )
resp["data"].each do |atm|
currency = atm["Currency"].join("|") if atm["Currency"]
services = atm["Services"].join("|") if atm["Services"]
csv << [ atm["ATMID"],
atm["SiteName"],
atm["Address"]["BuildingNumberOrName"],
atm["Address"]["Country"],
atm["Address"]["PostCode"],
atm["Address"]["StreetName"],
atm["Address"]["TownName"],
currency,
services,
atm["LocationCategory"],
atm["MinimumValueDispensed"],
atm["Organisation"]["ParentOrganisation"]["OrganisationName"]["LegalName"],
atm["SupportedLanguages"].join("|"),
atm["GeographicLocation"]["Latitude"],
atm["GeographicLocation"]["Longitude"] ]
end
end
end
source 'https://rubygems.org'
gem 'rest-client'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment