#41 Swift JSON decode 練習(3/14題)

抓取網路提供的 JSON API,解碼取得資料。(#hw14–2)

操作畫面:

螢幕截圖:

  1. 搭配 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

iTunes Search API 文件

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

--

--