API(Application Programming Interface)とデータベースは、現代のアプリケーション開発において重要な要素です。この記事では、Pythonを使ってAPIとデータベースを効率的に組み合わせる方法を詳しく解説します。具体的なコード例とその詳細な解説、さらには応用例を2つ含めています。
基本的なAPIとデータベースのインタラクション
APIとデータベースの基本的なインタラクションの流れは、APIからデータを取得し、そのデータをデータベースに保存する、というものです。以下はその基本的なコード例です。
# 必要なライブラリのインポート
import requests
import sqlite3
# APIからデータを取得
response = requests.get('https://api.example.com/data')
data = response.json()
# SQLiteデータベースに接続
conn = sqlite3.connect('example.db')
# データをデータベースに保存
cursor = conn.cursor()
cursor.execute("INSERT INTO table_name (column1, column2) VALUES (?, ?)", (data['key1'], data['key2']))
conn.commit()
conn.close()
コードの詳細解説
1. `requests.get(‘https://api.example.com/data’)`: `requests`ライブラリを使ってAPIからデータを取得しています。
2. `data = response.json()`: JSON形式で受け取ったデータをPythonの辞書に変換しています。
3. `sqlite3.connect(‘example.db’)`: SQLiteデータベースに接続しています。
4. `cursor.execute()`: SQLクエリを実行してデータを挿入しています。
応用例1:APIからのデータをフィルタリングして保存
APIから取得したデータが多すぎる、または不要なデータが混じっている場合は、Pythonでフィルタリングを行ってからデータベースに保存できます。
# データのフィルタリング
filtered_data = [item for item in data['items'] if item['type'] == 'target_type']
# フィルタリングしたデータをデータベースに保存
for item in filtered_data:
cursor.execute("INSERT INTO table_name (column1, column2) VALUES (?, ?)", (item['key1'], item['key2']))
conn.commit()
コードの詳細解説
– `filtered_data = [item for item in data[‘items’] if item[‘type’] == ‘target_type’]`: リスト内包表記を使って、特定の条件を満たすデータだけを新しいリストに格納しています。
応用例2:APIのページネーションに対応する
多くのAPIはページネーションという形でデータを提供します。この場合、複数ページ分のデータを全て取得するための処理が必要です。
# ページネーションに対応
page = 1
while True:
response = requests.get(f'https://api.example.com/data?page={page}')
data = response.json()
if not data['items']:
break
for item in data['items']:
cursor.execute("INSERT INTO table_name (column1, column2) VALUES (?, ?)", (item['key1'], item['key2']))
conn.commit()
page += 1
コードの詳細解説
– `while True:`: 無限ループを使って、データがなくなるまでAPIからデータを取得しています。
– `if not data[‘items’]:`: アイテムが空になったらループを抜けます。
まとめ
Pythonを使ってAPIとデータベースのインタラクションを行う方法は多岐にわたりますが、基本的な流れとしてはAPIからデータを取得し、それをデータベースに保存するというステップが一般的です。応用例として、データのフィルタリングやAPIのページネーションに対応する方法も紹介しました。
コメント