Python | 1 日 120 分 × 7 日アプリ学習:API取得アプリ(requests使用)(中級編)

Web APP Python
スポンサーリンク

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のレスポンスを“怖がらずに触る”感覚」を体に入れてみてください。

タイトルとURLをコピーしました