diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..b9af145 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.q linguist-language=q diff --git a/README.md b/README.md index c82fae2..ae6265a 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,36 @@ # Belfast Bikes -## Parsing XML Data from the Nextbike Platform - -Given a semi-public API, what data analysis can we perform? The nextbike platform provides an xml of raw data, detailing bike availability at each station in the cities and countries where the system exists. In particular, we have focused on Belfast (city 238) where BelfastBikes has 43 docking stations available to rent a bike from, although we can modify this to be any city on the platform, using the respective city number. - -Using kdb+ we can pull this data periodically off the web and create a time-series database to perform analysis on, made possible by the TorQ framework. Taking advantage of TorQ's capabilities, the process has been enhanced to include error logging, history logging and an extension of the kdb+ built-in timer, making it repeat until a specified end-time. Theoretically this allows us to view log files for any date and rebuild the usage of BelfastBikes for any date where we have collected information. - -Once a database has been created, time-series and other queries can be executed against the data. For example, by rebuilding the table for yesterday's bike usage, we can create a mapping of 'routes' that each bike has taken, I.e. where the bike has checked in during those 24 hours and at what time during the day. +## Parsing JSON Data from the Nextbike Platform + +Given a semi-public API, what data analysis can we perform? The nextbike platform +provides both an XML and JSON output of raw data, detailing bike availability at +each station in the cities and countries where the system exists. In particular, +we have used the JSON output to focus on Belfast (city 238) where BelfastBikes +has 46 docking stations available to rent a bike from, although we can modify +this to be any city on the platform, using the respective city number. + +Using kdb+ we can pull this data periodically off the web and create a time-series +database to perform analysis on, made possible by the TorQ framework. Taking +advantage of TorQ's capabilities, the process has been enhanced to include error +logging, history logging and an extension of the kdb+ built-in timer, making it +repeat until a specified end-time. This allows us to view log files +for any date and rebuild the usage of BelfastBikes for any date where we have +collected information. + +Once a database has been created, time-series and other queries can be executed +against the data. For example, by rebuilding the table for yesterday's bike +usage, we can create a mapping of 'routes' that each bike has taken, i.e. where +the bike has checked in during those 24 hours and at what time during the day. ## Requirements - Basic knowledge of the q programming language and linux commands is assumed. This project requires the use of KDB+ and the [TorQ framework](https://github.com/AquaQAnalytics/TorQ). ## Getting Started: -- These bash commands will give directions on downloading TorQ and our BIKE message package. The BIKE package will be placed on top of the base TorQ package. +- These bash commands will give directions on downloading TorQ and our BIKE message + package. The BIKE package will be placed on top of the base TorQ package. 1. Make a directory to check the git repos into, and a directory to deploy the system to. @@ -44,28 +58,49 @@ This project requires the use of KDB+ and the [TorQ framework](https://github.co You should have a combination of each directories content included in the deploy directory: ~/deploy$ ls - appconfig aquaq-torq-brochure.pdf bikes.xml code config docs hdb html lib LICENSE logs mkdocs.yml README.md setenv.sh start_bikes.sh tests torq.q xmllogs + appconfig aquaq-torq-brochure.pdf code config docs hdb html lib LICENSE logs mkdocs.yml README.md setenv.sh start_bikes.sh stop_bikes.sh tests torq.q jsonlogs ## Configuration -You can change the city that you want to collect data for by changing the city number variable in `deploy/setenv.sh`, the default value is 238 (Belfast). +You can change the city that you want to collect data for by changing the city +number variable in `deploy/setenv.sh`; the default value is 238 (Belfast). The default port is set at 14000, this can also be modified in the `setenv.sh` script. ## Launching the Process -To launch the process of retrieving data about each BelfastBikes location, run the start_bikes.sh executable in the `deploy` directory +To launch the process of retrieving data about each BelfastBikes location, run +the `start_bikes.sh` executable in the `deploy` directory ``` ~/deploy$ ./start_bikes.sh ``` This launches the bikes.q script wrapped in the TorQ framework. ## Collecting Data -The process will run for 14 day once it starts, collecting data every 30 seconds. During the 14 days, there will be a write down to hdb at 6am every day using the previous day's data and saved by date. Within the bikes.q script there are timer functions for both the collection of data and the writedown which can be modified. -The xmllogs directory will contain previously collected data in its raw XML format for each day, saved as a plain text file. +The process will run for 14 days once it starts, collecting data every 30 seconds. +During the 14 days, there will be a write down to hdb at 6am every day using the +previous day's data and saved by date. Within the bikes.q script there are timer +functions for both the collection of data and the writedown which can be modified. + +The jsonlogs directory will contain previously collected data in its raw JSON +format for each day, saved as a plain text file. + +## Replaying Logs + +In order to replay a log file on disk, the following can be used: +``` +.bikes.replayjsonlog 2019.01.01 +``` +This reads the data to the in memory table `place`, which can then be written to +disk with: +``` +.bikes.writedown 2019.01.01 +``` ## Example Usage -To query the persisted data in the hdb, we can either load in a specific date partition to a q session, or load the entire database to perform queries across a range of dates. To load in the hdb to a q session we can run the following command: +To query the persisted data in the HDB, we can either load in a specific date +partition to a q session, or load the entire database to perform queries across +a range of dates. To load in the HDB to a q session we can run the following command: ``` ~/deploy$ q hdb/ ``` @@ -82,7 +117,8 @@ data:select uid,name,lat,lng,time by bike_numbers from lj[ungroup s;t] ``` This data table table will show what stations a particular bike has visited during that day. -Within a partition of our database, we could find out how many rentals were taken from each docking station during that particular day: +Within a partition of our database, we could find out how many rentals were taken +from each docking station during that particular day: ``` q)`x xdesc (select count i by uid from d:select from (update d: differ uid by bike_numbers from (ungroup select time,uid,bike_numbers from place)) where d,not bike_numbers=0) lj select last name by uid from place uid | x name @@ -96,7 +132,8 @@ uid | x name 1257794| 19 "Belfast City Hospital Lisburn Rd" 555520 | 17 "Queens University / Botanic Gardens " ``` -Or we could query across a range of dates within the database, for example finding out which docking station was most popular across several days: +Or we could query across a range of dates within the database, for example +finding out which docking station was most popular across several days: ``` q)select max x,Dock:name where x=max x by date from ((select count i by uid,date from d:select from (update d: differ uid by bike_numbers from (ungroup select date,time, uid,bike_numbers from place)) where d,not bike_numbers=0) lj select last name by uid from place) date | x Dock @@ -106,3 +143,10 @@ date | x Dock 2017.09.25| 41 "Alfred Street / St Malachy's Church" ``` +## Stopping the Process + +In order to stop the process, run the `stop_bikes.sh` executable, in the `deploy` folder. +``` +~/deploy$ ./stop_bikes.sh +``` +This will save down data collected during the day and kill the process. diff --git a/appconfig/settings/belfastbikes.q b/appconfig/settings/belfastbikes.q index 5ed6068..7273c36 100644 --- a/appconfig/settings/belfastbikes.q +++ b/appconfig/settings/belfastbikes.q @@ -1 +1,4 @@ -.proc.loadprocesscode:1b +.proc.loadprocesscode:1b; + +hdbdir:hsym`$getenv`KDBHDB; / location of hdb +webpage:"https://nextbike.net/maps/nextbike-live.json"; / URL for nextbike API diff --git a/code/belfastbikes/bikes.q b/code/belfastbikes/bikes.q index 3fa1d74..127a881 100644 --- a/code/belfastbikes/bikes.q +++ b/code/belfastbikes/bikes.q @@ -1,54 +1,119 @@ +/ Record station info from nextbike API -params:.Q.opt[.z.x] - -getbikedata:{ - /Retrieve data from website and save to xml file - system[raze"wget -q -O bikes.xml ",params[`webpage],"?city=",params[`cityno]]; - /Remove any spaces between quotations in preparation for parsing - l:raze read0`:bikes.xml; pos:o where any (o:where l = " ") within/: 2 cut where "\""=/:l; - l[pos]:"^";l} - -logbikedata:{[t;f] - /Open connection to file using current time on request - hdat:hopen hsym`$raze[params[`xmllog]],"/","xmllog_",ssr[string[.z.D];".";""],"_",raze params[`cityno],".txt"; - /Write data on single line possibly with time appending each time - hdat string[t]," -- ", f,"\n"; - /Close connection to file. - hclose[hdat]; - } - -parsedata:{[x] - /Use xml.q p function to parse - parsed:.xml.p[x]; parsed} - -mkplace:{[parsed] - iplace: update "F"$'lat, "F"$'lng, "I"$'uid, "I"$'number, "I"$'bikes, "I"$'bike_racks, "I"$'free_racks, 0^"I"$'"," vs'bike_numbers, "I"$'place_type, "I"$'rack_locks from delete spot, bike_types, bike from `time xcols select from update time:.z.P from update name:{[x]ssr[x;"^";" "]}'[name] from uj/[enlist each parsed[0;2;0;2;0;2;;1]]; - `place insert iplace;} - +\d .bikes + +hdbdir:@[value;`hdbdir;hsym`$getenv`KDBHDB]; +webpage:@[value;`webpage;"https://nextbike.net/maps/nextbike-live.json"]; + +// Request data from nextbike API +request:{ + .lg.o[`bikes;"Requesting data from nextbike for city ",c:raze .proc.params`cityno]; + /Retrieve data from website + req:.Q.hg hsym `$webpage,"?city=",c; + .lg.o[`bikes;"Returning data for city ",c]; + :req; + }; + +// Get JSON log file name for date d +getjsonlog:{[d] + :hsym`$raze[.proc.params`jsonlog],"/jsonlog_",(string[d]except"."),"_",raze .proc.params[`cityno],".txt"; + }; + +// Log output of API request to file +logbikedata:{[t;j] + fn:getjsonlog`date$t; + .lg.o[`bikes;"Writing to JSON log: ",f:.os.pth fn]; + /Open connection to file using current time on request + hdat:hopen fn; + /Write data on single line with corresponding time + hdat string[t]," -- ",j,"\n"; + /Close connection to file. + hclose hdat; + .lg.o[`bikes;"Finished writing to JSON log: ",f]; + }; + +// Replay a JSON log into memory +replayjsonlog:{[d] + if[()~key fn:getjsonlog d; + .lg.o[`bikes;"Could not find log file, exiting early: ",.os.pth fn]; + :(); + ]; + .lg.o[`bikes;"Found log file, beginning replay: ",f:.os.pth fn]; + /Replay each line of log file in turn + {mkplace . readlogline x}'[read0 fn]; + .lg.o[`bikes;"Finished replaying log file: ",f]; + }; + +// Parse line from log file +readlogline:{@[;1;.j.k]@[0 29 33 cut x;0;"P"$]0 2}; + +// Parse json into in memory table place +mkplace:{[t;parsed] + .lg.o[`bikes;"Starting to parse JSON..."] + /Extract tables from JSON + tab:first[first[parsed`countries]`cities]`places; + bike_tab:update name: (exec raze (count each bike_list) #' enlist each name from tab) from exec raze bike_list from tab; + /Refactor data and extract relevant data + tab:`address`bike_list`spot`bike_types`bike _`time xcols update time:.z.P^t,name:trim name from tab; + bike_tab:`pedelec_battery`battery_pack _ `time`name xcols update time:.z.P^t,name:trim name,number:"I"$number,lock_types:raze lock_types from bike_tab; + /Convert floats to ints where appropriate + tab:@[tab;`uid`number`bikes`bike_racks`free_racks;`int$]; + tab:@[tab;`place_type`bike_numbers;"I"$]; + bike_tab:@[bike_tab;`bike_type`boardcomputer;`int$]; + .lg.o[`bikes;"Finished parsing JSON, adding to in memory tables"]; + /Insert data into table in memory + `place insert tab; + .lg.o[`bikes;"Added data to in memory table: place"]; + `bike_list insert bike_tab; + .lg.o[`bikes;"Added data to in memory table: bike_list"]; + }; + +// Make request to nextbike API, log to disk and parse into in memory table fullbikedata:{ - /Write messages to out logs as requests are processed - .lg.o[1;"Starting to make requests"]; - l:getbikedata[]; - .lg.o[1;"Finished request"]; - logbikedata[.z.P;l]; - .lg.o[1;"Finished logging"]; - parsed:parsedata[l]; - .lg.o[1;"Finished parsing"]; - mkplace[parsed]; - .lg.o[1;"Requests complete!"]; - } + .lg.o[`bikes;"Request started"]; + /Record time of request + rt:.z.P; + /Request data from nextbike API + l:request[]; + /Write messages to out logs as requests are processed + logbikedata[rt;l]; + /Parse JSON into a table and add to in memory table + mkplace[rt;.j.k l]; + .lg.o[`bikes;"Request complete"]; + }; -fullbikedataprotected:{[] @[fullbikedata;`;{[x] show "Error running fullbikedata",x}]}; +fullbikedataprotected:{[]@[fullbikedata;`;{[x].lg.e[`bikes]"Error running fullbikedata: ",x}]}; +// Write data to disk for date d +writedown:{[d] + dir:` sv .Q.par[hdbdir;d;`place],`; + bikesdir:` sv .Q.par[hdbdir;d;`bike_list],`; + .lg.o[`bikes;"Writing place data to: ",.os.pth dir]; + .lg.o[`bikes;"Writing bike_list data to: ",.os.pth bikesdir]; + /Checks if directory already exists. Appends data if it does. + checkdir:hsym `$"hdb/",string .z.d; + cmd:$[`place in key checkdir;(insert);set]; + cmd[dir; select from `..place where time.date=(d)]; + cmd:$[`bike_list in key checkdir;insert;set]; + cmd[bikesdir;select from `..bike_list where time.date=(d)]; + }; -//Repeat for 14 days - every 30 seconds -.timer.repeat[.proc.cp[];.proc.cp[]+14D00:00;0D00:00:30;(fullbikedataprotected;`);"belfastbikes"] +// Clear data for date d +cleardate:{[d] + delete from `..place where time.date=d; + delete from `..bike_list where time.date=d; + }; -//At 6am each day, write down yesterdays data to hdb, and delete the data in memory from 2 days before -writedown:{(hsym `$raze"hdb/",string (.z.d-1),`$"/place/") set select from place where time.date=(.z.d-1); - delete from `place where time.date=(.z.d-2)} +// Write yesterdays data to disk +eodwritedown:{ + writedown .z.d-1; + cleardate .z.d-2; + }; -@[writedown;;"writedown failed"] +\d . +// Repeat for 14 days - every 30 seconds +.timer.repeat[.proc.cp[];.proc.cp[]+14D00:00;0D00:00:30;(.bikes.fullbikedataprotected;`);"belfastbikes"]; -.timer.repeat[(.z.D+1)+06:00:00.000000;.z.d+14;0D01:00:00;(writedown;`);"dailyWritedownBikes"] +// At 6am each day, write down yesterdays data to hdb, and delete the data in memory from 2 days before +.timer.repeat[(.z.D+1)+06:00:00.000000;.z.d+14;0D01:00:00;(.bikes.eodwritedown;`);"dailyWritedownBikes"]; diff --git a/code/belfastbikes/order.txt b/code/belfastbikes/order.txt deleted file mode 100644 index 72974d6..0000000 --- a/code/belfastbikes/order.txt +++ /dev/null @@ -1,2 +0,0 @@ -xml.q - diff --git a/code/belfastbikes/xml.q b/code/belfastbikes/xml.q deleted file mode 100644 index 173896c..0000000 --- a/code/belfastbikes/xml.q +++ /dev/null @@ -1,72 +0,0 @@ - -\d .xml - -/ XML Parse - -p:{ - b:where x in "<>"; - b:$["?"=x 1+first b;2 _ b;b]; - o:b i:2*j:til `int$count[b]%2; - c:b i+1; - e:"/"=x 1+o; - m:"/"=x -1+c; - a:1 _' b _ x; - p:prev last each {[a;x;m;e]$[m;a;e;-1 _ a;a,x]}\[0N;j;m;e]; - ne:where not e; - d:ne group p ne; - :{[a;d;m;e;i] - (n[0;0]; - 1 _ 1 _' -1 _' (!). n:"S= "0:$[m i;-1 _ a 2*i;a 2*i]; - $[m i;();e i+1;a 1+2*i;.z.s[a;d;m;e] each d i] - )}[a;d;m;e] each d 0N} - -/ XML Generate - -/header -h:"" - -/ attribute dictionary to string -ad:{[d]raze " ",'string[key d],'"=",'"\"",'{$[10h=type x;x;string x]}'[value d],'"\""} - -/ format float - add a .0 if the float happens to be a whole number -ff:{s,$["." in s:string x;"";".0"]} - -el:{[n;d;c] / Name attributeDict Content - $[count c; - "<",string[n],$[count d;ad d;""],">",t[c],""; - "<",string[n],$[count d;ad d;""],"/>"]} - - -t:{ - $[0=t:type x; - $[(3=count x) and -11h=type first x; - el . x; - (all 3=count each x); - raze el .' x; - '`shape]; - 10h=t;x; - -9h=t;ff x; - 0>t;string x; - 9h=t;" " sv ff each x; - t within 1 20h;" " sv string x; - '`type]} - -g:{h,t x} - -prse:{[jg]((1#jg[0;])!enlist ((1_jg[0;])[0]; - {[x;y](1#y[x;])!(enlist ((); - {[x;y] - if[x in (0;1;2);:(first -1#(1_y[x;]));:()]; - z:(1_y[x;])[1]; - {[z;x] - if[x=0;:(1#z[0;0])!(enlist (();first -1#z[0;]));:()]; - (enlist z[x;0])!enlist (z[x;1];( - {[r] - (1#r)!(enlist (();first -1#r))}'[z[x;2]]))}[z;] each (til count z) - }[x;y])) - }[;(1_jg[0;])[1]] each (til count (1_jg[0;])[1])))} - - - -/prse:{[jg]((1#jg[0;])!enlist ((1_jg[0;])[0];{[x;y] (1#y[x;])!(enlist (();{[x;y]if[x in (0;1;2);:(first -1#(1_y[x;]));:()];z:(1_y[x;])[1];{[z;x]if[x=0;:(1#z[0;0])!(enlist (();first -1#z[0;]));:()];(enlist z[x;0])!enlist (z[x;1];({[r](1#r)!(enlist (();first -1#r))}'[z[x;2]]))}[z;] each (til count z)}[x;y]))}[;(1_jg[0;])[1]] each (til count (1_jg[0;])[1])))} - diff --git a/code/util/intradaybikeswd.q b/code/util/intradaybikeswd.q new file mode 100644 index 0000000..036e9f7 --- /dev/null +++ b/code/util/intradaybikeswd.q @@ -0,0 +1,6 @@ +// Gets the rdb port past in from the command line. +conn:.Q.def[(enlist `conn)!enlist 0Nj;.Q.opt .z.x][`conn]; +// Opens a handle to rbd and calls the writedown function. +bikerdb:@[hopen;conn;{-2 "Cannot perform writedown. Unable to open connection, error: ",x;exit 1;}]; +bikerdb".bikes.writedown[.z.d]"; +exit 0; diff --git a/setenv.sh b/setenv.sh index 3ffd10e..8faee05 100644 --- a/setenv.sh +++ b/setenv.sh @@ -8,7 +8,9 @@ export KDBLOG=${TORQHOME}/logs export KDBHTML=${TORQHOME}/html export KDBLIB=${TORQHOME}/lib export KDBBASEPORT=14000 -export XMLLOG=${TORQHOME}/xmllogs +export KDBHDB=${TORQHOME}/hdb +export KDBTESTS=${TORQHOME}/tests +export JSONLOG=${TORQHOME}/jsonlogs export CITYNO=238 # sets the base port for a default TorQ installation diff --git a/start_bikes.sh b/start_bikes.sh index e16fc9f..3bcb8c1 100755 --- a/start_bikes.sh +++ b/start_bikes.sh @@ -7,4 +7,4 @@ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$KDBLIB/l32 # launch the service echo 'Starting BelfastBikes...' -nohup q torq.q ${KDBSTACKID} -proctype belfastbikes -procname belfastbikes1 -localtime -kdblog ${KDBLOG} -xmllog ${XMLLOG} -webpage https://nextbike.net/maps/nextbike-live.xml -cityno ${CITYNO} $KDBLOG/log.txt 2>&1 & +nohup q torq.q ${KDBSTACKID} -proctype belfastbikes -procname belfastbikes1 -localtime -jsonlog ${JSONLOG} -cityno ${CITYNO} $KDBLOG/log.txt 2>&1 & diff --git a/stop_bikes.sh b/stop_bikes.sh new file mode 100755 index 0000000..844682b --- /dev/null +++ b/stop_bikes.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# Load the environment. +. ./setenv.sh + +# Get the base port and rdb port. +export KDBSTACKID="-stackid ${KDBBASEPORT}" +export KDBRDBPORT=$(($KDBBASEPORT+1)) + +# Find the process id. +pid=$(ps -o pid,args -C q | grep ${KDBBASEPORT} | awk '{print $1}') + +# Check the process is running. Kill if it is. +if [[ -z $pid ]];then + echo "BelfastBikes is not currently running." +else + echo "Stopping BelfastBikes..." + # Writes down data that has arrived during the day. + q code/util/intradaybikeswd.q -q -conn ${KDBRDBPORT} + if [[ $? = 0 ]]; then + kill -15 $pid + else + read -p "Todays data has not been saved. Do you still want to proceed?(y/n)" user + case $user in + [Yy]* ) echo "Proceeding with shutdown...";kill -15 $pid;; + [Nn]* ) echo "Cancelling shutdown.";exit 0 ;; + * ) echo "Expected y/n.";; + esac + fi +fi diff --git a/tests/bikes.csv b/tests/bikes.csv new file mode 100644 index 0000000..0822b78 --- /dev/null +++ b/tests/bikes.csv @@ -0,0 +1,15 @@ +action,ms,bytes,lang,code,repeat,minver,comment +comment,0,0,q,,0,,Unit tests for TorQ-Bikes +before,0,0,q,system"t 0",0,,turn timer off +before,0,0,q,"testdir:hsym`$getenv[`KDBTESTS],"/data"",0,,test data directory +before,0,0,q,.proc.params[`jsonlog`cityno]:("/tmp";"1234"),0,,set required command line params +before,0,0,q,"req:raze read0` sv testdir,`req.json",0,,load sample request output +before,0,0,q,"testlog:read0` sv testdir,`jsonlog.txt",0,,get testlog from disk +run,0,0,q,.bikes.logbikedata[2019.01.01D00:00;req],0,,create test log +true,0,0,q,"testlog~distinct read0 .bikes.getjsonlog 2019.01.01",0,,compare log output to test data +after,0,0,q,.os.del .bikes.getjsonlog 2019.01.01,0,,remove created log +before,0,0,q,"parsed_data:get` sv testdir,`parsed_data",0,,load parsed json data +true,0,0,q,parsed_data~.j.k req,0,,test json parsing +before,0,0,q,"place_data:get` sv testdir,`place",0,,load place table +before,0,0,q,.bikes.mkplace[2019.01.01D00:00;parsed_data],0,,extract place table from parsed data +true,0,0,q,place_data~place,0,,check place table diff --git a/tests/data/jsonlog.txt b/tests/data/jsonlog.txt new file mode 100644 index 0000000..e3d5641 --- /dev/null +++ b/tests/data/jsonlog.txt @@ -0,0 +1 @@ +2019.01.01D00:00:00.000000000 -- {"countries":[{"lat":53.6707,"lng":-4.39453,"zoom":5,"name":"BelfastBikes","hotline":"00443433571551","domain":"bu","language":"en","email":"belfastbikes@nsl.co.uk","timezone":"Europe/London","currency":"GBP","country_calling_code":"+44","system_operator_address":"NSL Ltd Unit 8, 48 North, 48 Duncrue Street, Belfast BT3 9AR","country":"GB","country_name":"United Kingdom","terms":"https://www.belfastbikes.co.uk/en/belfast/terms/#201904","policy":"https://www.belfastbikes.co.uk/en/belfast/privacy/","website":"https://www.belfastbikes.co.uk/xx/belfast/","show_bike_types":false,"show_bike_type_groups":false,"show_free_racks":false,"booked_bikes":0,"set_point_bikes":630,"available_bikes":253,"capped_available_bikes":true,"pricing":"https://www.belfastbikes.co.uk/en/belfast/prices/","cities":[{"uid":238,"lat":54.5969,"lng":-5.92918,"zoom":15,"maps_icon":"","alias":"belfast","break":false,"name":"Belfast","num_places":47,"refresh_rate":"10120","bounds":{"south_west":{"lat":54.5726,"lng":-5.9585},"north_east":{"lat":54.6124,"lng":-5.8906}},"booked_bikes":0,"set_point_bikes":630,"available_bikes":253,"return_to_official_only":true,"bike_types":{"14":588},"places":[{"uid":263966,"lat":54.597175,"lng":-5.93097,"bike":false,"name":"City Hall","address":null,"spot":true,"number":3902,"bikes":5,"booked_bikes":0,"bike_racks":20,"free_racks":2,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83166","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83154","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83117","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83099","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83064","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83166","83154","83117","83099","83064"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":316463,"lat":54.601309,"lng":-5.92187,"bike":false,"name":"Donegall Quay","address":null,"spot":true,"number":3904,"bikes":5,"booked_bikes":0,"bike_racks":16,"free_racks":8,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83101","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83096","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83286","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83237","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83229","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83101","83096","83286","83237","83229"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":316476,"lat":54.598224,"lng":-5.924024,"bike":false,"name":"Victoria Square / Victoria Street","address":null,"spot":true,"number":3903,"bikes":5,"booked_bikes":0,"bike_racks":10,"free_racks":1,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83135","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83246","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83177","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83176","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83386","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83135","83246","83177","83176","83386"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":316483,"lat":54.595158,"lng":-5.923503,"bike":false,"name":"St George's Market / Cromac Square","address":null,"spot":true,"number":3906,"bikes":4,"booked_bikes":0,"bike_racks":12,"free_racks":8,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83302","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83395","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83456","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82869","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83302","83395","83456","82869"],"bike_types":{"14":4},"place_type":"0","rack_locks":true},{"uid":318480,"lat":54.589166666667,"lng":-5.9333333333333,"bike":false,"name":"Botanic Avenue / Shaftesbury Square","address":null,"spot":true,"number":3909,"bikes":0,"booked_bikes":0,"bike_racks":16,"free_racks":16,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":318485,"lat":54.594774,"lng":-5.933173,"bike":false,"name":"Europa Bus Station / Blackstaff Square","address":null,"spot":true,"number":3910,"bikes":4,"booked_bikes":0,"bike_racks":16,"free_racks":13,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83365","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82840","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82838","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82835","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83365","82840","82838","82835"],"bike_types":{"14":4},"place_type":"0","rack_locks":true},{"uid":318488,"lat":54.593512512185,"lng":-5.9343874454498,"bike":false,"name":"Great Victoria Street / Hope Street","address":null,"spot":true,"number":3911,"bikes":5,"booked_bikes":0,"bike_racks":18,"free_racks":9,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83165","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83030","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83441","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83383","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82892","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83165","83030","83441","83383","82892"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":318490,"lat":54.599364,"lng":-5.929936,"bike":false,"name":"Castle Place / Royal Avenue","address":null,"spot":true,"number":0,"bikes":0,"booked_bikes":0,"bike_racks":14,"free_racks":14,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":318501,"lat":54.603713,"lng":-5.929348,"bike":false,"name":"Cathedral Gardens / York Street","address":null,"spot":true,"number":3914,"bikes":5,"booked_bikes":0,"bike_racks":20,"free_racks":5,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83160","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83141","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83070","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83265","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83215","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83160","83141","83070","83265","83215"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":318504,"lat":54.605103707785,"lng":-5.932799577713,"bike":false,"name":"Carrick Hill/St Patricks Church","address":null,"spot":true,"number":3915,"bikes":0,"booked_bikes":0,"bike_racks":12,"free_racks":12,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":318529,"lat":54.592772801121,"lng":-5.9316301345825,"bike":false,"name":"Bankmore Square / Dublin Road","address":null,"spot":true,"number":3918,"bikes":5,"booked_bikes":0,"bike_racks":16,"free_racks":8,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83171","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83292","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83267","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83258","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83251","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83171","83292","83267","83258","83251"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":318531,"lat":54.597341389985,"lng":-5.9348702430725,"bike":false,"name":"College Square East ","address":null,"spot":true,"number":3919,"bikes":1,"booked_bikes":0,"bike_racks":16,"free_racks":15,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"82951","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["82951"],"bike_types":{"14":1},"place_type":"0","rack_locks":true},{"uid":318535,"lat":54.603867056497,"lng":-5.91712474823,"bike":false,"name":"Odyssey / Sydenham Road","address":null,"spot":true,"number":3921,"bikes":5,"booked_bikes":0,"bike_racks":22,"free_racks":6,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83162","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83115","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83109","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83035","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83279","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83162","83115","83109","83035","83279"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":318537,"lat":54.604722222222,"lng":-5.9213888888889,"bike":false,"name":"Corporation Square","address":null,"spot":true,"number":3922,"bikes":4,"booked_bikes":0,"bike_racks":14,"free_racks":9,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83307","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83447","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82877","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82868","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83307","83447","82877","82868"],"bike_types":{"14":4},"place_type":"0","rack_locks":true},{"uid":318543,"lat":54.594851759084,"lng":-5.9274214804827,"bike":false,"name":"Alfred Street / St Malachy's Church","address":null,"spot":true,"number":3923,"bikes":5,"booked_bikes":0,"bike_racks":14,"free_racks":9,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83050","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83039","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83256","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82991","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82992","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83050","83039","83256","82991","82992"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":318546,"lat":54.601213411626,"lng":-5.931361913681,"bike":false,"name":"Royal Avenue / Castlecourt","address":null,"spot":true,"number":3925,"bikes":5,"booked_bikes":0,"bike_racks":12,"free_racks":7,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83133","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83080","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83076","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83301","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82990","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83133","83080","83076","83301","82990"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":318548,"lat":54.601393641225,"lng":-5.925954580307,"bike":false,"name":"Cotton Court / Waring Street","address":null,"spot":true,"number":3926,"bikes":5,"booked_bikes":0,"bike_racks":12,"free_racks":6,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83078","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83349","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83315","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83287","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83228","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83078","83349","83315","83287","83228"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":318552,"lat":54.595924,"lng":-5.929892,"bike":false,"name":"Linenhall Street / Donegall Square South","address":null,"spot":true,"number":3928,"bikes":4,"booked_bikes":0,"bike_racks":16,"free_racks":13,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83238","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83429","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82965","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82843","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83238","83429","82965","82843"],"bike_types":{"14":4},"place_type":"0","rack_locks":true},{"uid":352517,"lat":54.597263697179,"lng":-5.9210354089737,"bike":false,"name":"Waterfront","address":null,"spot":true,"number":3908,"bikes":5,"booked_bikes":0,"bike_racks":24,"free_racks":11,"maintenance":true,"terminal_type":"7inch","bike_list":[{"number":"83174","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83173","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83127","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83118","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83074","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83174","83173","83127","83118","83074"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":517255,"lat":54.584283810472,"lng":-5.9366565942764,"bike":false,"name":"Queens University / University Road ","address":null,"spot":true,"number":3933,"bikes":0,"booked_bikes":0,"bike_racks":16,"free_racks":16,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":555520,"lat":54.584049537784,"lng":-5.9328201762401,"bike":false,"name":"Queens University / Botanic Gardens ","address":null,"spot":true,"number":3934,"bikes":2,"booked_bikes":0,"bike_racks":14,"free_racks":13,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83183","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82932","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83183","82932"],"bike_types":{"14":2},"place_type":"0","rack_locks":true},{"uid":566097,"lat":54.605694055706,"lng":-5.9112238883972,"bike":false,"name":"Titanic Belfast Met","address":null,"spot":true,"number":3932,"bikes":3,"booked_bikes":0,"bike_racks":18,"free_racks":17,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83155","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83202","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83017","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83155","83202","83017"],"bike_types":{"14":3},"place_type":"0","rack_locks":true},{"uid":1728242,"lat":54.603847,"lng":-5.945705,"bike":false,"name":"Shankill Leisure Centre/ Shankill Road","address":null,"spot":true,"number":3938,"bikes":4,"booked_bikes":0,"bike_racks":18,"free_racks":14,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83107","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83328","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83306","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83434","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83107","83328","83306","83434"],"bike_types":{"14":4},"place_type":"0","rack_locks":true},{"uid":1839423,"lat":54.612131399427,"lng":-5.9424233436584,"bike":false,"name":"Girdwood Community Hub/ Cliftonville Park Avenue","address":null,"spot":true,"number":3942,"bikes":0,"booked_bikes":0,"bike_racks":18,"free_racks":18,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":1941814,"lat":54.612429630058,"lng":-5.9368443489075,"bike":false,"name":"Antrim Road / Duncairn Centre","address":null,"spot":true,"number":3943,"bikes":0,"booked_bikes":0,"bike_racks":8,"free_racks":8,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":2198906,"lat":54.598289230279,"lng":-5.8905762434006,"bike":false,"name":"CS Lewis Square","address":null,"spot":true,"number":3944,"bikes":5,"booked_bikes":0,"bike_racks":16,"free_racks":9,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83151","bike_type":14,"lock_types":["rack_adapter","scooter_motor_lock"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83086","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83011","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83002","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83348","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83151","83086","83011","83002","83348"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":2999089,"lat":54.599417286857,"lng":-5.9475946426392,"bike":false,"name":"Falls Road/Twin Spire","address":null,"spot":true,"number":3941,"bikes":0,"booked_bikes":0,"bike_racks":8,"free_racks":8,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":4708666,"lat":54.59533998,"lng":-5.916438103,"bike":false,"name":"Central Station / Mays Meadow","address":null,"spot":true,"number":3905,"bikes":5,"booked_bikes":0,"bike_racks":20,"free_racks":5,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83000","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83163","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83088","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83079","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83047","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83000","83163","83088","83079","83047"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":5202269,"lat":54.589770306522,"lng":-5.9584951400757,"bike":false,"name":"Royal Victoria Hospital","address":null,"spot":true,"number":3936,"bikes":5,"booked_bikes":0,"bike_racks":20,"free_racks":16,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83140","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83342","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82873","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82854","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82834","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83140","83342","82873","82854","82834"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":5887024,"lat":54.607322128769,"lng":-5.9370102162939,"bike":false,"name":"Carlisle Circus","address":null,"spot":true,"number":3939,"bikes":0,"booked_bikes":0,"bike_racks":20,"free_racks":20,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":5913505,"lat":54.599738233534,"lng":-5.9363894420676,"bike":false,"name":"Millfield","address":null,"spot":true,"number":3920,"bikes":1,"booked_bikes":0,"bike_racks":18,"free_racks":17,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83285","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83285"],"bike_types":{"14":1},"place_type":"0","rack_locks":true},{"uid":8594283,"lat":54.594071948605,"lng":-5.9158158302307,"bike":false,"name":"Allstate","address":null,"spot":true,"number":3948,"bikes":5,"booked_bikes":0,"bike_racks":12,"free_racks":5,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83170","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83122","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83007","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83378","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83454","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83170","83122","83007","83378","83454"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":8884528,"lat":54.574426406165,"lng":-5.9322082030121,"bike":false,"name":"Stranmillis Roundabout","address":null,"spot":true,"number":3931,"bikes":0,"booked_bikes":0,"bike_racks":14,"free_racks":14,"maintenance":false,"terminal_type":"","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":8884611,"lat":54.580568737824,"lng":-5.9206491708755,"bike":false,"name":"Ormeau Park","address":null,"spot":true,"number":3916,"bikes":5,"booked_bikes":0,"bike_racks":12,"free_racks":3,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83316","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83295","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83243","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82899","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82896","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83316","83295","83243","82899","82896"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":9318342,"lat":54.572559194732,"lng":-5.9151077270508,"bike":false,"name":"Ormeau Road / Rosetta Roundabout ","address":null,"spot":true,"number":3930,"bikes":0,"booked_bikes":0,"bike_racks":18,"free_racks":20,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":9490125,"lat":54.611864232631,"lng":-5.9027802944183,"bike":false,"name":"Titanic Walkway/Queens Road","address":null,"spot":true,"number":3917,"bikes":5,"booked_bikes":0,"bike_racks":20,"free_racks":5,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"82041","bike_type":14,"lock_types":["analog_code_lock","rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83033","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83026","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83185","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83448","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["82041","83033","83026","83185","83448"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":9785431,"lat":54.596110718522,"lng":-5.8927917480469,"bike":false,"name":"Connswater Shopping Centre","address":null,"spot":true,"number":3946,"bikes":1,"booked_bikes":0,"bike_racks":10,"free_racks":9,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"82916","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["82916"],"bike_types":{"14":1},"place_type":"0","rack_locks":true},{"uid":9842134,"lat":54.598378,"lng":-5.8993240565893,"bike":false,"name":"Skainos ","address":null,"spot":true,"number":3945,"bikes":1,"booked_bikes":0,"bike_racks":8,"free_racks":7,"maintenance":false,"terminal_type":"","bike_list":[{"number":"82956","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["82956"],"bike_types":{"14":1},"place_type":"0","rack_locks":true},{"uid":10784207,"lat":54.597721,"lng":-5.927799,"bike":false,"name":"Arthur Street / Chichester Street","address":null,"spot":true,"number":3929,"bikes":5,"booked_bikes":0,"bike_racks":8,"free_racks":0,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83152","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83139","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83094","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83092","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83060","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83152","83139","83094","83092","83060"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":10790840,"lat":54.591252932448,"lng":-5.9226393699646,"bike":false,"name":"Gasworks ( Lagan Towpath )","address":null,"spot":true,"number":3927,"bikes":3,"booked_bikes":0,"bike_racks":16,"free_racks":13,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83164","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82893","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82831","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83164","82893","82831"],"bike_types":{"14":3},"place_type":"0","rack_locks":true},{"uid":11813220,"lat":54.600548419651,"lng":-5.9053230285645,"bike":false,"name":"Fraser Pass","address":null,"spot":true,"number":3947,"bikes":5,"booked_bikes":0,"bike_racks":14,"free_racks":6,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83071","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83067","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83054","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83025","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83212","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83071","83067","83054","83025","83212"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":12270730,"lat":54.595265387284,"lng":-5.9491395950317,"bike":false,"name":"Grosvenor Road/Servia Street","address":null,"spot":true,"number":3940,"bikes":3,"booked_bikes":0,"bike_racks":12,"free_racks":10,"maintenance":false,"terminal_type":"","bike_list":[{"number":"83343","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83282","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82887","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83343","83282","82887"],"bike_types":{"14":3},"place_type":"0","rack_locks":true},{"uid":12674356,"lat":54.592144968585,"lng":-5.9255576133728,"bike":false,"name":"Gasworks (Cromac Street)","address":null,"spot":true,"number":3907,"bikes":5,"booked_bikes":0,"bike_racks":12,"free_racks":7,"maintenance":false,"terminal_type":"","bike_list":[{"number":"83077","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":true,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83058","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83023","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83012","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83321","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83077","83058","83023","83012","83321"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":12711114,"lat":54.586525125608,"lng":-5.9399449825287,"bike":false,"name":"Belfast City Hospital","address":null,"spot":true,"number":3935,"bikes":0,"booked_bikes":0,"bike_racks":18,"free_racks":18,"maintenance":false,"terminal_type":"","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":12860523,"lat":54.608564888811,"lng":-5.9411358833313,"bike":false,"name":"Mater Hospital/Crumlin Road","address":null,"spot":true,"number":3937,"bikes":0,"booked_bikes":0,"bike_racks":10,"free_racks":10,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":12911368,"lat":54.588175724068,"lng":-5.9354388713837,"bike":false,"name":"Bradbury Place","address":null,"spot":true,"number":3924,"bikes":0,"booked_bikes":0,"bike_racks":16,"free_racks":16,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true}]}]}]} diff --git a/tests/data/parsed_data b/tests/data/parsed_data new file mode 100644 index 0000000..68ffee1 Binary files /dev/null and b/tests/data/parsed_data differ diff --git a/tests/data/place b/tests/data/place new file mode 100644 index 0000000..6df626c Binary files /dev/null and b/tests/data/place differ diff --git a/tests/data/req.json b/tests/data/req.json new file mode 100644 index 0000000..7aa1c41 --- /dev/null +++ b/tests/data/req.json @@ -0,0 +1 @@ +{"countries":[{"lat":53.6707,"lng":-4.39453,"zoom":5,"name":"BelfastBikes","hotline":"00443433571551","domain":"bu","language":"en","email":"belfastbikes@nsl.co.uk","timezone":"Europe/London","currency":"GBP","country_calling_code":"+44","system_operator_address":"NSL Ltd Unit 8, 48 North, 48 Duncrue Street, Belfast BT3 9AR","country":"GB","country_name":"United Kingdom","terms":"https://www.belfastbikes.co.uk/en/belfast/terms/#201904","policy":"https://www.belfastbikes.co.uk/en/belfast/privacy/","website":"https://www.belfastbikes.co.uk/xx/belfast/","show_bike_types":false,"show_bike_type_groups":false,"show_free_racks":false,"booked_bikes":0,"set_point_bikes":630,"available_bikes":253,"capped_available_bikes":true,"pricing":"https://www.belfastbikes.co.uk/en/belfast/prices/","cities":[{"uid":238,"lat":54.5969,"lng":-5.92918,"zoom":15,"maps_icon":"","alias":"belfast","break":false,"name":"Belfast","num_places":47,"refresh_rate":"10120","bounds":{"south_west":{"lat":54.5726,"lng":-5.9585},"north_east":{"lat":54.6124,"lng":-5.8906}},"booked_bikes":0,"set_point_bikes":630,"available_bikes":253,"return_to_official_only":true,"bike_types":{"14":588},"places":[{"uid":263966,"lat":54.597175,"lng":-5.93097,"bike":false,"name":"City Hall","address":null,"spot":true,"number":3902,"bikes":5,"booked_bikes":0,"bike_racks":20,"free_racks":2,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83166","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83154","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83117","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83099","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83064","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83166","83154","83117","83099","83064"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":316463,"lat":54.601309,"lng":-5.92187,"bike":false,"name":"Donegall Quay","address":null,"spot":true,"number":3904,"bikes":5,"booked_bikes":0,"bike_racks":16,"free_racks":8,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83101","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83096","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83286","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83237","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83229","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83101","83096","83286","83237","83229"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":316476,"lat":54.598224,"lng":-5.924024,"bike":false,"name":"Victoria Square / Victoria Street","address":null,"spot":true,"number":3903,"bikes":5,"booked_bikes":0,"bike_racks":10,"free_racks":1,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83135","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83246","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83177","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83176","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83386","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83135","83246","83177","83176","83386"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":316483,"lat":54.595158,"lng":-5.923503,"bike":false,"name":"St George's Market / Cromac Square","address":null,"spot":true,"number":3906,"bikes":4,"booked_bikes":0,"bike_racks":12,"free_racks":8,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83302","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83395","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83456","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82869","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83302","83395","83456","82869"],"bike_types":{"14":4},"place_type":"0","rack_locks":true},{"uid":318480,"lat":54.589166666667,"lng":-5.9333333333333,"bike":false,"name":"Botanic Avenue / Shaftesbury Square","address":null,"spot":true,"number":3909,"bikes":0,"booked_bikes":0,"bike_racks":16,"free_racks":16,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":318485,"lat":54.594774,"lng":-5.933173,"bike":false,"name":"Europa Bus Station / Blackstaff Square","address":null,"spot":true,"number":3910,"bikes":4,"booked_bikes":0,"bike_racks":16,"free_racks":13,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83365","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82840","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82838","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82835","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83365","82840","82838","82835"],"bike_types":{"14":4},"place_type":"0","rack_locks":true},{"uid":318488,"lat":54.593512512185,"lng":-5.9343874454498,"bike":false,"name":"Great Victoria Street / Hope Street","address":null,"spot":true,"number":3911,"bikes":5,"booked_bikes":0,"bike_racks":18,"free_racks":9,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83165","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83030","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83441","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83383","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82892","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83165","83030","83441","83383","82892"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":318490,"lat":54.599364,"lng":-5.929936,"bike":false,"name":"Castle Place / Royal Avenue","address":null,"spot":true,"number":0,"bikes":0,"booked_bikes":0,"bike_racks":14,"free_racks":14,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":318501,"lat":54.603713,"lng":-5.929348,"bike":false,"name":"Cathedral Gardens / York Street","address":null,"spot":true,"number":3914,"bikes":5,"booked_bikes":0,"bike_racks":20,"free_racks":5,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83160","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83141","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83070","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83265","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83215","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83160","83141","83070","83265","83215"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":318504,"lat":54.605103707785,"lng":-5.932799577713,"bike":false,"name":"Carrick Hill/St Patricks Church","address":null,"spot":true,"number":3915,"bikes":0,"booked_bikes":0,"bike_racks":12,"free_racks":12,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":318529,"lat":54.592772801121,"lng":-5.9316301345825,"bike":false,"name":"Bankmore Square / Dublin Road","address":null,"spot":true,"number":3918,"bikes":5,"booked_bikes":0,"bike_racks":16,"free_racks":8,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83171","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83292","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83267","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83258","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83251","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83171","83292","83267","83258","83251"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":318531,"lat":54.597341389985,"lng":-5.9348702430725,"bike":false,"name":"College Square East ","address":null,"spot":true,"number":3919,"bikes":1,"booked_bikes":0,"bike_racks":16,"free_racks":15,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"82951","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["82951"],"bike_types":{"14":1},"place_type":"0","rack_locks":true},{"uid":318535,"lat":54.603867056497,"lng":-5.91712474823,"bike":false,"name":"Odyssey / Sydenham Road","address":null,"spot":true,"number":3921,"bikes":5,"booked_bikes":0,"bike_racks":22,"free_racks":6,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83162","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83115","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83109","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83035","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83279","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83162","83115","83109","83035","83279"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":318537,"lat":54.604722222222,"lng":-5.9213888888889,"bike":false,"name":"Corporation Square","address":null,"spot":true,"number":3922,"bikes":4,"booked_bikes":0,"bike_racks":14,"free_racks":9,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83307","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83447","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82877","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82868","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83307","83447","82877","82868"],"bike_types":{"14":4},"place_type":"0","rack_locks":true},{"uid":318543,"lat":54.594851759084,"lng":-5.9274214804827,"bike":false,"name":"Alfred Street / St Malachy's Church","address":null,"spot":true,"number":3923,"bikes":5,"booked_bikes":0,"bike_racks":14,"free_racks":9,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83050","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83039","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83256","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82991","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82992","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83050","83039","83256","82991","82992"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":318546,"lat":54.601213411626,"lng":-5.931361913681,"bike":false,"name":"Royal Avenue / Castlecourt","address":null,"spot":true,"number":3925,"bikes":5,"booked_bikes":0,"bike_racks":12,"free_racks":7,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83133","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83080","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83076","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83301","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82990","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83133","83080","83076","83301","82990"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":318548,"lat":54.601393641225,"lng":-5.925954580307,"bike":false,"name":"Cotton Court / Waring Street","address":null,"spot":true,"number":3926,"bikes":5,"booked_bikes":0,"bike_racks":12,"free_racks":6,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83078","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83349","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83315","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83287","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83228","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83078","83349","83315","83287","83228"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":318552,"lat":54.595924,"lng":-5.929892,"bike":false,"name":"Linenhall Street / Donegall Square South","address":null,"spot":true,"number":3928,"bikes":4,"booked_bikes":0,"bike_racks":16,"free_racks":13,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83238","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83429","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82965","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82843","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83238","83429","82965","82843"],"bike_types":{"14":4},"place_type":"0","rack_locks":true},{"uid":352517,"lat":54.597263697179,"lng":-5.9210354089737,"bike":false,"name":"Waterfront","address":null,"spot":true,"number":3908,"bikes":5,"booked_bikes":0,"bike_racks":24,"free_racks":11,"maintenance":true,"terminal_type":"7inch","bike_list":[{"number":"83174","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83173","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83127","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83118","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83074","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83174","83173","83127","83118","83074"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":517255,"lat":54.584283810472,"lng":-5.9366565942764,"bike":false,"name":"Queens University / University Road ","address":null,"spot":true,"number":3933,"bikes":0,"booked_bikes":0,"bike_racks":16,"free_racks":16,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":555520,"lat":54.584049537784,"lng":-5.9328201762401,"bike":false,"name":"Queens University / Botanic Gardens ","address":null,"spot":true,"number":3934,"bikes":2,"booked_bikes":0,"bike_racks":14,"free_racks":13,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83183","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82932","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83183","82932"],"bike_types":{"14":2},"place_type":"0","rack_locks":true},{"uid":566097,"lat":54.605694055706,"lng":-5.9112238883972,"bike":false,"name":"Titanic Belfast Met","address":null,"spot":true,"number":3932,"bikes":3,"booked_bikes":0,"bike_racks":18,"free_racks":17,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83155","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83202","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83017","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83155","83202","83017"],"bike_types":{"14":3},"place_type":"0","rack_locks":true},{"uid":1728242,"lat":54.603847,"lng":-5.945705,"bike":false,"name":"Shankill Leisure Centre/ Shankill Road","address":null,"spot":true,"number":3938,"bikes":4,"booked_bikes":0,"bike_racks":18,"free_racks":14,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83107","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83328","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83306","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83434","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83107","83328","83306","83434"],"bike_types":{"14":4},"place_type":"0","rack_locks":true},{"uid":1839423,"lat":54.612131399427,"lng":-5.9424233436584,"bike":false,"name":"Girdwood Community Hub/ Cliftonville Park Avenue","address":null,"spot":true,"number":3942,"bikes":0,"booked_bikes":0,"bike_racks":18,"free_racks":18,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":1941814,"lat":54.612429630058,"lng":-5.9368443489075,"bike":false,"name":"Antrim Road / Duncairn Centre","address":null,"spot":true,"number":3943,"bikes":0,"booked_bikes":0,"bike_racks":8,"free_racks":8,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":2198906,"lat":54.598289230279,"lng":-5.8905762434006,"bike":false,"name":"CS Lewis Square","address":null,"spot":true,"number":3944,"bikes":5,"booked_bikes":0,"bike_racks":16,"free_racks":9,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83151","bike_type":14,"lock_types":["rack_adapter","scooter_motor_lock"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83086","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83011","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83002","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83348","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83151","83086","83011","83002","83348"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":2999089,"lat":54.599417286857,"lng":-5.9475946426392,"bike":false,"name":"Falls Road/Twin Spire","address":null,"spot":true,"number":3941,"bikes":0,"booked_bikes":0,"bike_racks":8,"free_racks":8,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":4708666,"lat":54.59533998,"lng":-5.916438103,"bike":false,"name":"Central Station / Mays Meadow","address":null,"spot":true,"number":3905,"bikes":5,"booked_bikes":0,"bike_racks":20,"free_racks":5,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83000","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83163","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83088","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83079","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83047","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83000","83163","83088","83079","83047"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":5202269,"lat":54.589770306522,"lng":-5.9584951400757,"bike":false,"name":"Royal Victoria Hospital","address":null,"spot":true,"number":3936,"bikes":5,"booked_bikes":0,"bike_racks":20,"free_racks":16,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83140","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83342","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82873","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82854","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82834","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83140","83342","82873","82854","82834"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":5887024,"lat":54.607322128769,"lng":-5.9370102162939,"bike":false,"name":"Carlisle Circus","address":null,"spot":true,"number":3939,"bikes":0,"booked_bikes":0,"bike_racks":20,"free_racks":20,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":5913505,"lat":54.599738233534,"lng":-5.9363894420676,"bike":false,"name":"Millfield","address":null,"spot":true,"number":3920,"bikes":1,"booked_bikes":0,"bike_racks":18,"free_racks":17,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83285","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83285"],"bike_types":{"14":1},"place_type":"0","rack_locks":true},{"uid":8594283,"lat":54.594071948605,"lng":-5.9158158302307,"bike":false,"name":"Allstate","address":null,"spot":true,"number":3948,"bikes":5,"booked_bikes":0,"bike_racks":12,"free_racks":5,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83170","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83122","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83007","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83378","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83454","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83170","83122","83007","83378","83454"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":8884528,"lat":54.574426406165,"lng":-5.9322082030121,"bike":false,"name":"Stranmillis Roundabout","address":null,"spot":true,"number":3931,"bikes":0,"booked_bikes":0,"bike_racks":14,"free_racks":14,"maintenance":false,"terminal_type":"","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":8884611,"lat":54.580568737824,"lng":-5.9206491708755,"bike":false,"name":"Ormeau Park","address":null,"spot":true,"number":3916,"bikes":5,"booked_bikes":0,"bike_racks":12,"free_racks":3,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83316","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83295","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83243","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82899","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82896","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83316","83295","83243","82899","82896"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":9318342,"lat":54.572559194732,"lng":-5.9151077270508,"bike":false,"name":"Ormeau Road / Rosetta Roundabout ","address":null,"spot":true,"number":3930,"bikes":0,"booked_bikes":0,"bike_racks":18,"free_racks":20,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":9490125,"lat":54.611864232631,"lng":-5.9027802944183,"bike":false,"name":"Titanic Walkway/Queens Road","address":null,"spot":true,"number":3917,"bikes":5,"booked_bikes":0,"bike_racks":20,"free_racks":5,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"82041","bike_type":14,"lock_types":["analog_code_lock","rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83033","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83026","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83185","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83448","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["82041","83033","83026","83185","83448"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":9785431,"lat":54.596110718522,"lng":-5.8927917480469,"bike":false,"name":"Connswater Shopping Centre","address":null,"spot":true,"number":3946,"bikes":1,"booked_bikes":0,"bike_racks":10,"free_racks":9,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"82916","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["82916"],"bike_types":{"14":1},"place_type":"0","rack_locks":true},{"uid":9842134,"lat":54.598378,"lng":-5.8993240565893,"bike":false,"name":"Skainos ","address":null,"spot":true,"number":3945,"bikes":1,"booked_bikes":0,"bike_racks":8,"free_racks":7,"maintenance":false,"terminal_type":"","bike_list":[{"number":"82956","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["82956"],"bike_types":{"14":1},"place_type":"0","rack_locks":true},{"uid":10784207,"lat":54.597721,"lng":-5.927799,"bike":false,"name":"Arthur Street / Chichester Street","address":null,"spot":true,"number":3929,"bikes":5,"booked_bikes":0,"bike_racks":8,"free_racks":0,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83152","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83139","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83094","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83092","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83060","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83152","83139","83094","83092","83060"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":10790840,"lat":54.591252932448,"lng":-5.9226393699646,"bike":false,"name":"Gasworks ( Lagan Towpath )","address":null,"spot":true,"number":3927,"bikes":3,"booked_bikes":0,"bike_racks":16,"free_racks":13,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83164","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82893","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82831","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83164","82893","82831"],"bike_types":{"14":3},"place_type":"0","rack_locks":true},{"uid":11813220,"lat":54.600548419651,"lng":-5.9053230285645,"bike":false,"name":"Fraser Pass","address":null,"spot":true,"number":3947,"bikes":5,"booked_bikes":0,"bike_racks":14,"free_racks":6,"maintenance":false,"terminal_type":"7inch","bike_list":[{"number":"83071","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83067","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83054","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83025","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83212","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83071","83067","83054","83025","83212"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":12270730,"lat":54.595265387284,"lng":-5.9491395950317,"bike":false,"name":"Grosvenor Road/Servia Street","address":null,"spot":true,"number":3940,"bikes":3,"booked_bikes":0,"bike_racks":12,"free_racks":10,"maintenance":false,"terminal_type":"","bike_list":[{"number":"83343","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83282","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"82887","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83343","83282","82887"],"bike_types":{"14":3},"place_type":"0","rack_locks":true},{"uid":12674356,"lat":54.592144968585,"lng":-5.9255576133728,"bike":false,"name":"Gasworks (Cromac Street)","address":null,"spot":true,"number":3907,"bikes":5,"booked_bikes":0,"bike_racks":12,"free_racks":7,"maintenance":false,"terminal_type":"","bike_list":[{"number":"83077","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":true,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83058","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83023","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83012","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null},{"number":"83321","bike_type":14,"lock_types":["rack_adapter"],"active":true,"state":"ok","electric_lock":false,"boardcomputer":0,"pedelec_battery":null,"battery_pack":null}],"bike_numbers":["83077","83058","83023","83012","83321"],"bike_types":{"14":5},"place_type":"0","rack_locks":true},{"uid":12711114,"lat":54.586525125608,"lng":-5.9399449825287,"bike":false,"name":"Belfast City Hospital","address":null,"spot":true,"number":3935,"bikes":0,"booked_bikes":0,"bike_racks":18,"free_racks":18,"maintenance":false,"terminal_type":"","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":12860523,"lat":54.608564888811,"lng":-5.9411358833313,"bike":false,"name":"Mater Hospital/Crumlin Road","address":null,"spot":true,"number":3937,"bikes":0,"booked_bikes":0,"bike_racks":10,"free_racks":10,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true},{"uid":12911368,"lat":54.588175724068,"lng":-5.9354388713837,"bike":false,"name":"Bradbury Place","address":null,"spot":true,"number":3924,"bikes":0,"booked_bikes":0,"bike_racks":16,"free_racks":16,"maintenance":false,"terminal_type":"7inch","bike_list":[],"bike_numbers":[],"bike_types":{},"place_type":"0","rack_locks":true}]}]}]}