Twilio 및 스프레드시트로 생일 봇 구축

우리가 만들 것은 다음과 같습니다.



Twilio 평가판 계정에서 전송 <-- 평가판 계정을 사용하기 때문에(무료)
Hi Koji, Happy Birthday! Have a wonderful day. Twilio API를 사용하여 Python 스크립트에서 보낸 메시지입니다.

작동 방식



어딘가(예: Heroku)에 Python 스크립트를 호스팅하고 24시간마다 스크립트를 시작합니다.
첫 번째 단계로 스크립트는 전화번호와 생일이 포함된 수신자(클라이언트) 목록이 있는 Google 스프레드시트를 확인합니다. 물론 스프레드시트는 텍스트 파일, CSV 파일, 엑셀 파일, DB 등이 될 수 있습니다. 이는 목록에 있는 클라이언트 수와 이를 위해 사용할 호스팅 서비스 종류에 따라 다릅니다. 또한 사람/사람들이 목록을 업데이트해야 하는 빈도와 해당 사람들이 CLI 도구에 익숙한지 여부입니다.

이 경우 비전문가가 관리할 Google 스프레드시트를 사용하고 있습니다.



한 가지 더, 저는 Poetry( https://python-poetry.org/ )를 사용하고 있습니다.

시 프로젝트 만들기



$ poetry new birthday_bot
$ cd birthday_bot

패키지 설치



이 기사에서는 gspread, oauth2client 및 twilio를 사용합니다.
처음 2개의 패키지는 Google 스프레드시트에 액세스하기 위한 것이고 마지막 패키지는 Twilio API를 사용하기 위한 것입니다.
gspread https://gspread.readthedocs.io/en/latest/index.html
twilio https://pypi.org/project/twilio/

$ poetry add gspread oauth2client twilio

Google 스프레드시트 환경 설정



gspread


버나시 / gspread


Google 스프레드시트 Python API





Google 스프레드시트 Python API v4




Google Sheets 작업을 위한 간단한 인터페이스.
특징:
  • 제목, 키 또는 URL로 스프레드시트를 엽니다.
  • 셀 범위를 읽고 쓰고 서식을 지정합니다.
  • 공유 및 액세스 제어.
  • 일괄 업데이트.

  • 설치


    pip install gspread

    Requirements: Python 3.6+.

    기본 사용법

    1. Create credentials in Google API Console

    2. Start using gspread:

    import gspread
    gc = gspread.service_account()
    
    # Open a sheet from a spreadsheet in one go
    wks = gc.open("Where is the money Lebowski?").sheet1
    
    # Update a range of cells using the top left corner address
    wks.update('A1', [[1, 2], [3, 4]])
    
    # Or update a single cell
    wks.update('B42', "it's down there somewhere, let me take another look.")
    
    # Format the header
    wks.format('A1:B1', {'textFormat': {'bold': 

    Here is the guide to setup
    https://gspread.readthedocs.io/en/latest/oauth2.html

    If you don't want to use Google Spreadsheet to hold recipients' information. You can skip this step and add a function to read a text file/csv file.

    Twilio API 얻기

    We need to account_id, auth_token, and phone_number to send a message to a smartphone.

    Twilio's help center page is very useful to get them.
    https://support.twilio.com/hc/en-us/articles/223136027-Auth-Tokens-and-How-to-Change-Them

    암호

    app.py

    import gspread
    import json
    from oauth2client.service_account import ServiceAccountCredentials
    import datetime
    from twilio.rest import Client
    
    # create client
    account_id = 'Twilio_account_id'
    auth_token = 'Twilio_auth_token'
    phone_number = 'Twilio_phone_number'
    client = Client(account_id, auth_token)
    
    # connect google spreadsheet and return worksheet info
    def connect_gspread(jsonf: str, key:str) -> gspread.models.Worksheet:
        #print('connect_gspread')
        scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
        credentials = ServiceAccountCredentials.from_json_keyfile_name(jsonf, scope)
        gc = gspread.authorize(credentials)
        SPREADSHEET_KEY = key
        worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1
        # print(type(worksheet))
        return worksheet
    
    # send a message to a recipient_number
    def send_msg(name: str, recipient_number: str):
        # add recipient name to the message
        message = client.messages.create(
            body = 'Hi {}, Happy Birthday! Have a wonderful day.'.format(name),
            from_ = phone_number,
            # from_ = 'recipient_number',
            to = recipient_number
        )
    
    
    jsonf = './integral.json'
    spread_sheet_key = 'spreadsheet_key'
    ws = connect_gspread(jsonf,spread_sheet_key)
    
    # get cell value from worksheet(ws)
    names = ws.col_values(1)
    birthdays = ws.col_values(2)
    numbers = ws.col_values(3)
    
    today = datetime.datetime.now()
    today = today.strftime("%m/%d")
    print('today is {}'.format(today))
    
    if birthdays[1] == today:
        send_msg(names[1], numbers[1])
        print('sent a msg')
    else:
        print('no target')
    


    스크립트를 실행




    $ poetry run python app.py
    today is 03/10
    sent a msg
    

    좋은 웹페이지 즐겨찾기