AWS Lamda関数作成入門してみます。　Part.2

# 前回のおさらい
[前回投稿した記事](https://qiita.com/keitootiek/items/344926115355acb33934)の続きです。

前回はPracticeLamdaという名前のLambda関数をPythonを選択肢して作成、
コードは特に変更せずデプロイ＋テストの挙動を確認しただけでした。
それだけでは何も身につかないので実際にAPI作成へチャレンジしてみます。

## 日本の祝日取得APIを作成してみる
前回の続きから作業していきます。
![スクリーンショット 2024-04-15 18.04.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511203/fa77158d-992b-e9c0-2779-68f3cc9013a8.png)

テストのタブを選択→新しいイベントを作成へ
「PracticeLamdaEventTst」という名前のイベントを作成します。
![スクリーンショット 2024-04-15 18.27.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511203/e8229091-6b59-0f94-4e61-493f9e2e47fa.png)
作成したら保存してデータソースを調達しましょう。
内閣府HPの[国民の祝日について](https://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html)というサイトページへアクセス。
![スクリーンショット 2024-04-15 18.08.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511203/76793504-068f-1a60-dcc1-b99cc35e7ea7.png)
下へスクロールしていくと、昭和30年〜令和7年までの祝日一覧がCSVファイルでダウンロードできます。
![スクリーンショット 2024-04-15 18.08.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511203/81a3961a-049a-cfea-e509-d2a42ccf0ddc.png)
中身はこんな感じの一覧形式となっております。
![スクリーンショット 2024-04-15 18.38.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511203/8f1c2be3-3919-bc4b-aff8-99b636294655.png)

では再度Lambda関数のコードソースへ
以下のように編集します。
![スクリーンショット 2024-04-15 18.34.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511203/cbda75f0-4714-7a04-0279-864c7eb72c63.png)
```py
import json
from urllib.request import urlopen #URLを開くためのモジュール

#リソースとなる祝日一覧のURLを取得
link = "https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"

def lamda_handler(event,context):
    f = urlopen(link)
    content = f.read()
    
    print(content)
    
    print("てすと")
    
    return{
        'statusCode':200,
        'body': json.dumps('Hello from Lamda')
    }
```

一旦デプロイ→テストの順で実行してみます。

![スクリーンショット 2024-04-15 18.16.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511203/c9a5c582-e0f1-f6f5-1cd3-376a6fe06ef0.png)
画像のようにFunction Logsが文字化けしちゃってますが、（ちなみに元のCSVファイルを超絶長い文字列として取得してきてるので見切れてます。）問題なく取得できてますね。

文字化けを修正する為にdecode関数を追加します。
今回日本語部分が全て文字化けしてしまっているので、Shift_JISでデコードする処理を追記します。

```py
import json
from urllib.request import urlopen #URLを開くためのモジュール

#リソースとなる祝日一覧のURLを取得
link = "https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"

def lamda_handler(event,context):
    f = urlopen(link)
    content = f.read()
    
    print(content)
    
    print("てすと")
    
    #文字化け対策でdecode関数を使用
    decoded = content.decode("shift_jis")
    
    print(decoded)
    
    return{
        'statusCode':200,
        'body': json.dumps('Hello from Lamda')
    }
    
```

#### やったぜ。
![スクリーンショット 2024-04-15 19.08.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511203/a3e1596c-e456-4be4-46bc-f4f951182007.png)

改行ではなくリストにデータを格納する処理に変更します。
```py
import json
from urllib.request import urlopen #URLを開くためのモジュール

#リソースとなる祝日一覧のURLを取得
link = "https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"

def lamda_handler(event,context):
    f = urlopen(link)
    content = f.read()
    
    print(content)
    
    #文字化け対策でdecode関数を使用、splitで１行ごとにデータを区切る
    decoded = content.decode("shift_jis").split()
    print(decoded)
    
    return{
        'statusCode':200,
        'body': json.dumps('Hello from Lamda')
    }
    
```
![スクリーンショット 2024-04-15 19.11.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511203/d1d3c81d-e2c0-64dc-e8ad-9853e117c79b.png)

リストへ格納できたので、インデックスでの指定もしてみます。
```py
import json
from urllib.request import urlopen #URLを開くためのモジュール

#リソースとなる祝日一覧のURLを取得
link = "https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"

def lamda_handler(event,context):
    f = urlopen(link)
    content = f.read()
    
    print(content)
    
    #文字化け対策でdecode関数を使用、splitで１行ごとにデータを区切る
    decoded = content.decode("shift_jis").split()
    #0..2のインデックスを指定して出力
    print(decoded[0:2])
    
    return{
        'statusCode':200,
        'body': json.dumps('Hello from Lamda')
    }
    
```
![スクリーンショット 2024-04-16 9.30.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511203/8afc6d94-769c-c19b-5a2d-ff9537d695e8.png)

表名と一覧の先頭（1955年1月1日元日）も指定して取れます。
Slackと連携して祝日の通知がくるようにしても便利そうですね。

お読みいただきありがとうございました。