파이톤과 SendGrid로 그려서 당신에게 이메일을 보내는 비밀 산타클로스


GitHub의 항목here.
또 1년 중 그때야!이것은 빠른 과정이지만 나는 내가 신성한 추구로 록 스타 프로그래머가 되는 과정에서 많은 것을 배웠다고 생각한다.재미있는 간단한 프로젝트에서 한 해를 끝내고 싶다는 얘기다.그래서 우리 엄마가 올해 우리 비밀 산타클로스를 그려달라고 했을 때 그렸어요.
만약 당신이 이 개념에 익숙하지 않다면, 많은 친구들이나 가족들 사이에서 크리스마스를 축하하는 것은 좋은 방법이며, 월급을 써서 선물을 살 필요가 없다.그룹의 모든 구성원들은 수신자로 분배되어 있으며, 그/그녀의 비밀 산타클로스로서 (무작위 분배는 비밀이기 때문에) 당신은 이 사람을 위해 선물만 구매할 수 있다.이렇게 하면 모든 사람이 몇 십 개의 싼 것이 아니라 좋은 선물을 받을 수 있다.

지난 몇 년 동안 나는 기본적인 랜덤 이름 생성기를 사용했지만, 단점은 모든 임무와 나의 비밀 산타클로스가 누군지 알고 있다는 것이다.그래서 올해는 똑똑히python 스크립트를 사용해서 산타클로스에게 이메일로 연락하자.
__

CSV 파일에서 산타 목록 가져오기


올해 판다 도서관을 배웠는데 CSV 파일에서 정보를 추출하기에 아주 적합합니다.이것은 스크립트에서 직접 작성하는 것보다 사용자의 친밀한 데이터 입력 방식이다.이것은 우리의 CSV 파일입니다. 우리의 여섯 명의 친구와 우리가 그들에게 연락하는 데 필요한 정보를 포함합니다.

__

블랙리스트


