Pythonで外貨レートAPIを活用してライブ為替レートを取得してみた

### 前置き
Qiita Engineer Festa2024に参加してから、これが38記事目の投稿になります。
山あり谷ありでしたが、ここまで頑張ってきた自分に褒めたいと思います。
38記事投稿したので、Qiita株式会社様、Qiita Engineer Festaオリジナルグッズセットが自宅に届くことを楽しみにしています。ありがとうございます。

### 作成したプログラム

2つのプログラムコードを作成しました。

1. 外貨両替プログラム:
ユーザーが手作業で変換する通貨の量と通貨の名前を入力すると、その変換した通貨の金額が元の通貨ではどれくらいの価値になるかを出力します。

2. ライブ為替レート取得プログラム:
外貨レートAPIを活用して、リアルタイムで為替レートを取得します。

これらのプログラムをPythonで実装しました。

### 外貨両替のプログラムコード
``` python
def currency_converter(amount, from_currency, to_currency, exchange_rate):
  converted_amount = amount * exchange_rate
  return converted_amount

# Example usage:
amount = float(input("Enter amount to convert: "))
from_currency = input("Enter currency to convert from (e.g., USD): ").upper()
to_currency = input("Enter currency to convert to (e.g., EUR): ").upper()
exchange_rate = float(input(f"Enter exchange rate from {from_currency} to {to_currency}: "))

converted_amount = currency_converter(amount, from_currency, to_currency, exchange_rate)
print(f"{amount} {from_currency} is equal to {converted_amount} {to_currency}")
```
### 今日と１ヶ月前の1ユーロ、1ドルを円に換算した際の比較
Qiita Engineer Festaが始まった際、$2024年6月11日時点$では、$1ドルは157.08$円、
$1ユーロは168.71円$でした。
しかし、この記事を書いた、$2024年7月11日$時点では、$1ドルは161.69円$、
$1ユーロは175.23円$になっており、この１ヶ月でかなり円安が進んでいます。

### 出力結果
ここでは、このプログラムコードを使って、$2024年7月11日$の為替レートを使って、$100ユーロ$を日本円に換算するといくらになるかと、$170ドル$を日本円に換算するといくらになるかを出力してみました。
``` python
Enter amount to convert: 100
Enter currency to convert from (e.g., USD): EUR
Enter currency to convert to (e.g., EUR): JPY
Enter exchange rate from EUR to JPY: 175.23
100.0 EUR is equal to 17523.0 JPY
Enter amount to convert: 170
Enter currency to convert from (e.g., USD): USD
Enter currency to convert to (e.g., EUR): JPY
Enter exchange rate from USD to JPY: 161.69
170.0 USD is equal to 27487.3 JPY
```
### 出力結果の検証
1つ目のケース：$100ユーロ$を$日本円$に換算する時（レートは$1ユーロ175.23円$）
100 x 175.23 = 17523
ちゃんと計算結果と出力結果が一致している。

2つ目のケース：$170ドル$を$日本円$に換算する時（レートは$1ドル161.69円$）
170 x 161.69 = 27487.3
ちゃんと計算結果と出力結果が一致している。

しかし、これだけでは物足りないと思い、ライブで為替レートを取得できないか試行錯誤した。そこで、ExchangeRateAPIを使うことにした。

### ライブの為替レートが取得できるプログラムコード
``` python
import requests

# APIキーを設定（ExchangeRate-APIのアカウントで取得したキーを使用）
API_KEY = ...#取得したキー

def get_exchange_rate(base_currency, target_currency):
    url = f"https://v6.exchangerate-api.com/v6/{API_KEY}/latest/{base_currency}"
    response = requests.get(url)
    data = response.json()

    if response.status_code != 200:
        print("為替レートの取得に失敗しました。")
        return None

    exchange_rate = data['conversion_rates'].get(target_currency)
    if exchange_rate is None:
        print(f"{target_currency}の為替レートが見つかりません。")
        return None

    return exchange_rate

def currency_exchange(amount, base_currency, target_currency):
    rate = get_exchange_rate(base_currency, target_currency)
    if rate is None:
        return None

    return amount * rate

def main():
    print("外貨両替プログラム")
    amount = float(input("両替したい金額を入力してください: "))
    base_currency = input("元の通貨コード（例: USD, EUR, JPY）を入力してください: ").upper()
    target_currency = input("交換先の通貨コード（例: USD, EUR, JPY）を入力してください: ").upper()

    exchanged_amount = currency_exchange(amount, base_currency, target_currency)
    if exchanged_amount is not None:
        print(f"{amount} {base_currency} は {exchanged_amount:.2f} {target_currency} です。")

if __name__ == "__main__":
    main()
```
### プログラムコードの説明
**1. APIキーの設定:**
API_KEYには、ExchangeRate-APIから取得したAPIキーを設定します。

