前回のおさらい
前回投稿した記事の続きです。
前回はPracticeLamdaという名前のLambda関数をPythonを選択肢して作成、
コードは特に変更せずデプロイ+テストの挙動を確認しただけでした。
それだけでは何も身につかないので実際にAPI作成へチャレンジしてみます。
日本の祝日取得APIを作成してみる
テストのタブを選択→新しいイベントを作成へ
「PracticeLamdaEventTst」という名前のイベントを作成します。
作成したら保存してデータソースを調達しましょう。
内閣府HPの国民の祝日についてというサイトページへアクセス。
下へスクロールしていくと、昭和30年〜令和7年までの祝日一覧がCSVファイルでダウンロードできます。
中身はこんな感じの一覧形式となっております。
では再度Lambda関数のコードソースへ
以下のように編集します。
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')
}
一旦デプロイ→テストの順で実行してみます。
画像のようにFunction Logsが文字化けしちゃってますが、(ちなみに元のCSVファイルを超絶長い文字列として取得してきてるので見切れてます。)問題なく取得できてますね。
文字化けを修正する為にdecode関数を追加します。
今回日本語部分が全て文字化けしてしまっているので、Shift_JISでデコードする処理を追記します。
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')
}
やったぜ。
改行ではなくリストにデータを格納する処理に変更します。
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で1行ごとにデータを区切る
decoded = content.decode("shift_jis").split()
print(decoded)
return{
'statusCode':200,
'body': json.dumps('Hello from Lamda')
}
リストへ格納できたので、インデックスでの指定もしてみます。
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で1行ごとにデータを区切る
decoded = content.decode("shift_jis").split()
#0..2のインデックスを指定して出力
print(decoded[0:2])
return{
'statusCode':200,
'body': json.dumps('Hello from Lamda')
}
表名と一覧の先頭(1955年1月1日元日)も指定して取れます。
Slackと連携して祝日の通知がくるようにしても便利そうですね。
お読みいただきありがとうございました。