aws lamdba를 이용한 python api 만들기

조회수 952회

안녕하세요 코딩 시작한 지 두 달 정도 되는 왕초보입니다. 제가 카카오톡 챗봇을 만들고 있는데요! 그 기능 중에 하나가 특정 정류소의 버스 노선과 도착 시간을 호출하는 기능인데요 이걸 post 방식으로 url를 넣어야 합니다. 이미지

그래서 aws lamdba로 api를 만들려고 하는데 코드를 계속 수정하고 찾아봐도 어떻게 고쳐나가야 할 지 감이 안 잡히네요..

저 함수 a1과 a2를 출력 시키려면 어떻게 코드를 작성하면 좋을까요? 부탁드립니다 !!

import json
import requests
from bs4 import BeautifulSoup as akk

def lambda_handler(event, context):
    service_key = 'kxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    params= '&cityCode=33010&nodeId=CJB283000059&routeId=CJB270012000'

    open_api = ' http://openapi.tago.go.kr/openapi/service/ArvlInfoInqireService/getSttnAcctoSpcifyRouteBusArvlPrearngeInfoList?ServiceKey='+service_key+params

    res= requests.get(open_api)
    soup = akk(res.content,'html.parser')

    arrtimes = soup.find('arrtime')
    pres = soup.find('arrprevstationcnt')
    arrive = int(arrtimes.get_text())
    pre = int(pres.get_text())

    def a1():
        if arrive > 420:
            print("도착까지 6분 이상 남았습니다")
        elif arrive > 361 and arrive <= 420:
            print("도착까지 6분 남았습니다")
        elif arrive >300 and arrive <= 360:
            print("도착까지 5분 남았습니다")
        elif arrive > 240 and arrive <= 300:
            print("도착까지 4분 남았습니다")
        elif arrive > 180 and arrive <= 240:
            print("도착까지 3분 남았습니다")
        elif arrive > 120 and arrive <= 180:
            print("도착까지 2분 남았습니다")
        elif arrive > 60 and arrive <= 120:
            print("도착까지 1분 남았습니다")
        elif arrive <= 60:
            print("도착까지 1분 이내 남았습니다.")
        else :
            print("아직 데이터가 존재하지 않습니다")

    def a2():    
        if pre > 0:
            print(pre,"정거장 남았습니다.")
        else:
            print("아직 데이터가 존재하지 않습니다")


    return {
        'statusCode': 200,
        'body': json.dumps(a1,a2)
    }

이걸 실행 했을 때 오류는 다음과 같습니다.

{
  "errorMessage": "dumps() takes 1 positional argument but 2 were given",
  "errorType": "TypeError",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 48, in lambda_handler\n    'body': json.dumps(a1,a2)\n"
  ]
}

START RequestId: id Version: $LATEST
[ERROR] TypeError: dumps() takes 1 positional argument but 2 were given
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 48, in lambda_handler
    'body': json.dumps(a1,a2)END RequestId: id
REPORT RequestId: id
    Duration: 453.34 ms Billed Duration: 500 ms Memory Size: 128 MB Max Memory Used: 68 MB  

댓글에 네이버 아이디 적어주시면 해결해 주시는분께 감사의 마음으로 5000포인트 보내드리겠습니다 ㅜㅜ

  • 질문은 이해를 하고 올리시는 건지요? 정영훈 2020.3.4 23:50
  • 함수에서 리턴되는 값이 없고, json 형태로 포맷을 맞춘 1개의 변수 혹은 딕셔너리를 넣어서 json.dumps 명령어 써야할거같은데용. 김호원 2020.3.5 12:24

1 답변

  • 좋아요

    2

    싫어요
    채택 취소하기
    import json
    
    def main():
        arrive = 420
        pre = 3
    
        def a1():
            if arrive > 420:
                answer1 = 6
            elif arrive > 361 and arrive <= 420:
                answer1 = 6
            elif arrive >300 and arrive <= 360:
                answer1 = 5
            elif arrive > 240 and arrive <= 300:
                answer1 = 4
            elif arrive > 180 and arrive <= 240:
                answer1 = 3
            elif arrive > 120 and arrive <= 180:
                answer1 = 2
            elif arrive > 60 and arrive <= 120:
                answer1 = 1
            elif arrive <= 60:
                answer1 = 1
            else :
                answer1 = 'not exist'
            return answer1
    
        def a2():
            if pre > 0:
                return pre
            else:
                return 'not exist'
        dic = {}
        dic['remain'] = a1()
        dic['pre'] = a2()
    
        return {
            'statusCode': 200,
            'body': json.dumps(dic)
        }
    
    print(main())
    
    //Result
    {'statusCode': 200, 'body': '{"remain": 6, "pre": 3}'}
    [Finished in 0.382s]
    
    • 김호워님 감사합니다 ㅠㅠ 덕분에 진전이 되었습니다 ! 네이버 아이디 댓글이나 쪽지 보내주시면 감사의 마음으로 포인트 보내드리겠습니다! 이인수 2020.3.5 14:54
    • 아뇨 네이버 안써서요.. 도움됬다니 다행이네요 김호원 2020.3.5 15:31

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)