feat: ✨ Ability to view stations from the API
Addition of a single component for stations; creation of structure; creation of function to retrieve bikes in real time
This commit is contained in:
75
velibtracker/struct/VelibStationStruct.swift
Normal file
75
velibtracker/struct/VelibStationStruct.swift
Normal file
@ -0,0 +1,75 @@
|
||||
//
|
||||
// VelibStationStruct.swift
|
||||
// velibtracker
|
||||
//
|
||||
// Created by Louis Gallet on 02/09/2023.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct VelibResponse: Codable {
|
||||
let totalCount: Int
|
||||
let results: [VelibStation]
|
||||
private enum CodingKeys: String, CodingKey {
|
||||
case totalCount = "total_count"
|
||||
case results
|
||||
}
|
||||
}
|
||||
|
||||
struct VelibStation: Codable {
|
||||
let stationcode: String
|
||||
let name: String
|
||||
let capacity: Int
|
||||
let numdocksavailable: Int
|
||||
let numbikesavailable: Int
|
||||
let mechanical: Int
|
||||
let ebike: Int
|
||||
let coordonnees_geo: Coordinates
|
||||
|
||||
}
|
||||
|
||||
struct Coordinates: Codable {
|
||||
let lon: Double
|
||||
let lat: Double
|
||||
}
|
||||
|
||||
let test = [
|
||||
VelibStation(stationcode: "293", name: "Test", capacity: 3, numdocksavailable: 3, numbikesavailable: 3, mechanical: 3, ebike: 1, coordonnees_geo: Coordinates(lon: 3.5939, lat: 2.59094)),
|
||||
VelibStation(stationcode: "293R", name: "Test2", capacity: 5, numdocksavailable: 3, numbikesavailable: 2, mechanical: 3, ebike: 1, coordonnees_geo: Coordinates(lon: 5.5939, lat: 3.59094))
|
||||
]
|
||||
|
||||
let testAPI2 = VelibResponse(totalCount: 2, results: [
|
||||
VelibStation(stationcode: "293", name: "Test", capacity: 3, numdocksavailable: 3, numbikesavailable: 3, mechanical: 3, ebike: 1, coordonnees_geo: Coordinates(lon: 3.5939, lat: 2.59094)),
|
||||
VelibStation(stationcode: "293R", name: "Test2", capacity: 5, numdocksavailable: 3, numbikesavailable: 2, mechanical: 3, ebike: 1, coordonnees_geo: Coordinates(lon: 5.5939, lat: 3.59094))
|
||||
])
|
||||
|
||||
|
||||
func fetchVelibStations(completion: @escaping ([VelibStation]?, Error?) -> Void) {
|
||||
guard let url = URL(string: "https://opendata.paris.fr/api/explore/v2.1/catalog/datasets/velib-disponibilite-en-temps-reel/records?select=stationcode,name,capacity,numdocksavailable,numbikesavailable,mechanical,ebike,coordonnees_geo") else {
|
||||
completion(nil, NSError(domain: "fr.louisgallet.velibtracker", code: 1, userInfo: nil))
|
||||
return
|
||||
}
|
||||
|
||||
URLSession.shared.dataTask(with: url) { data, response, error in
|
||||
if let error = error {
|
||||
completion(nil, error)
|
||||
return
|
||||
}
|
||||
|
||||
guard let data = data else {
|
||||
completion(nil, NSError(domain: "fr.louisgallet.velibtracker", code: 2, userInfo: nil))
|
||||
return
|
||||
}
|
||||
let decoder = JSONDecoder()
|
||||
do {
|
||||
let velibResponse = try decoder.decode(VelibResponse.self, from: data)
|
||||
let stations = velibResponse.results
|
||||
// Utilisez la liste des stations dans votre application
|
||||
} catch {
|
||||
print("Erreur lors du décodage JSON : \(error)")
|
||||
}
|
||||
print("Fetched + decoded")
|
||||
}.resume()
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user