透過 RapidAPI 串接網路上五花八門的 API

RapidAPI 收集了網路上各式各樣的 API,透過它我們可以方便地串接 API 開發各種有趣的功能。接下來彼得潘將以抓取日本任天堂最新的 IG po 文為例,示範如何串接 RapidAPI。

連到 RapidAPI 網站

點選右上方的 Sign Up 註冊帳號

連到 RapidAPI Hub 找尋自己感興趣的 API

查詢 IG 資訊的 instagram API

彼得潘決定試試 instagram API,查詢任天堂官方 IG 帳號的最新 po 文。

串接 RapidAPI 需要花錢嗎 ?

RapidAPI 好心讓我們串接各式各樣的 API,其實也是有目的的。它的目的很簡單,就是賺錢。RapidAPI 提供以下三種 API,有些是免費的,有些需要付費。

待會我們準備串接的 instagram API 屬於 FREEMIUM API,因此我們可以先免費使用,超過一定額度才需付錢。

訂閱(subscribe) API

instagram API 是 FREEMIUM API,我們必須訂閱才能使用。請點選下圖的 Subscribe to Test。

請依據個人財力選擇訂閱方案,彼得潘想將錢拿來跟女朋友吃飯,因此選擇免費的 Basic 方案,有很多錢錢的朋友可以考慮選擇超厲害的 Mega 方案。

訂閱成功,點選 API Documentation 回到 API 的說明頁面。

選擇 API

在此我們選擇 User Posts,取得使用者的最新 po 文。

測試 API

輸入 API 的相關資訊,然後點選右上的 Test Endpoint 測試 API。下圖的欄位已經預設填好,我們不需做任何修改。

在 Required Parameters 下輸入 count 等於 50,userid 等於 4159535681,查詢 nintendo_jp 的最新 IG po 文。

ps: nintendo_jp 的 userid 是 4159535681,可透過 instagram API 或是以下網址找到。

https://www.instagram.com/web/search/topsearch/?query=nintendo_jp

成功抓到資料時,IG po 文的 JSON 資料美麗地出現在網站上。

將 API 的範例說明改成 Shell > cURL

透過查看 curl 指令,我們將能更清楚了解如何寫程式串接 API。

點選 Shell > cURL。

抓取日本任天堂 IG po 文的 curl 指令。

使用 URLSession 串接 API

分成 async/await & completion handler 兩種寫法。以下 X-RapidAPI-Key 是假的,請換成自己的 API key。

  • 使用 async/await
import Foundation

func fetch() async throws {
if let urlString = "https://instagram188.p.rapidapi.com/userpost/4159535681/50/{end_cursor}".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed),
let url = URL(string: urlString) {
var request = URLRequest(url: url)
request.setValue("instagram188.p.rapidapi.com", forHTTPHeaderField: "X-RapidAPI-Host")
request.setValue("123456", forHTTPHeaderField: "X-RapidAPI-Key")
let (data, _) = try await URLSession.shared.data(for: request)
if let content = String(data: data, encoding: .utf8) {
print(content)
}
}
}

Task {
do {
try await fetch()
} catch {
print(error)
}
}
  • 使用 completion handler
import Foundation

func fetch() {
if let urlString = "https://instagram188.p.rapidapi.com/userpost/4159535681/50/{end_cursor}".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed),
let url = URL(string: urlString) {
var request = URLRequest(url: url)
request.setValue("instagram188.p.rapidapi.com", forHTTPHeaderField: "X-RapidAPI-Host")
request.setValue("123456", forHTTPHeaderField: "X-RapidAPI-Key")
URLSession.shared.dataTask(with: request) { data, response, error in
if let data,
let content = String(data: data, encoding: .utf8) {
print(content)
}
}.resume()
}
}

fetch()

透過以上程式我們將可成功抓取 IG po 文的 JSON,比方以下網址是某則 IG po 文的照片,可以看到可愛的斯普拉遁遊戲圖片。

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS App 開發問題解答集

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com