リンドくん先生、Pythonで外部のAPIからデータを取得したいんですけど、何か良い方法はありますか?
たなべそれならrequestsライブラリが最適だよ!
Pythonで最も人気のあるHTTP通信ライブラリで、シンプルで直感的に使えるんだ。初心者でも簡単に習得できるから安心して。
現代のプログラミングにおいて、外部のWebサービスやAPIとの通信は欠かせない技術です。
天気予報の取得、SNSへの投稿、データベースとの連携など、様々な場面でHTTP通信が必要になります。
Pythonには標準ライブラリとしてurllibがありますが、実際の開発現場ではrequestsライブラリがほぼ標準として使われています。
その理由は、シンプルで直感的なAPIと豊富な機能にあります。
この記事では、Pythonを学び始めたばかりの方でも理解できるよう、requestsライブラリの基本から実践的な使い方まで、ステップバイステップで解説していきます。
requestsライブラリとは?HTTP通信の基本を理解しよう
リンドくんそもそもHTTP通信って何ですか?難しそうな感じがするんですが...
たなべHTTP通信は、インターネット上でデータをやり取りするためのルールなんだ。
例えば、君がブラウザでWebサイトを見るときも、実はHTTP通信が使われているんだよ。
requestsライブラリの特徴
requestsライブラリは、PythonでHTTP通信を行うためのサードパーティライブラリです。
標準ライブラリのurllibよりもはるかに使いやすく、以下のような特徴があります。
- 直感的なAPI設計 → 人間が読みやすいコードで記述できます
- 豊富な機能 → 認証、セッション管理、ファイルアップロードなど様々な機能を内蔵
- 優れたドキュメント → 公式ドキュメントが充実しており、学習しやすい
- 幅広い採用実績 → 多くの企業やプロジェクトで使用されている実績
HTTP通信の基本概念
HTTP通信を理解するために、まず基本的な概念を押さえておきましょう。
HTTPメソッドは、サーバーに対してどのような操作を行いたいかを示すものです。主なメソッドには以下があります。
- GET → データの取得(Webページの表示、API情報の取得など)
- POST → データの送信(フォームの送信、新規データの作成など)
- PUT → データの更新(既存データの全体更新)
- DELETE → データの削除
これらのメソッドを使い分けることで、様々な操作を実現できます。
なぜrequestsライブラリが人気なのか
実際のコード例を見れば、requestsライブラリの使いやすさが一目瞭然です。
# 標準ライブラリ(urllib)の場合
import urllib.request
import urllib.parse
response = urllib.request.urlopen('https://api.example.com/data')
data = response.read()
# requestsライブラリの場合
import requests
response = requests.get('https://api.example.com/data')
data = response.json()このように、requestsライブラリを使うことでより少ないコードで同じ機能を実現できます。
また、エラーハンドリングやレスポンス処理も直感的に行えるため、開発効率が大幅に向上します。
requestsライブラリのインストールと基本的な使い方
リンドくんrequestsライブラリを使ってみたいです!どうやってインストールするんですか?
たなべとても簡単だよ!pipコマンドを使って一発でインストールできるんだ。
まずはインストールから始めて、基本的な使い方を見ていこう。
インストール方法
requestsライブラリのインストールは非常に簡単です。
ターミナル(コマンドプロンプト)で以下のコマンドを実行するだけです。
pip install requests
# uvの場合はuv add requestsPython環境によっては、以下のコマンドを使用する場合もあります。
pip3 install requests
python -m pip install requestsインストールが完了したら、Pythonスクリプト内で以下のようにインポートできます。
import requests最初のGETリクエスト
まずは最も基本的なGETリクエストから始めましょう。以下は、JSONPlaceholderという無料のテスト用APIからデータを取得する例です。
import requests
# GETリクエストを送信
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
# ステータスコードを確認
print(f"ステータスコード: {response.status_code}")
# レスポンス内容を表示
print(f"レスポンス内容: {response.text}")
# JSONとして解析
data = response.json()
print(f"タイトル: {data['title']}")このコードを実行すると、以下のような出力が得られます。
ステータスコード: 200
レスポンス内容: {"userId":1,"id":1,"title":"sunt aut facere...","body":"quia et suscipit..."}
タイトル: sunt aut facere repellat provident occaecati excepturi optio reprehenderit
レスポンスオブジェクトの基本的な属性
requestsライブラリでリクエストを送信すると、Responseオブジェクトが返されます。
このオブジェクトには、レスポンスに関する様々な情報が含まれています。
import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
# よく使用される属性
print(f"ステータスコード: {response.status_code}")
print(f"ヘッダー: {response.headers}")
print(f"レスポンス時間: {response.elapsed}")
print(f"エンコーディング: {response.encoding}")
# リクエストが成功したかを確認
if response.ok: # status_code が 200-399 の範囲
print("リクエスト成功!")
data = response.json()
print(data)
else:
print("リクエスト失敗...")このように、Responseオブジェクトには豊富な情報が含まれており、リクエストの結果を詳細に把握できます。
GET・POSTリクエストの実装方法と実践例
リンドくんGETは分かりました!でもPOSTリクエストってどう使うんですか?データを送信するときに使うんですよね?
たなべその通り!POSTはデータをサーバーに送信するときに使うんだ。
フォームの送信やAPIへのデータ投稿など、実際の開発でよく使う機能だよ。具体例を見てみよう。
パラメータ付きGETリクエスト
まず、URLパラメータを含むGETリクエストの方法を見てみましょう。
import requests
# URLパラメータを辞書で指定
params = {
'userId': 1,
'completed': False
}
response = requests.get('https://jsonplaceholder.typicode.com/todos', params=params)
print(f"リクエストURL: {response.url}")
print(f"取得したTODO数: {len(response.json())}")
# 結果を表示
todos = response.json()
for todo in todos:
print(f"- {todo['title']}")この例では、特定のユーザーの未完了タスクを取得しています。paramsパラメータを使用することで、URLクエリパラメータを簡潔に指定できます。
基本的なPOSTリクエスト
次に、POSTリクエストでデータを送信する方法を見てみましょう。
import requests
# 送信するデータ
new_post = {
'title': 'Pythonでのリクエスト送信',
'body': 'requestsライブラリを使って新しい投稿を作成しました',
'userId': 1
}
# POSTリクエストを送信
response = requests.post('https://jsonplaceholder.typicode.com/posts', json=new_post)
print(f"ステータスコード: {response.status_code}")
print(f"作成された投稿: {response.json()}")フォームデータの送信
Webフォームのようなデータを送信する場合は、以下のようにdataパラメータを使用します。
import requests
# フォームデータ
form_data = {
'username': 'python_user',
'email': 'user@example.com',
'message': 'requestsライブラリのテストです'
}
# Content-Type: application/x-www-form-urlencoded として送信
response = requests.post('https://httpbin.org/post', data=form_data)
print(f"送信結果: {response.json()}")ヘッダーの指定
API通信では、認証情報やコンテンツタイプなどの情報をヘッダーで送信することがよくあります。
import requests
# カスタムヘッダーを設定
headers = {
'User-Agent': 'My Python App 1.0',
'Authorization': 'Bearer your-api-token-here',
'Content-Type': 'application/json'
}
data = {
'name': 'Python学習者',
'skill_level': '初級'
}
response = requests.post('https://httpbin.org/post', json=data, headers=headers)
# 送信したヘッダーを確認
sent_headers = response.json()['headers']
print(f"送信されたヘッダー: {sent_headers}")このように、requestsライブラリを使用することで、様々なタイプのHTTPリクエストを簡単に実装できます。
エラーハンドリングと例外処理で堅牢なコードを作る
リンドくんネットワークエラーとかで通信が失敗したらどうなるんですか?プログラムが止まっちゃうんでしょうか?
たなべいい視点だね!実際の開発ではエラーハンドリングが超重要なんだ。
通信エラーやサーバーエラーに適切に対処することで、安定したアプリケーションが作れるよ。
基本的な例外処理
requestsライブラリでは、様々な種類の例外が発生する可能性があります。適切にハンドリングすることで、ユーザーにとって使いやすいアプリケーションを作ることができます。
import requests
from requests.exceptions import RequestException, Timeout, ConnectionError
def safe_api_request(url):
try:
# タイムアウトを3秒に設定
response = requests.get(url, timeout=3)
# HTTPエラーをチェック(4xx, 5xxエラー)
response.raise_for_status()
return response.json()
except ConnectionError:
print("接続エラー: インターネット接続を確認してください")
return None
except Timeout:
print("タイムアウトエラー: サーバーの応答が遅いです")
return None
except requests.exceptions.HTTPError as e:
print(f"HTTPエラー: {e}")
return None
except RequestException as e:
print(f"リクエストエラー: {e}")
return None
# 使用例
data = safe_api_request('https://jsonplaceholder.typicode.com/posts/1')
if data:
print(f"取得成功: {data['title']}")
else:
print("データの取得に失敗しました")ステータスコードによる条件分岐
HTTPステータスコードを確認して、適切な処理を行うことも重要です。
import requests
def handle_api_response(url):
response = requests.get(url)
if response.status_code == 200:
print("成功: データを正常に取得")
return response.json()
elif response.status_code == 404:
print("エラー: 指定されたリソースが見つかりません")
return None
elif response.status_code == 500:
print("サーバーエラー: しばらく待ってから再試行してください")
return None
else:
print(f"予期しないステータスコード: {response.status_code}")
return None
# 使用例
result = handle_api_response('https://jsonplaceholder.typicode.com/posts/999')リトライ機能の実装
ネットワークの一時的な問題に対応するため、リトライ機能を実装することも有効です。
import requests
import time
from requests.exceptions import RequestException
def request_with_retry(url, max_retries=3, delay=1):
"""
リトライ機能付きのリクエスト関数
"""
for attempt in range(max_retries):
try:
response = requests.get(url, timeout=5)
response.raise_for_status()
return response.json()
except RequestException as e:
if attempt == max_retries - 1: # 最後の試行
print(f"最大試行回数に達しました: {e}")
return None
else:
print(f"試行 {attempt + 1} 失敗: {e}")
print(f"{delay}秒後に再試行します...")
time.sleep(delay)
# 使用例
data = request_with_retry('https://jsonplaceholder.typicode.com/posts/1')
if data:
print("データ取得成功!")
else:
print("データ取得に失敗しました")このように、エラーハンドリングを適切に行うことで、予期しない問題が発生した場合でも、ユーザーに分かりやすいメッセージを提供し、アプリケーションの信頼性を高めることができます。
まとめ
リンドくんrequestsライブラリってすごく便利ですね!これでいろんなAPIと連携できそうです。
たなべその通り!requestsライブラリをマスターすることで、外部サービスとの連携が格段に楽になるんだ。
これからのAI時代には、様々なAPIを活用する能力がとても重要になってくるからね。
この記事では、PythonのrequestsライブラリによるHTTP通信について、基本から実践的な応用まで幅広く解説してきました。
重要なポイントをおさらいしましょう。
- requestsライブラリは、Pythonで最も人気のあるHTTP通信ライブラリ
- GET・POSTリクエストの基本的な使い方から、パラメータやヘッダーの指定方法
- エラーハンドリングによる堅牢なアプリケーション設計
現代のソフトウェア開発において、外部APIとの連携は必須のスキルです。
特にAI時代では、様々なAIサービスのAPIを組み合わせて価値のあるアプリケーションを構築する能力が求められています。
requestsライブラリをマスターすることで、天気予報サービス、SNS API、決済システム、機械学習APIなど、様々な外部サービスと連携したアプリケーションを開発できるようになります。





