APIっていうのがあるやん。なんなんあれ。どうやって使えばいいんや。
①フェッチというやり方でリクエスト?をAPIに送る
②リクエストに応じてレスポンスが返ってくる
③レスポンスの内容をなんか解析する
④解析できたものから情報を取り出す
⑤取り出した情報をHTMLに埋め込む
っていう動作をすれば
どこに画像のurlがあるのか、とか気にせずに情報を取ってくることができるらしいわ!
試しにDog APIを用いて練習してみようやないか。
次のコードでは毎回違う犬の画像がランダムで表示されるんや。
<!DOCTYPE html>
<html lang='ja'>
<head>
<meta charset="utf-8">
<title>dog</title>
</head>
<body>
<h1>ランダムに犬の画像が表示されます</h1>
<div id="randomDog"></div>
<script src="script.js"></script>
</body>
</html>
async function displayRandomDog(){
const url = "https://dog.ceo/api/breeds/image/random";
const response = await fetch(url)
data = await response.json();
const object = document.getElementById("randomDog");
object.innerHTML = `<img src="${data.message}">`;
}
displayRandomDog();
JavaScriptについて
async function displayRandomDog(){}
ここで displayRandomDog
いう関数を自分で定義しとるんや。自分で定義するんやから名前は何でもええで。
この関数は async
っていう非同期処理を使うためのキーワードが付いとるから、関数の中で await
が使えるんや。
非同期処理っちゅうのは、何か時間がかかる処理が終わるのを待つんやけど、待ってる間も他の作業ができるっちゅう便利な機能やな。
const url = "https://dog.ceo/api/breeds/image/random";
url
っちゅう変数に、犬のランダムな画像を返してくれるAPIのURLを入れとるんや。このURLにアクセスすると、ランダムな犬の画像がもらえるんや。
const response = await fetch(url)
fetch
っていう関数を使うて、さっきの url
にリクエストを送っとるんや。このとき await
を使うて、リクエストの結果が返ってくるまで待つっちゅうことや。これで response
には、リクエストの結果が入るんやで。
data = await response.json();
response
に入ってる結果をJSON形式で解析して、data
っちゅう変数に入れとるんや。この data
の中には、APIから返ってきたデータが入っとるんや。
const object = document.getElementById("randomDog");
object
っていう変数に、HTMLの中にある id
が "randomDog"
の要素を取ってきとるんや。この要素に犬の画像を表示させるんやで。
object.innerHTML = `<img src="${data.message}">`;
ここで、さっき取得した data.message
に入っとる犬の画像のURLを使うて、<img>
タグを作成し、その中に画像を表示させとるんや。innerHTML
を使うて、要素の中身を直接書き換えとるんやで。
`で囲った中には変数を${}で囲むようにして入れ込むことができるんや。
dataっていう変数の中のデータはJSONやから次のようになっとる。一例やで。messageのurlはランダムに与えられるんや。
{
"message": "https://images.dog.ceo/breeds/hound-walker/n02089867_3044.jpg",
"status": "success"
}
jsonの変数の中のデータにアクセスるにはドットを使えばできる。
例えば上のデータやったら
data.message
には"https://images.dog.ceo/breeds/hound-walker/n02089867_3044.jpg"
data.status
には"success"
が入ってるんや。
displayRandomDog();
最後に、関数 displayRandomDog
を呼び出して実行しとるんや。この一行で、犬の画像がランダムに表示されるっちゅうわけやな。
こんな感じやで!このコードを使うたら、可愛いやろ?