From 6034ecad2693903f32a0e0d7fd16b1cb8b5566e8 Mon Sep 17 00:00:00 2001 From: wataru <0ky3r43m78m090b@gmail.com> Date: Sat, 19 Aug 2017 01:06:39 +0900 Subject: [PATCH 1/4] =?UTF-8?q?S3=E3=81=8B=E3=82=89JSON=E3=82=92=E5=8F=96?= =?UTF-8?q?=E5=BE=97=E3=81=97=E3=80=81=E5=91=BC=E3=81=B3=E5=87=BA=E3=81=97?= =?UTF-8?q?=E5=85=83=E3=81=B8=E8=BF=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 28 ++++++++++++++++++++++- lambda.json | 15 +++++++++++++ lambda_function.py | 49 +++++++++++++++++++++++++++++++++++++++++ test_200.json | 7 ++++++ test_400_bad_query.json | 7 ++++++ test_400_no_item.json | 6 +++++ test_400_no_query.json | 3 +++ 7 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 lambda.json create mode 100644 lambda_function.py create mode 100644 test_200.json create mode 100644 test_400_bad_query.json create mode 100644 test_400_no_item.json create mode 100644 test_400_no_query.json diff --git a/README.md b/README.md index 4db26e5..1a346da 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="japan"&prefectures="tokyo"&river="arakawa" +Parameter : +1. country : 国名 +2. prefectures : 都道府県 +3. river : 河川名 + +## 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..f43af7f --- /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 = 'rainFall' + +def get_rainfall_trend(key): + response = client.get_object(Bucket=bucket, Key=key) + body = response['Body'].read().decode('utf-8') + return json.dumps(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['queryStringParameters'] is None): + return set_response_body(400, 'Bad Request') + else: + params = event['queryStringParameters'] + + # クエリパラメータが不正な場合のデフォルトを荒川に + if (set(params) >= {'country', 'prefectures', 'river'}): + country = params['country'] + prefectures = params['prefectures'] + river = params['river'] + key = target + '/' + country + '/' + prefectures + '/' + river + '/trend.json' + else: + return set_response_body(400, 'Bad Request') + + try: + json_str = get_rainfall_trend(key) + + return set_response_body(200, json_str) + except Exception as e: + print(e) + return set_response_body(400, 'Bad Request') diff --git a/test_200.json b/test_200.json new file mode 100644 index 0000000..172524f --- /dev/null +++ b/test_200.json @@ -0,0 +1,7 @@ +{ + "queryStringParameters": { + "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..944c402 --- /dev/null +++ b/test_400_bad_query.json @@ -0,0 +1,7 @@ +{ + "queryStringParameters": { + "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..71a90be --- /dev/null +++ b/test_400_no_item.json @@ -0,0 +1,6 @@ +{ + "queryStringParameters": { + "country": "taiwan", + "prefectures": "Taipei" + } +} diff --git a/test_400_no_query.json b/test_400_no_query.json new file mode 100644 index 0000000..466115c --- /dev/null +++ b/test_400_no_query.json @@ -0,0 +1,3 @@ +{ + "queryStringParameters": null +} From 793726682078925147dc9098b6816a6f61510a35 Mon Sep 17 00:00:00 2001 From: wataru <0ky3r43m78m090b@gmail.com> Date: Sat, 19 Aug 2017 02:28:19 +0900 Subject: [PATCH 2/4] =?UTF-8?q?json=E5=8F=96=E5=BE=97=E5=85=88=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lambda_function.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lambda_function.py b/lambda_function.py index f43af7f..3eaef35 100644 --- a/lambda_function.py +++ b/lambda_function.py @@ -5,12 +5,12 @@ client = boto3.client('s3') bucket = 'test-uodu-s3' -target = 'rainFall' +target = 'trend' def get_rainfall_trend(key): response = client.get_object(Bucket=bucket, Key=key) body = response['Body'].read().decode('utf-8') - return json.dumps(body) + return body def set_response_body(status_code, body): headers = {} @@ -36,7 +36,7 @@ def lambda_handler(event, context): country = params['country'] prefectures = params['prefectures'] river = params['river'] - key = target + '/' + country + '/' + prefectures + '/' + river + '/trend.json' + key = target + '/' + country + '/' + prefectures + '/' + river + '/trendRainFall.json' else: return set_response_body(400, 'Bad Request') From 666fe75697ee1062b024dd9a37f4fd87f6b1559d Mon Sep 17 00:00:00 2001 From: wataru <0ky3r43m78m090b@gmail.com> Date: Sat, 19 Aug 2017 15:42:48 +0900 Subject: [PATCH 3/4] =?UTF-8?q?PathParameter=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++---- lambda_function.py | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 1a346da..fceda99 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,11 @@ ## Request Method : GET -Endpoint : /production/rain-fall-trend?country="japan"&prefectures="tokyo"&river="arakawa" +Endpoint : /production/rain-fall-trend/japan/tokyo/arakawa Parameter : -1. country : 国名 -2. prefectures : 都道府県 -3. river : 河川名 +1. japan : 国名を指定 ex)japan, taiwan +2. tokyo : 都道府県を指定 ex)tokyo, taipei +3. arakawa : 河川名を指定 ex)arakawa, danshui ## Response diff --git a/lambda_function.py b/lambda_function.py index 3eaef35..c8be498 100644 --- a/lambda_function.py +++ b/lambda_function.py @@ -15,7 +15,7 @@ def get_rainfall_trend(key): def set_response_body(status_code, body): headers = {} headers['Content-Type'] = 'application/json' - + res_body = {} res_body['statusCode'] = status_code res_body['headers'] = headers @@ -26,10 +26,10 @@ def set_response_body(status_code, body): def lambda_handler(event, context): # クエリが渡されてない場合$ - if (event['queryStringParameters'] is None): - return set_response_body(400, 'Bad Request') + if (event['pathParameters'] is None): + return set_response_body(400, 'Bad Request No PathParameters') else: - params = event['queryStringParameters'] + params = event['pathParameters'] # クエリパラメータが不正な場合のデフォルトを荒川に if (set(params) >= {'country', 'prefectures', 'river'}): @@ -38,7 +38,7 @@ def lambda_handler(event, context): river = params['river'] key = target + '/' + country + '/' + prefectures + '/' + river + '/trendRainFall.json' else: - return set_response_body(400, 'Bad Request') + return set_response_body(400, 'Bad Request No Item') try: json_str = get_rainfall_trend(key) @@ -46,4 +46,4 @@ def lambda_handler(event, context): return set_response_body(200, json_str) except Exception as e: print(e) - return set_response_body(400, 'Bad Request') + return set_response_body(500, 'File Not Found') From 63844a99674cdc8e354e9ddf26a13dd28d0d9b79 Mon Sep 17 00:00:00 2001 From: wataru <0ky3r43m78m090b@gmail.com> Date: Sat, 19 Aug 2017 16:27:19 +0900 Subject: [PATCH 4/4] =?UTF-8?q?PathParameter=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++---- test_200.json | 2 +- test_400_bad_query.json | 2 +- test_400_no_item.json | 2 +- test_400_no_query.json | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index fceda99..673edfb 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,11 @@ ## Request Method : GET -Endpoint : /production/rain-fall-trend/japan/tokyo/arakawa +Endpoint : /production/rain-fall-trend/{country}/{prefectures}/{river} Parameter : -1. japan : 国名を指定 ex)japan, taiwan -2. tokyo : 都道府県を指定 ex)tokyo, taipei -3. arakawa : 河川名を指定 ex)arakawa, danshui +1. {country} : 国名を指定 ex)japan, taiwan +2. {prefectures} : 都道府県を指定 ex)tokyo, taipei +3. {river} : 河川名を指定 ex)arakawa, danshui ## Response diff --git a/test_200.json b/test_200.json index 172524f..ef19db9 100644 --- a/test_200.json +++ b/test_200.json @@ -1,5 +1,5 @@ { - "queryStringParameters": { + "pathParameters": { "country": "taiwan", "prefectures": "Taipei", "river": "Danshui" diff --git a/test_400_bad_query.json b/test_400_bad_query.json index 944c402..efa9a63 100644 --- a/test_400_bad_query.json +++ b/test_400_bad_query.json @@ -1,5 +1,5 @@ { - "queryStringParameters": { + "pathParameters": { "country": "taiwan", "prefectures": "Taipei", "river": "D" diff --git a/test_400_no_item.json b/test_400_no_item.json index 71a90be..893deb3 100644 --- a/test_400_no_item.json +++ b/test_400_no_item.json @@ -1,5 +1,5 @@ { - "queryStringParameters": { + "pathParameters": { "country": "taiwan", "prefectures": "Taipei" } diff --git a/test_400_no_query.json b/test_400_no_query.json index 466115c..698073c 100644 --- a/test_400_no_query.json +++ b/test_400_no_query.json @@ -1,3 +1,3 @@ { - "queryStringParameters": null + "pathParameters": null }