0
0

Dog APIでAPIの呼び出し練習をする

Posted at

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 を呼び出して実行しとるんや。この一行で、犬の画像がランダムに表示されるっちゅうわけやな。

こんな感じやで!このコードを使うたら、可愛いやろ?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0