#41 Swift JSON decode 練習(3/14題)
Published in
4 min readDec 20, 2023
抓取網路提供的 JSON API,解碼取得資料。(#hw14–2)
操作畫面:
螢幕截圖:
- 搭配 AI 建立自己感興趣的 JSON API
2. iTunes
3. apple marketing tools RSS generator
//待實驗
4. Random User Generator
5. GitHub
6. Joke
7. REST Countries
8. Open Trivia(是非題/選擇題)
9. IG
10. Xcode Releases
11. JSONPlaceholder
12.UI Faces
13. 請 AI 提供 API 網址
14. 第三方 API 整理
1. 搭配 AI 建立自己感興趣的 JSON API
https://raw.githubusercontent.com/JasonHungApp/JSON_API/main/TaiwanSnackPreparation.json
struct TaiwaneseSnack: Codable {
let name: String
let type: String
let ingredients: [Ingredient]
let instructions: [String]
let details: Details
}
struct Ingredient: Codable {
let name: String
let quantity: String
}
struct Details: Codable {
let description: String
let origin: String
let popular_places: [String]
}
解碼的 decoder。
let jsonURL = URL(string: "https://raw.githubusercontent.com/JasonHungApp/JSON_API/main/TaiwanSnackPreparation.json")! // Replace with the actual URL or local file URL
// Define a function to fetch and decode JSON
func fetchJSONData(completion: @escaping ([TaiwaneseSnack]?) -> Void) {
URLSession.shared.dataTask(with: jsonURL) { data, response, error in
guard let data = data, error == nil else {
print("Error fetching JSON:", error?.localizedDescription ?? "Unknown error")
completion(nil)
return
}
do {
let snacks = try JSONDecoder().decode([TaiwaneseSnack].self, from: data)
completion(snacks)
} catch {
print("Error decoding JSON:", error.localizedDescription)
completion(nil)
}
}.resume()
}
func testMyAPIinGithub(){
// Call the function to fetch JSON data
fetchJSONData { snacks in
if let snacks = snacks {
// Handle the decoded JSON data
for snack in snacks {
print("Name: \(snack.name)")
print("Type: \(snack.type)")
print("Ingredients:")
for ingredient in snack.ingredients {
print("- \(ingredient.name): \(ingredient.quantity)")
}
print("Instructions:")
for instruction in snack.instructions {
print("- \(instruction)")
}
print("Details:")
print("- Description: \(snack.details.description)")
print("- Origin: \(snack.details.origin)")
print("- Popular Places: \(snack.details.popular_places)")
print("\n")
}
}
}
}
testJsonAPIinGithub()
2. iTunes
https://itunes.apple.com/search?term=劉若英&media=music&country=tw
struct MusicData: Codable {
let resultCount: Int
let results: [MusicResult]
}
struct MusicResult: Codable {
let artistName: String //歌手名稱
let collectionName: String //專輯名稱
let trackName: String //歌曲名稱
let artworkUrl100 : String //專輯照片
let previewUrl: String //試聽
// 其他屬性...
}
func testiTunesAPI(){
// API 網址
let apiUrl = "https://itunes.apple.com/search?term=%E5%8A%89%E8%8B%A5%E8%8B%B1&media=music&country=tw"
guard let url = URL(string: apiUrl) else {
print("無效的 URL")
return
}
URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
print("發生錯誤:", error)
return
}
guard let data = data else {
print("未收到資料")
return
}
do {
let musicData = try JSONDecoder().decode(MusicData.self, from: data)
for result in musicData.results{
// 在這裡你可以使用從 API 取得的數據
print("歌手名稱:『\(result.artistName)』")
print("專輯名稱:『\(result.collectionName)』")
print("歌曲名稱:『\(result.trackName)』")
print("照片URL:『\(result.artworkUrl100)』")
print("試聽URL:『\(result.previewUrl)』")
print("")
}
} catch {
print("解碼 JSON 時發生錯誤:", error)
}
}.resume()
}
3. apple marketing tools RSS generator
可以查詢各地的熱門播放排行 https://rss.applemarketingtools.com/
API: https://rss.applemarketingtools.com/api/v2/tw/music/most-played/10/playlists.json