LEVEL 9 ・ API / Lesson 24
APIにお願いして、データを受け取る
URLにお願いを出して、JSONの返事を受け取ります。練習用のAPIで、本物の通信を体験します。
このレッスンが終わったら
「APIは受付窓口。URLにお願いを出して、JSONの返事を受け取る。APIキーは人に見せない」と言える。
できることを見る
APIとは、システム同士が情報をやり取りするための、受付窓口です。
レストランにたとえてみましょう。あなた(お客さん)は、料理を自分で作りません。窓口(店員さん)に、注文を伝えると、料理(結果)が届きます。キッチンの中の仕組みは、知らなくても大丈夫です。
- 自分のPython「為替レートを教えて」
- API受付窓口
- 外部のシステムデータを持っている
- 返事(JSON)データが届く
自分のパソコンで、実際のAPIを使うときは、requests という道具を使います。(このページでは動かせないので、見るだけです)
import requests
response = requests.get("https://api.example.com/rates")
data = response.json()
print(data["rates"]["JPY"])動かしてみる
このページでは、requests の代わりに、ブラウザ用の仕組み(open_url)を使います。この講座のサイトの中に、練習用のAPIを用意しました。為替レートを返してくれます。(※実際のレートではない、練習用のデータです)
▶ 実行を押すと、ここに結果が出ます
本物の通信(HTTP)で、データが届きました。2025-10-01 のドル円レート: 150.2 と表示されたはずです。
1行ずつ読む
from pyodide.http import open_url(このページ用の)通信の道具を使うresponse = open_url("/api-sample/rates.json")このURL(住所)に、お願いを出して、返事を「response」として受け取るdata = json.load(response)返事のJSONを、Pythonの辞書に変換するprint(data["date"], "のドル円レート:", data["rates"]["JPY"])日付と、円のレートを取り出して、表示する日本語にすると
APIの使い方は、いつも次の3ステップです。
- URLにお願いを出す。(どの窓口の、どの情報か)
- 返事(JSON)を受け取る。
- 辞書として、必要な所を取り出す。(Lesson「JSON」と同じです)
1か所だけ変える
① 別のAPIを使う。 URLを変えると、別のデータが届きます。社員の一覧を返す、練習用APIも用意しました。
▶ 実行を押すと、ここに結果が出ます
② 取得したデータで、計算する。 為替レートを使って、1000ドルを円に換算します。
▶ 実行を押すと、ここに結果が出ます
APIから届く値は、Lesson 07 の変数と同じように、計算にも使えます。
③ URLを間違えると? 存在しないURLに、お願いを出してみます。
▶ 実行を押すと、ここに結果が出ます
JSONDecodeError: Expecting value と出ます。「返事が、JSONではありませんでした」という意味です。URLが違うと、「そのページはありません」という別の返事(JSONではない文章)が返ってくるため、変換に失敗するのです。URLの綴りを見直すのが、まず試すことです。
自分で書く
お題① 為替レートのAPIから、ユーロ(EUR)のレートを表示してください。
▶ 実行を押すと、ここに結果が出ます
ヒントを見る
円のレートは data["rates"]["JPY"] でした。同じ形で、"EUR" を取り出します。
答えの例を見る
import json
from pyodide.http import open_url
data = json.load(open_url("/api-sample/rates.json"))
print(data["rates"]["EUR"])お題② 社員の一覧のAPIから、全員の名前だけを、1行ずつ表示してください。
▶ 実行を押すと、ここに結果が出ます
ヒントを見る
for e in data["employees"]: のあと、print(e["name"]) と書きます。
答えの例を見る
import json
from pyodide.http import open_url
data = json.load(open_url("/api-sample/employees.json"))
for e in data["employees"]:
print(e["name"])