From 7f9ae47133e640e7cf4cdd844eaab2567b5f86c2 Mon Sep 17 00:00:00 2001 From: Bilaal Rashid <42493384+bilaalrashid@users.noreply.github.com> Date: Sun, 28 Jul 2024 21:28:55 +0100 Subject: [PATCH 1/2] Fix settings the language and release track in constructor --- Sources/BbcNews/BbcNews.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Sources/BbcNews/BbcNews.swift b/Sources/BbcNews/BbcNews.swift index e98b4e0..f13b58b 100644 --- a/Sources/BbcNews/BbcNews.swift +++ b/Sources/BbcNews/BbcNews.swift @@ -121,7 +121,9 @@ public struct BbcNews { self.init( modelIdentifier: UIDevice.current.modelIdentifier, systemName: UIDevice.current.systemName, - systemVersion: UIDevice.current.systemVersion + systemVersion: UIDevice.current.systemVersion, + language: language, + release: release ) } #endif From 1e6a2b1060574c53b376d00f564b4616906b5fb4 Mon Sep 17 00:00:00 2001 From: Bilaal Rashid <42493384+bilaalrashid@users.noreply.github.com> Date: Sun, 28 Jul 2024 21:35:38 +0100 Subject: [PATCH 2/2] Rename language to service --- Sources/BbcNews/BbcNews.swift | 38 +++++++++---------- .../Request/{Language.swift => Service.swift} | 24 ++++++------ 2 files changed, 31 insertions(+), 31 deletions(-) rename Sources/BbcNews/Models/Request/{Language.swift => Service.swift} (73%) diff --git a/Sources/BbcNews/BbcNews.swift b/Sources/BbcNews/BbcNews.swift index f13b58b..ff77367 100644 --- a/Sources/BbcNews/BbcNews.swift +++ b/Sources/BbcNews/BbcNews.swift @@ -50,24 +50,24 @@ public struct BbcNews { /// Converts a BBC News webpage URL to a native API URL that returns a JSON representation, if one exists. /// /// - Parameters: - /// - urlString: The language that results should be localised for. - /// - language: The language that results should be localised for. + /// - urlString: The URL to convert. + /// - service: The international service that API results should be localised for e.g. BBC Cymru. /// - release: The release track of the API version. /// - Returns: The native API URL, if successful. - public static func convertWebUrlToApi(urlString: String, language: Language = .english, release: ReleaseTrack? = nil) -> String? { + public static func convertWebUrlToApi(urlString: String, service: Service = .english, release: ReleaseTrack? = nil) -> String? { guard let url = URL(string: urlString) else { return nil } - let result = BbcNews.convertWebUrlToApi(url: url, language: language, release: release) + let result = BbcNews.convertWebUrlToApi(url: url, service: service, release: release) return result?.absoluteString } /// Converts a BBC News webpage URL to a native API URL that returns a JSON representation, if one exists. /// /// - Parameters: - /// - urlString: The language that results should be localised for. - /// - language: The language that results should be localised for. + /// - url: The URL to convert. + /// - service: The international service that API results should be localised for e.g. BBC Cymru. /// - release: The release track of the API version. /// - Returns: The native API URL, if successful. - public static func convertWebUrlToApi(url: URL, language: Language = .english, release: ReleaseTrack? = nil) -> URL? { + public static func convertWebUrlToApi(url: URL, service: Service = .english, release: ReleaseTrack? = nil) -> URL? { let regex = #/https?:\/\/(www\.)?bbc\.co(m|\.uk)\/news\/(\w|\-|\/)+(\.app)?$/# // swiftlint:disable:next unused_optional_binding @@ -80,7 +80,7 @@ public struct BbcNews { components.host = "news-app.api.bbc.co.uk" components.path = "/fd/app-article-api" components.queryItems = [ - URLQueryItem(name: "clientName", value: language.clientName), + URLQueryItem(name: "clientName", value: service.clientName), URLQueryItem(name: "clientVersion", value: self.clientVersion), URLQueryItem(name: "page", value: url.absoluteString) ] @@ -97,8 +97,8 @@ public struct BbcNews { /// The session to perform network requests from. private let session: URLSession - /// The language that API results should be localised for. - private let language: Language + /// service: The international service that API results should be localised for e.g. BBC Cymru. + private let service: Service /// The release track of the API version. private let releaseTrack: ReleaseTrack? @@ -115,14 +115,14 @@ public struct BbcNews { /// - modelIdentifier: The model identifier of the device e.g. iPhone15,2, /// - systemName: The name of the operating system e.g. iOS. /// - systemVersion: The version of the operating system e.g. 16.6. - /// - language: The language that results should be localised for. + /// - service: The international service that API results should be localised for e.g. BBC Cymru. /// - release: The release track of the API version. - public init(language: Language = .english, release: ReleaseTrack? = nil) { + public init(service: Service = .english, release: ReleaseTrack? = nil) { self.init( modelIdentifier: UIDevice.current.modelIdentifier, systemName: UIDevice.current.systemName, systemVersion: UIDevice.current.systemVersion, - language: language, + service: service, release: release ) } @@ -136,13 +136,13 @@ public struct BbcNews { /// - modelIdentifier: The model identifier of the device e.g. iPhone15,2, /// - systemName: The name of the operating system e.g. iOS. /// - systemVersion: The version of the operating system e.g. 16.6. - /// - language: The language that results should be localised for. + /// - service: The international service that API results should be localised for e.g. BBC Cymru. /// - release: The release track of the API version. public init( modelIdentifier: String, systemName: String, systemVersion: String, - language: Language = .english, + service: Service = .english, release: ReleaseTrack? = nil ) { let configuration = URLSessionConfiguration.default @@ -153,7 +153,7 @@ public struct BbcNews { ] self.session = URLSession(configuration: configuration) - self.language = language + self.service = service self.releaseTrack = nil } @@ -175,10 +175,10 @@ public struct BbcNews { components.host = BbcNews.hostname components.path = "/fd/abl" components.queryItems = [ - URLQueryItem(name: "clientName", value: self.language.clientName), + URLQueryItem(name: "clientName", value: self.service.clientName), URLQueryItem(name: "clientVersion", value: BbcNews.clientVersion), URLQueryItem(name: "page", value: "chrysalis_discovery"), - URLQueryItem(name: "service", value: self.language.service), + URLQueryItem(name: "service", value: self.service.service), URLQueryItem(name: "type", value: "index") ] @@ -244,7 +244,7 @@ public struct BbcNews { components.host = BbcNews.hostname components.path = "/fd/abl" components.queryItems = [ - URLQueryItem(name: "clientName", value: self.language.clientName), + URLQueryItem(name: "clientName", value: self.service.clientName), URLQueryItem(name: "clientVersion", value: BbcNews.clientVersion), URLQueryItem(name: "page", value: topicId), URLQueryItem(name: "type", value: "topic") diff --git a/Sources/BbcNews/Models/Request/Language.swift b/Sources/BbcNews/Models/Request/Service.swift similarity index 73% rename from Sources/BbcNews/Models/Request/Language.swift rename to Sources/BbcNews/Models/Request/Service.swift index 4e25df6..3f4105c 100644 --- a/Sources/BbcNews/Models/Request/Language.swift +++ b/Sources/BbcNews/Models/Request/Service.swift @@ -1,5 +1,5 @@ // -// Language.swift +// Service.swift // BbcNews // // Created by Bilaal Rashid on 04/06/2024. @@ -7,27 +7,27 @@ import Foundation -/// A language supported by the API. -public enum Language: String, Codable, Equatable, Hashable, CaseIterable { - /// The Arabic language. +/// An international service that API results should be localised for e.g. BBC Cymru. +public enum Service: String, Codable, Equatable, Hashable, CaseIterable { + /// The Arabic language service. case arabic - /// The Cymru language. + /// The Cymru language service. case cymru - /// The English language. + /// The English language service. case english - /// The Hindi language. + /// The Hindi language service. case hindi - /// The Mundo language. + /// The Mundo language service. case mundo - /// The Russian language. + /// The Russian language service. case russian - /// The user facing name of the language. + /// The user facing name of the service. public var displayName: String { switch self { case .arabic: @@ -45,7 +45,7 @@ public enum Language: String, Codable, Equatable, Hashable, CaseIterable { } } - /// The value of the `clientName` URL parameter to use when calling the API for this language. + /// The value of the `clientName` URL parameter to use when calling the API for this service. public var clientName: String { switch self { case .arabic: @@ -63,7 +63,7 @@ public enum Language: String, Codable, Equatable, Hashable, CaseIterable { } } - /// The value of the `service` URL parameter to use when calling the API for this language. + /// The value of the `service` URL parameter to use when calling the API for this service. public var service: String { switch self { case .arabic: