#1利用Dummy Api 還原 Instagram part2 抓取Dummy Api

首先在這之前我們必須了解Dummy Api的型態,我們先用Post去測試

我們必須先註冊並獲取自身的app-id (黑色部分是自己的ID要保存好)

好了之後我們還有一個步驟,把剛剛的App-id要加進我們的Https Header裡面,這樣資料才讀得出來

再試試讀取所有使用者的資料:

https://dummyapi.io/data/v1/user

GET

資料型態確定之後我們就可以開始建立Struct了

struct UserListStruct: Codable {var data: [UserListStructData]}struct UserListStructData: Codable {let firstName: Stringlet id: Stringlet lastName: Stringlet picture: Stringlet title: String}

再來寫個讀取函數

url -> https://dummyapi.io/data/v1/user + page=第幾頁&limit=幾筆資料

request.addValue(您的Dummy APPID, forHTTPHeaderField: "app-id")

最後completion(.success(result))回傳到需要用到的頁面

static func catchUserList(completion: @escaping (Result<UserListStruct, Error>) -> Void) {let url = URL(string: APIURL.userURL + "?page=3&limit=20")var request = URLRequest(url: url!)request.addValue(APIURL.appID, forHTTPHeaderField: "app-id")let task = URLSession.shared.dataTask(with: request) { data, _, error inguard error == nil,let data = data else {return}do {let printJSON = try JSONSerialization.jsonObject(with: data, options: .fragmentsAllowed)//                print(printJSON)let result = try JSONDecoder().decode(UserListStruct.self, from: data)completion(.success(result))}catch {completion(.failure(CatchAPIError.catchUserListError))}}task.resume()}

以下是我寫的所有APIURL包含(POST,GET,PUT,Delete)可供大家參考

struct APIURL {static let appID = “628ce7cfaf6b1dc788b88d0c”static let postsURL = “https://dummyapi.io/data/v1/post"static let userURL = “https://dummyapi.io/data/v1/user"static let createURL = “https://dummyapi.io/data/v1/user/create"static let createComment = “https://dummyapi.io/data/v1/comment/create"static let createPost = “https://dummyapi.io/data/v1/post/create"}

最後print看看回傳的值是否正確:

POST DELETE PUT

request.httpMethod = “POST” // 上傳
request.httpMethod = “DELETE” // 刪除
request.httpMethod = “PUT” // 修改

譬如說我要Po文

可以先看文檔的寫入資料型態

必須要有文章內容及使用者的ID傳入後會自動幫我們生成文章

text -> 文章內容

image -> 文章照片(必須是照片連結,結尾會說明如何上傳照片並轉為連結)

likes -> 文章按讚的數量

tags -> 標籤

owner -> Po文的使用者ID

然後先創立上傳的Struct

struct CreateUserPostStruct: Codable {let text: Stringlet image: Stringlet likes: Intlet tags: [String]let owner: String}

再傳入要上傳的資料

let user = CreateUserPostStruct(text: text, image: image, likes: 0, tags: tags, owner: selfUserID)

之後會回傳最後總和的結果

let content = String(data: data, encoding: .utf8)

程式

static func createUserPost(text: String, image: String, tags: [String], completion: @escaping (Result<Bool, Error>) -> Void) {guard let selfUserID = UserDefaults.standard.string(forKey: "userID") else {return}let url = URL(string: APIURL.createPost)var request = URLRequest(url: url!)request.httpMethod = "POST"request.addValue(APIURL.appID, forHTTPHeaderField: "app-id")request.setValue("application/json", forHTTPHeaderField: "Content-Type")let encoder = JSONEncoder()let user = CreateUserPostStruct(text: text, image: image, likes: 0, tags: tags, owner: selfUserID)let data = try? encoder.encode(user)request.httpBody = dataURLSession.shared.dataTask(with: request) { data, response, error inif let data = data, let content = String(data: data, encoding: .utf8) {if content.contains("error") {completion(.failure(PostAPIError.createUserPostError))} else {completion(.success(true))}}}.resume()}

最後就上傳完成了,提醒一點修改資料有些是不能修改的例如:所有使用者email,和預設的使用者資料,利用Imgur將照片上傳到網路並且轉為URL後寫入Dummy,下一篇會說明~~

如果還是不了解的可以參考阿潘教學:

參考資料:

上一篇文章:

下一篇文章:

--

--