**2. 為替レートの取得 (get_exchange_rate関数):**
指定されたbase_currency（元の通貨）に対するtarget_currency（交換先の通貨）の為替レートを取得します。
ExchangeRate-APIのエンドポイントにリクエストを送信し、為替レートを取得します。
エラーハンドリングを行い、為替レートが取得できない場合はエラーメッセージを表示します。

**3. 外貨両替の計算 (currency_exchange関数):**
amount（両替したい金額）、base_currency、target_currencyを指定して、外貨両替の計算を行います。
get_exchange_rate関数を呼び出して為替レートを取得し、両替後の金額を計算します。

**4. メイン関数 (main):**
ユーザーから両替したい金額、元の通貨コード、交換先の通貨コードを入力させます。
currency_exchange関数を呼び出して外貨両替を実行し、結果を表示します。

### 出力結果
``` python
外貨両替プログラム
両替したい金額を入力してください: 150
元の通貨コード（例: USD, EUR, JPY）を入力してください: USD
交換先の通貨コード（例: USD, EUR, JPY）を入力してください: JPY
150.0 USD は 24239.28 JPY です。
外貨両替プログラム
両替したい金額を入力してください: 200
元の通貨コード（例: USD, EUR, JPY）を入力してください: EUR
交換先の通貨コード（例: USD, EUR, JPY）を入力してください: JPY
200.0 EUR は 34987.76 JPY です。
外貨両替プログラム
両替したい金額を入力してください: 30000
元の通貨コード（例: USD, EUR, JPY）を入力してください: JPY
交換先の通貨コード（例: USD, EUR, JPY）を入力してください: USD
30000.0 JPY は 185.64 USD です。
外貨両替プログラム
両替したい金額を入力してください: 50000
元の通貨コード（例: USD, EUR, JPY）を入力してください: JPY
交換先の通貨コード（例: USD, EUR, JPY）を入力してください: EUR
50000.0 JPY は 285.80 EUR です。
```
### 出力結果の検証
この記事の書いた際は、2024年7月11日でしたので、ライブ（$2024年7月11日$時点）の為替レートを使用しました。よって、結果を検証する必要がないが、$ドルから円、ユーロから円、円からドル、円からユーロ$をどれくらいのレートで換算しているかについて興味を持ったので、出力結果を元に計算してみた。

注意）2024年7月11日の為替レートを使用していますが、1日ごとに為替レートは変動するので、皆さんがこのプログラムを使ってある通貨からある通貨に変換する時には、為替レートは変わっていると思います。

$1$つ目の出力結果:
$150ドルは、24329. 28円$
$1ドルは、24329. 28 / 150 = 162.1952円$として換算されている。
つまり、$ドルを円$に両替する時には、$1ドル$ = $162.1952円$として計算している。

$2$つ目の出力結果:
$200ユーロは、34987.76円$
$1ユーロは、34987.76 / 200 = 174.9388円$として換算されている。
つまり、$ユーロを円$に両替する時には、$1ユーロ$ = $174.9388円$として計算している。

**3**つ目の出力結果:
$30000円は、185.64ドル$
1ドルは、30000 / 185.64 = 161.60310278円として換算されている。
つまり、$円をドル$に両替する時には、$1ドル$ = $161.60310278円$として計算している。

**4**つ目の出力結果:
$50000円は、285.80ユーロ$
1ユーロは、50000 / 285.80 = 174.947515745円として換算されている。
つまり、$円をユーロ$に両替する時には、$1ユーロ$ = $174.947515745円$として
計算されている。

### 終わりに
外国に旅行する際には、必ず空港でその国の通貨に両替する必要があります。皆様も時間がある時に、このプログラムコードを参考にして、外貨レートを取得して、事前に認識した上で海外旅行に出かけたらいかがでしょうか。