今天我們來利用 Python requests 自動取得匯率資料,並將資料透過 pymysql 存進 MySQL 資料庫中儲存,匯率來源API從 https://tw.rter.info/ 取得,關於 MySQL 的操作大家可以參考這個網站
首先創建虛擬環境與安裝第三方套件
pipenv --python 3.7
pipenv shell
pipenv install requests pymysql
新增一個 main.py
檔案,程式碼如下:
其中我們 import mysql
是 import 我們的自訂 class,等等我們必須寫一個 mysql.py
來給主程式進行資料庫操作,最初很簡單進行API存取,利用 requests GET請求匯率資料,回傳的資料格式是 JSON,因此下面我們利用 json.loads()
來解析 JSON 字串,選擇我們想要的匯率欄位與時間,用 for loop
遞歸尋訪整個 list,並呼叫 mysql.py
內的 Database()
進行資料寫入。
# -*-encoding=utf-8-*-
import requests
import json
import mysql
# Base URL being accessed
url = "https://tw.rter.info/capi.php"
# Make a GET request and read the response
response = requests.get(url)
Jsondata = response.text
data = json.loads(Jsondata)
#print(data["USDGTQ"]["Exrate"]) #debug only!
for key, value in data.items():
mysql.insert_data((key,value["UTC"],value["Exrate"]))
新增 mysql.py
這裡面包含了一個自定義類別 Database()
,我們要先將一開始的pymysql.connect
內的參數改成你的資料庫設定,接著下面透過方法包裝 pymysql 第三方函式庫的操作,包含 fetch data 和 insert data。sql 字串內為 sql 語法,需要視情況而修改成你的 MySQL 命令。code original from cjchengtw
# -*- coding: utf-8 -*-
import pymysql
import os
# Important! Please change the configs below!
class Database:
def __enter__(self):
self.conn = pymysql.connect(host='DB-HOST',
db='DB-NAME',
port=3306, user='USERNAME',
passwd='PASSWORD',
use_unicode=True,
charset="utf8")
self.cur = self.conn.cursor()
return self.cur
def __exit__(self, ex_type, ex_value, ex_tb):
self.conn.commit()
self.conn.close()
def query_fetchone(sql, data=None):
with Database() as db:
if data:
db.execute(sql, data)
else:
db.execute(sql)
return db.fetchone()
def query_fetchall(sql, data=None):
with Database() as db:
if data:
db.execute(sql, data)
else:
db.execute(sql)
return db.fetchall()
def insert_data(data):
with Database() as db:
sql = """INSERT INTO currency_table (currency,time,exrate) VALUES (%s,%s,%s)""".format(
data[0], data[1], data[2])
db.execute(sql, data)
延伸閱讀
https://blog.gtwang.org/linux/mysql-create-database-add-user-table-tutorial/
https://github.com/PyMySQL/PyMySQL
https://codertw.com/%E8%B3%87%E6%96%99%E5%BA%AB/16063/
https://ithelp.ithome.com.tw/articles/10207905
https://tw.rter.info/
https://github.com/oxygen-TW/Campus-Weather-Service/blob/master/Driver/standard/database.py