블랙리스트, 퀘벡스?
나는 산타클로스가 어쨌든 얻지 말아야 할 이름 목록을 추가하는 것이 편리할 것이라고 생각한다.예를 들면 다음과 같습니다.
  • 로스와 서추는 싸워서는 안 된다. 그들은 한바탕 크게 싸웠기 때문에 지금 쉬고 있다
  • 모니카와 첸델러는 결혼하지 말아야 한다. 그들은 결혼했기 때문에 상대방에게 더 비싼 선물을 주고 싶어한다
  • 조이는 무일푼이었다. 그는 싼 선물을 샀지만, 이것은 한 남자에게 주는 것이기 때문에 그는 여자의 비밀 산타클로스가 될 수 없었다
  • 비비는 모두를 좋아하기 때문에 그녀의 블랙리스트는 비어있다

  • __

    SecretSanta 클래스 만들기


    나는 C++로 프로그래밍을 배운다. 내 머릿속에는 대문자 단어가 있다.그렇다면 왜 시크릿 산타 클래스를 추가해서 우리의 스크립트를 구성하지 않습니까?다음은 우리가 그리는 데 필요한 클래스 구성원과 방법입니다.
    class SecretSanta:
    
        def __init__(self, name, email, black_list = None):
            """ initialize class variables """
            self.name = name
            self.email = email 
            self.recipient = None  # will be allocated later
            self.black_list = list()
            self.black_list.append(self.name)  # adding own name
            if black_list:
                self.black_list += black_list.split('|')
    
        def __repr__(self):
            """ override print method (optional) """
            # return string to print
    
        def contact_secret_santa(self):
            """ contact recipient """
            # use SendGrid example here
    
    __

    json 파일에서 설정 불러오기


    마찬가지로, 나는 코드를 직접 편집하는 것보다 외부 파일을 불러오는 변수를 사용하는 것이 더 좋다는 것을 발견했다.그래서 보통 설정을 추가합니다.json 파일을 내 모든 항목에 가져옵니다.다음은 우리가 정의해야 할 변수입니다.
  • 산타클로스의 비밀 정보를 포함하는 CSV 파일 경로
  • 전자메일 템플릿(.txt 또는.html)의 경로
  • 비밀 산타클로스에게 수취인을 분배하려고 시도할 때 해야 할 최대 시도 횟수.블랙리스트가 존재하기 때문에 값을 부여할 수 없습니다. 이 변수는while 순환을 중단하고 오류를 일으킬 수 있습니다.
  • SendGrid 계정의 이메일
  • 개인 SendGrid API 키(개인, 누구와도 공유되지 않음)
  • {
        "csv_file": "data/secret_santas_list.csv",
        "email_file": "data/email.html",
        "attempts_limit": 100,
        "sg_sender_email": "[email protected]",
        "sg_api_key": "your_api_key"
    }
    
    json 라이브러리는 이 인자들을 설정 사전에 가져오고 저장하는 데 도움을 줍니다. 스크립트에서 이 설정 사전을 더 사용할 수 있습니다.
    import json
    with open("data/settings.json", 'r') as json_file:  
        SETTINGS = json.load(json_file)
    print(SETTINGS['csv_file'])
    # output: 'data/secret_santas_list.csv'
    
    __

    주-산타 창건


    우리는 이제 메인 프로그램 작성에 필요한 모든 것을 가지고 있다.
    CSV 정보를 Pandas 데이터 상자에 추출하고 SecretSanta 실례를 만드는 것은 어린이 게임입니다.
    from pandas import read_csv
    df = read_csv(csv_file_path).fillna('')
    secret_santas = []
    for i in range(len(df)):
        new_name = str(df['Name'][i])
        new_email = str(df['Email'][i])
        new_black_list = str(df['Black List'][i])
        new_santa = SecretSanta(name=new_name, email=new_email, black_list=new_black_list)
        secret_santas.append(new_santa)
    
    __

    주 추첨


    드디어 우리의 비밀 산타클로스를 그릴 수 있게 되었습니다!
    우리가 블랙리스트 옵션을 도입했기 때문에 우리가 직면한 문제는 너무 많은 제한(예를 들어 어떤 불쌍한 녀석이 모든 사람의 블랙리스트에 나타난다!) 때문에 추첨이 불가능할 수도 있다는 것이다.나는 우리가 먼저 모든 블랙리스트를 분석한 후에 추첨이 가능한지 확인하는 똑똑한 알고리즘을 생각해 낼 수 있을 것이라고 믿는다.그러나 우리가 성공하거나 발생하지 않을 때까지 간단하고 간단한 길을 시도합시다!

    따라서, 우리는while 순환에 모든 내용을 포장할 것입니다. 만약 그림이 성공적으로 그려지거나 (모든 사람이 비밀 산타클로스로 지정됨) 최대 횟수를 시도했다면, 이 순환은 중단될 것입니다.
    다음은 제가 따르는 주요 절차입니다. GitHub project의 (평론이 양호합니다!)코드:
  • 두 조건(성공 또는 최대 시도 횟수)에서 while 순환을 시작합니다
  • 우리의 명단을 다시 정리하고 이전의 모든 임무를 삭제한다
  • 우리의 비밀 산타클로스 실례 목록을 훑어보고 블랙리스트에 없는 수취인을 찾아라.만약 우리가 하나를 찾게 된다면, 우리는 그것을 분배하고 다음 비밀 산타클로스로 뛰어내릴 것이다.없으면 그림을 그릴 수 없습니다. 새 그림을 시작합니다. (while 순환을 다시 시작하고 단계 2로 돌아갑니다.)
  • 만약에 우리가 모든 비밀 산타클로스에게 수신자를 지정하고 추첨에 성공하면while 순환이 중단됩니다.만약 이런 상황이 발생하지 않았다면, 순환은 최대 시도에 도달했을 때 중단될 것이다.
  • 처리 결과: 성공한 추첨은 비밀 산타클로스와 연락을 촉발하고, 실패한 추첨은 오류를 초래하며, 입력한 파라미터를 확인하도록 요구합니다.
  • __

    산타클로스에게 이메일을 보내다


    이것은 우리의 마지막 걸음이다.우리는 Twilio SendGrid를 사용할 것이다. 이것은 클라우드 기반의 서비스를 제공하여 기업이 전자메일을 발송하는 것을 돕는다.이것은 그들의 수정처럼 뚜렷한 강좌에 감사하는 아주 간단한 절차이다.다음은 SendGrid 서비스를 사용하려면 따라야 할 절차입니다.
    Create a SendGrid account
    너는 먼저 계좌를 하나 등록해야 한다.무료 서비스는 하루에 100통에 이르는 이메일을 보낼 수 있도록 해 준다. 이것은 우리의 작은 프로젝트에 있어서 이미 충분하다.
    Create a Single Sender Verification
    받는 사람이 특정 주소의 이메일을 받게 됩니다.t 따라서 이 전자 우편은 사용자의 전자 우편으로 존재하고 검증해야 합니다.
    Create a personal API key
    이것은 중요한 걸음이다.API 키는 개인이므로 공유해서는 안 됩니다.그것은 나쁜 비밀번호가 될 것이다. (정말이지, 봐봐!)계정에서 이메일을 보낼 때마다 이 정보를 전달해야 합니다.간단하게 보기 위해서 환경 변수에 추가할 수 있습니다.
    Install the SendGrid python library
    마지막으로python 라이브러리를 설치할 수 있습니다.이 문서는 첫 번째 전자메일을 어떻게 보내는지 간단한 예시를 제공했다.나는 더 이상 발굴할 필요가 없다. 이것들은 모두 매우 좋다.이 프로젝트는 contact secret santa () 클래스 방법에서 이루어진 '메일 조수 클래스 없음' 예시를 사용합니다.
    __

    맞춤형 e-메일 컨텐츠


    이것은 선택할 수 있지만 매우 좋은 작은 절차다.나는 산타클로스 자신의 손으로 메일 내용을 써서 사람들에게 그가 즐거움을 전파하도록 도와달라고 부탁하는 것을 발견했다. 이것은 더욱 즐겁고 크리스마스와 같다.Sendgrid는 전자 우편 내용에 대해 텍스트나 html 형식을 사용할 수 있도록 합니다.그렇다면 왜 그림, 색깔, 손글씨체 등을 포함하는 html 파일을 기초하지 않습니까?[NAME] 및 [RECIPIENT] 등의 태그를 배치할 수도 있습니다. 이 태그는 클래스 속성으로 바뀌어 직접 이 사람을 부를 수 있습니다.CSS를 좀 더 개인적이고 신뢰할 수 있도록 넣으세요.저는 웹 개발에 대해 잘 모르지만 제 html 템플릿을 마음대로 보십시오.
    이 모든 절차를 마친 후, 그림이 성공하면, 현재 모든 실례의contact secret santa () 방법을 호출할 수 있습니다.그들은 몇 분 안에 통지를 받고, 당신의 템플릿에 따라 이메일을 받을 것입니다.야, 너도 하나 있어!

    __

    결론


    나는 이 작은 프로젝트가 CSV와 json 파일을 가지고 놀든지, 전자메일을 보내든지,python 기술만 향상시키든지 하는 새로운 것을 가르쳐 주기를 바란다.이것은 흥미로운 마지막 프로젝트로 올해를 마치는 것입니다. 이것은 저에게 풍부한 새로운 것을 배우는 것이고 더 많은 절차가 제 목표를 실현하기를 바랍니다.
    메리 크리스마스.위대한 비밀 산타클로스가 사랑하는 사람(그리고 블랙리스트에 있는 사람)과 시간을 나눈다.안녕히 계세요.

    __
    회사 명
    표지 사진Rachel Middleton

    좋은 웹페이지 즐겨찾기