1日目のゴール
1日目のテーマは
「requests を使って、外部APIからデータを1回取ってくる」 ところまで行くことです。
今日できるようになってほしいのは、この2つです。
外部APIって何をしているのかイメージできるrequests を使って「URLにアクセスして、結果を受け取る」コードを書ける
ここまで行けたら、もう「Webサービスと会話できるPython使い」です。
外部APIってそもそも何者?
ブラウザで見る世界と、プログラムで見る世界
ふだん、ブラウザでこんなことをしています。
天気予報サイトを開く
ニュースサイトを開く
検索サイトでキーワードを打つ
これって全部、「どこかのサーバーにリクエストを送って、結果(レスポンス)を受け取る」動きです。
外部APIは、
「人間ではなく、プログラムが使うための窓口」
だと思ってください。
人間向けのページ:HTMLで見た目が整えられている
プログラム向けのAPI:JSONなどの“データだけ”が返ってくる
PythonからAPIを叩く、というのは、
「ブラウザの代わりに、PythonがURLにアクセスして、データをもらってくる」
という行為です。
requests とは何をしてくれるライブラリか
「HTTPリクエストを簡単に送るための道具」
APIと会話するには、「HTTPリクエスト」を送る必要があります。
本当は、
ヘッダーを付けたり、メソッドを指定したり、
かなり細かいルールがありますが、requests はそれをめちゃくちゃ簡単にしてくれます。
例えば、あるURLに「GETリクエスト」を送りたいとき、requests がない世界だと、かなり面倒なコードになります。
でも、requests がある世界では、こうです。
import requests
response = requests.get("https://example.com")
Pythonこれだけで、
サーバーにアクセスする
レスポンス(結果)を受け取る
ステータスコード(成功かどうか)も一緒に持っている
というところまでやってくれます。
1日目では、
「requests = URLにアクセスして結果を持ってきてくれる便利屋」
くらいの理解でOKです。
事前準備:requests のインストール
pip で一度だけ入れておく
requests は標準ライブラリではないので、
最初に一度だけインストールが必要です。
ターミナル(またはコマンドプロンプト)で、次を実行します。
pip install requests
これが成功すれば、Pythonのコードの中で
import requests
Pythonと書いて使えるようになります。
まずは「普通のWebページ」にアクセスしてみる
APIの前に、シンプルなGETリクエスト
いきなりAPIでもいいのですが、
まずは「requests が何を返してくるか」を体感してみましょう。
import requests
url = "https://example.com"
response = requests.get(url)
print("ステータスコード:", response.status_code)
print("本文の一部:", response.text[:200])
Pythonここで出てくる重要なものを説明します。
response = requests.get(url)
この1行で、「URLにGETリクエストを送って、結果を response に入れる」ことをしています。
response.status_code
これは「HTTPステータスコード」です。
200なら「成功」、404なら「ページが見つからない」、500なら「サーバーエラー」など。
response.text
これは「レスポンスの本文」を文字列として持っています。
普通のWebページなら、HTMLがずらっと入っています。
ここでは、[:200] として最初の200文字だけ表示しています。
全部出すと長すぎるので、ちょっとだけ覗いてみるイメージです。
いよいよ「APIらしいもの」を叩いてみる
JSONを返してくれるテスト用APIを使う
APIの世界では、
JSON(ジェイソン) という形式でデータが返ってくることが多いです。
JSONは、
Pythonでいうところの「辞書とリストの組み合わせ」によく似た形式です。
まずは、テスト用のシンプルなAPIを叩いてみましょう。
(ここでは、よく使われる「JSONを返すテストAPI」を例にします)
import requests
url = "https://jsonplaceholder.typicode.com/todos/1"
response = requests.get(url)
print("ステータスコード:", response.status_code)
print("生のレスポンス(文字列):", response.text)
Python実行すると、こんな感じの文字列が出てきます(例):
{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": false}
これは「JSON形式の文字列」です。
JSONを「Pythonのデータ」として扱う
response.json() が超重要
文字列のままだと扱いづらいので、
Pythonの辞書として扱えるように変換します。
requests には、そのための便利メソッドがあります。
import requests
url = "https://jsonplaceholder.typicode.com/todos/1"
response = requests.get(url)
data = response.json()
print("Pythonの型:", type(data))
print("中身:", data)
print("titleだけ取り出す:", data["title"])
print("completedだけ取り出す:", data["completed"])
Pythonここでの重要ポイントを深掘りします。
response.json() は、
レスポンスの本文をJSONとして解釈し、
Pythonのデータ(だいたいは辞書やリスト)に変換してくれます。
type(data) を見ると、おそらく <class 'dict'> になっているはずです。
つまり、data は辞書なので、data["title"] のようにキーでアクセスできます。
この流れが、APIを使うときの基本パターンです。
URLにGETリクエストを送る
ステータスコードを確認する
JSONとして受け取る
辞書やリストとして中身を取り出す
ステータスコードをちゃんと見る習慣
成功かどうかを確認するのは大人のマナー
APIを叩くとき、
「成功した前提」でコードを書くと、
ちょっとしたエラーで簡単に壊れます。
最低限、status_code を見て「200かどうか」を確認する癖をつけましょう。
import requests
url = "https://jsonplaceholder.typicode.com/todos/1"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
print("タイトル:", data["title"])
else:
print("エラーが発生しました。ステータスコード:", response.status_code)
Pythonここでの本質は、
「外部サービスは、いつも期待通りに動くとは限らない」
という前提に立つことです。
ネットワークが切れているかもしれない
サーバーが落ちているかもしれない
URLを間違えているかもしれない
だからこそ、
「成功したかどうかを確認してから中身を触る」
という流れが大事になります。
クエリパラメータ付きのリクエスト
URLに「?」で条件を付ける
APIでは、
「条件を指定してデータを絞り込む」ことがよくあります。
例えば、https://example.com/api?user_id=1&limit=10
のように、? の後ろに key=value を並べていく形です。
requests では、
これを手書きでURLにくっつける代わりに、params 引数を使って書くことができます。
import requests
url = "https://jsonplaceholder.typicode.com/todos"
params = {"userId": 1}
response = requests.get(url, params=params)
print("実際にアクセスしたURL:", response.url)
if response.status_code == 200:
data = response.json()
print("件数:", len(data))
print("最初の1件:", data[0])
else:
print("エラー:", response.status_code)
Pythonここでのポイントは、
params に辞書を渡すと、?userId=1 のように自動でURLに付けてくれること。
response.url を見ると、
実際にアクセスされた完全なURLが確認できます。
1日目のミニアプリ:シンプルAPIビューア(コンソール版)
仕様
決め打ちのAPIにアクセスする
ステータスコードを表示する
JSONをPythonのデータに変換して、一部だけ表示する
GUIではなく、まずはコンソールで「APIと会話する感覚」を掴みます。
import requests
def fetch_todo(todo_id):
url = f"https://jsonplaceholder.typicode.com/todos/{todo_id}"
response = requests.get(url)
print("アクセスしたURL:", response.url)
print("ステータスコード:", response.status_code)
if response.status_code != 200:
print("取得に失敗しました。")
return
data = response.json()
print("ID:", data["id"])
print("タイトル:", data["title"])
print("完了フラグ:", data["completed"])
def main():
print("APIからTODOを1件取得します。")
todo_id = input("IDを入力してください(例: 1): ").strip()
if not todo_id.isdigit():
print("数字を入力してください。")
return
fetch_todo(int(todo_id))
if __name__ == "__main__":
main()
Pythonここには、1日目で押さえたい要素が全部入っています。
requests.get でAPIにアクセスしているstatus_code を見て成功かどうかを判断しているresponse.json() で辞書に変換している
辞書から必要なキーだけ取り出して表示している
1日目で絶対に押さえてほしい本質
「URLにリクエストを送り、JSONを辞書として扱う」
今日いちばん大事なのは、この流れです。
requests.get("URL") でリクエストを送るresponse.status_code で成功かどうかを見るresponse.json() でPythonのデータに変換する
辞書やリストとして中身を取り出す
これができれば、
もう「外部サービスとPythonで会話できる人」です。
2日目以降は、
エラー時の例外処理(タイムアウトなど)
ヘッダーやAPIキーの扱い
GUI(tkinter)と組み合わせて「ボタンを押したらAPI取得」
といった方向に進んでいきます。
まずは今日のコードを、
URLを変えてみるprint(data) で中身を全部見てみるdata のキーを変えて別の値を表示してみる
など、少しずついじりながら、
「APIのレスポンスを“怖がらずに触る”感覚」を体に入れてみてください。


