今天我們將從簡單的API著手,試著與機器人融合

貓咪

這個API會隨機給你一張貓的圖片

設定請求

先使用上次的API測試文件,接著將URL設為
https://api.thecatapi.com/v1/images/search

把requests.get()的params參數刪除,像這樣
因為這個API非常簡單,不需要指定任何參數

1
response = requests.get(url=url).json() #params刪掉

解析回應

接著發出請求一次,你應該會看到類似的回應:

1
2
3
4
5
6
7
8
[
{
"id": "b1j",
"url": "https://cdn2.thecatapi.com/images/b1j.jpg",
"width": 2000,
"height": 3008
}
]
  • id: 圖片的id
  • url: 圖片的url,你可以開啟看看
  • width和height: 圖片的寬和高

由於可以請求很多張,所以他的回應格式是一個清單,看最外層的中括號就可以知道了
還記得我們上次嘗試送出圖片嗎?

最後一小節的內容是:只要把圖片的url送出,就可以輕鬆送出圖片
今天我們就要利用這個方式來製作一個隨機貓咪圖片的指令

放到機器人裡面

先新增一個指令,可以叫randomcat或是你自己喜歡的,不需要參數
然後記得在最上方引入requests模組

接著在函數內定義url變數和請求,不知道怎麼打可以照搬下面的

1
2
3
4
5
6
@bot.tree.command()
async def cat(interaction:discord.Interaction):
await interaction.response.defer()

url = "https://api.thecatapi.com/v1/images/search"
response = requests.get(url=url).json()

此處我們可以知取得這個回應裡面,清單的第一項(也是唯一一項)
接著我們取裡面的url並且發出去

1
2
image_url = response[0]["url"]
await interaction.followup.send(image_url)

這樣使用指令時,我們會從API取得隨機一張貓咪圖片的URL並發回給使用者
超簡單吧

完整程式

1
2
3
4
5
6
7
8
@bot.tree.command()
async def cat(interaction:discord.Interaction):
await interaction.response.defer()

url = "https://api.thecatapi.com/v1/images/search"
response = requests.get(url=url).json()
image_url = response[0]["url"]
await interaction.followup.send(image_url)

小測驗

https://dog.ceo/api/breeds/image/random

這是一個隨機狗狗圖片的API
請試著做出發送隨機狗圖片的指令吧!

請記得之前教過的,每一家的回應格式不同,記得先看看回應長什麼樣子再拆解,直接沿用剛剛的cat是行不通的