diff --git a/README.md b/README.md index 4db26e5..673edfb 100644 --- a/README.md +++ b/README.md @@ -1 +1,27 @@ -# lambda-rainFallTrendAPI \ No newline at end of file +# lambda-rainFallTrendAPI + +## Overview +現在の降水量の傾向を返します。 +データは10分毎に更新されます。 +データは30分前の傾向データになります。 + +## Request +Method : GET +Endpoint : /production/rain-fall-trend/{country}/{prefectures}/{river} +Parameter : +1. {country} : 国名を指定 ex)japan, taiwan +2. {prefectures} : 都道府県を指定 ex)tokyo, taipei +3. {river} : 河川名を指定 ex)arakawa, danshui + +## Response + +以下の Json を返します。 +~~~ +{ + "timestamp": "2017-08-12T12:50:00", + "trend": "↑" +} +~~~ + +timestamp : 分析時点の日時(UTC) +trend : 降雨量の傾向(↑、↓、→) diff --git a/lambda.json b/lambda.json new file mode 100644 index 0000000..979578b --- /dev/null +++ b/lambda.json @@ -0,0 +1,15 @@ +{ + "name": "getRainFallTrend", + "description": "降雨量の傾向を取得する", + "region": "ap-northeast-1", + "runtime": "python3.6", + "handler": "lambda_function.lambda_handler", + "role": "arn:aws:iam::657885203613:role/lambda_athena_s3", + "ignore": [ + "circle\\.yml$", + ".git", + "/.*\\.pyc$" + ], + "timeout": 300, + "memory": 128 +} diff --git a/lambda_function.py b/lambda_function.py new file mode 100644 index 0000000..c8be498 --- /dev/null +++ b/lambda_function.py @@ -0,0 +1,49 @@ +import json +import urllib.parse +import boto3 + +client = boto3.client('s3') + +bucket = 'test-uodu-s3' +target = 'trend' + +def get_rainfall_trend(key): + response = client.get_object(Bucket=bucket, Key=key) + body = response['Body'].read().decode('utf-8') + return body + +def set_response_body(status_code, body): + headers = {} + headers['Content-Type'] = 'application/json' + + res_body = {} + res_body['statusCode'] = status_code + res_body['headers'] = headers + res_body['body'] = body + + return res_body + +def lambda_handler(event, context): + + # クエリが渡されてない場合$ + if (event['pathParameters'] is None): + return set_response_body(400, 'Bad Request No PathParameters') + else: + params = event['pathParameters'] + + # クエリパラメータが不正な場合のデフォルトを荒川に + if (set(params) >= {'country', 'prefectures', 'river'}): + country = params['country'] + prefectures = params['prefectures'] + river = params['river'] + key = target + '/' + country + '/' + prefectures + '/' + river + '/trendRainFall.json' + else: + return set_response_body(400, 'Bad Request No Item') + + try: + json_str = get_rainfall_trend(key) + + return set_response_body(200, json_str) + except Exception as e: + print(e) + return set_response_body(500, 'File Not Found') diff --git a/test_200.json b/test_200.json new file mode 100644 index 0000000..ef19db9 --- /dev/null +++ b/test_200.json @@ -0,0 +1,7 @@ +{ + "pathParameters": { + "country": "taiwan", + "prefectures": "Taipei", + "river": "Danshui" + } +} diff --git a/test_400_bad_query.json b/test_400_bad_query.json new file mode 100644 index 0000000..efa9a63 --- /dev/null +++ b/test_400_bad_query.json @@ -0,0 +1,7 @@ +{ + "pathParameters": { + "country": "taiwan", + "prefectures": "Taipei", + "river": "D" + } +} diff --git a/test_400_no_item.json b/test_400_no_item.json new file mode 100644 index 0000000..893deb3 --- /dev/null +++ b/test_400_no_item.json @@ -0,0 +1,6 @@ +{ + "pathParameters": { + "country": "taiwan", + "prefectures": "Taipei" + } +} diff --git a/test_400_no_query.json b/test_400_no_query.json new file mode 100644 index 0000000..698073c --- /dev/null +++ b/test_400_no_query.json @@ -0,0 +1,3 @@ +{ + "pathParameters": null +}