今回はPythonからデータベースにアクセスし情報を格納していく部分を実施していきます。これができると得られた情報をDBに格納したり、取り出したりとデータの処理がしやすくなります。今回はAWS RDSを使っていきます。今回の内容を実施するにあたり、予備知識として参考になるのが以下になります。
[データベース参考]
・データベースの正規化(エクセルでの処理)(https://smizunolab.blogspot.com/2024/06/blog-post_18.html)
・AWS RDSでデータベースを作成しCloudShellから接続してSQL文からデータを格納する(https://smizunolab.blogspot.com/2024/06/aws-rdscloudshellsql.html)
・データベースへcsvでデータをインポートする(https://smizunolab.blogspot.com/2024/06/csv.html)
[API参考]
・API (Application Programming Interface)の利用:POSTMANの利用(https://smizunolab.blogspot.com/2024/06/api-application-programming.html)
1. AWS RDSの準備
RDSを立ち上げて準備をしておきます。Public Accessが可能な状態にしてください。以下の内容と同じDBを立ち上げておきます。
・AWS RDSでデータベースを作成しCloudShellから接続してSQL文からデータを格納する(https://smizunolab.blogspot.com/2024/06/aws-rdscloudshellsql.html)
2. APIで情報を取得
今回はAPIで情報を取得してそれをDBに格納していきます。APIが初めてな人は下記を参照してください。
・API (Application Programming Interface)の利用:POSTMANの利用(https://smizunolab.blogspot.com/2024/06/api-application-programming.html)
今回は、NASA API:https://api.nasa.gov/ を利用します。各自でアカウント登録をして、APIキーを取得してください(アカウント登録をするとAPIキーが送られてきます)。
このAPIを使って、Pythonで動かしてみます。APIの使用はAPI提供元のサイトを参照してください。APIキーは自分のものを入れてください。import requests | |
url = "https://api.nasa.gov/planetary/apod?api_key=xxxxxxxxxxxxxxxxxxxxxxxx" | |
payload = {} | |
headers = {} | |
response = requests.request("GET", url, headers=headers, data=payload) | |
print(response.text) |
import requests | |
import json | |
from IPython.display import Image, display | |
url = "https://api.nasa.gov/planetary/apod?api_key=xxxxxxxxxxxxxxxxxxxxx&date=2021-09-01" | |
payload = {} | |
headers = {} | |
response = requests.request("GET", url, headers=headers, data=payload) | |
print(response.text) | |
data = response.json() | |
# 各キーごとに内容を表示 | |
print("日付:", data["date"]) | |
print("説明:", data["explanation"]) | |
print("HD画像URL:", data["hdurl"]) | |
print("メディアタイプ:", data["media_type"]) | |
print("サービスバージョン:", data["service_version"]) | |
print("タイトル:", data["title"]) | |
print("画像URL:", data["url"]) | |
# 画像URLの取得 | |
image_url = data["url"] | |
# 画像の表示 | |
display(Image(url=image_url)) |
CREATE DATABASE IF NOT EXISTS nasa; | |
USE nasa; | |
CREATE TABLE IF NOT EXISTS apod ( | |
id INT AUTO_INCREMENT PRIMARY KEY, | |
date DATE NOT NULL, | |
explanation TEXT, | |
hdurl VARCHAR(255), | |
media_type VARCHAR(50), | |
service_version VARCHAR(50), | |
title VARCHAR(255), | |
url VARCHAR(255) | |
); |
import mysql.connector | |
import requests | |
# NASA APIからデータを取得 | |
url = "https://api.nasa.gov/planetary/apod?api_key=xxxxxxxxxxxxxxxxxxxxxxx&date=2021-09-01" | |
response = requests.get(url) | |
data = response.json() | |
# MySQLデータベースへの接続 | |
conn = mysql.connector.connect( | |
host="database-001.xxxxxxxxxxxxx.us-east-1.rds.amazonaws.com", | |
user="admin", | |
passwd="LinuxOS99", | |
database="nasa" | |
) | |
# カーソルの作成 | |
cursor = conn.cursor() | |
# SQL文の定義 | |
sql = """ | |
INSERT INTO apod (date, explanation, hdurl, media_type, service_version, title, url) | |
VALUES (%s, %s, %s, %s, %s, %s, %s) | |
""" | |
# データの挿入 | |
values = ( | |
data["date"], | |
data["explanation"], | |
data["hdurl"], | |
data["media_type"], | |
data["service_version"], | |
data["title"], | |
data["url"] | |
) | |
# SQL文の実行 | |
cursor.execute(sql, values) | |
# コミット(変更をデータベースに反映) | |
conn.commit() | |
# 接続のクローズ | |
cursor.close() | |
conn.close() |
0 件のコメント:
コメントを投稿