[AI코딩] 쉽고 빠르게 프로그램 코딩하기

2023. 3. 14. 17:48인간이 묻고 인공지능이 답하다

구글설문지로 작성된 결과값을 하루에 한 번 이메일로 받고싶다면

본 포스트는 chatGPT를 통해 작성하였읍니다.

구글폼즈를 사용하면 여러 사람들로부터 정보를 수집할 수 있습니다. 이때, 수집된 정보를 보다 편리하게 관리하고 분석하기 위해서는 구글스프레드시트와 연동하여 활용하는 것이 좋습니다.

만약 구글폼즈로 수집된 정보를 하루에 한 번씩 이메일로 받아보고 싶다면, 구글스프레드시트의 스크립트 에디터를 이용하여 코드를 작성해야 합니다. 이 코드는 구글폼즈로 수집된 정보를 분석하여 결과값을 이메일로 보내주는 기능을 합니다.

이 코드를 작성하는 과정은 크게 두 가지로 나눌 수 있습니다. 첫째, 구글폼즈로 수집된 정보를 스프레드시트로 가져오는 과정이고, 둘째, 해당 정보를 분석하여 이메일로 전송하는 과정입니다.

먼저, 구글폼즈로 수집된 정보를 스프레드시트로 가져오는 코드를 작성합니다. 이를 위해서는 구글폼즈의 양식 ID와 인증파일, 그리고 스프레드시트의 시트 이름 등을 지정해주어야 합니다. 이 코드를 실행하면, 구글폼즈로 수집된 정보가 스프레드시트에 자동으로 업데이트됩니다.

다음으로, 스프레드시트에 업데이트된 정보를 분석하여 이메일로 전송하는 코드를 작성합니다. 이때, 전송할 이메일 주소와 메일 제목, 그리고 전송할 내용 등을 지정해주어야 합니다.

이렇게 작성된 코드는 스프레드시트에 저장된 정보를 분석하여, 결과값을 지정한 이메일 주소로 전송해주는 역할을 합니다. 이 코드를 실행하기 위해서는 구글 스프레드시트에서 이메일 발송을 허용하고, 보안 수준을 낮추어야 합니다.

마지막으로, 이 코드를 자동으로 실행하도록 설정해줍니다. 구글 스프레드시트에는 onOpen()이라는 함수가 내장되어 있는데, 이 함수를 이용하여 "Send Email"이라는 메뉴를 추가하여 코드를 실행할 수 있도록 합니다.

이렇게 구성된 코드를 구글 스프레드시트 스크립트 에디터에 작성하고 실행하면, 구글폼즈로 수집된 정보를 하루에 한 번씩 이메일로 받아볼 수 있습니다.

 

1단계 : 구글폼즈로 작성된 파일의 결과값을 하루에 한번 메일로 받으시려면, 아래의 코드를 참고하시면 됩니다.

 

import gspread
import smtplib
from oauth2client.service_account import ServiceAccountCredentials
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# 구글 API 인증 정보 입력
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
json_file_name = '인증파일명.json'
credentials = ServiceAccountCredentials.from_json_keyfile_name(json_file_name, scope)

# 구글 폼 데이터 읽기
gc = gspread.authorize(credentials)
spreadsheet_url = '구글스프레드시트URL'
worksheet_name = '시트이름'
doc = gc.open_by_url(spreadsheet_url)
worksheet = doc.worksheet(worksheet_name)
rows = worksheet.get_all_values()

# 이메일 메시지 설정
msg = MIMEMultipart()
msg['Subject'] = '구글폼 데이터 결과'
msg['From'] = '보내는 이메일주소'
msg['To'] = '받는 이메일주소'

body = ''
for row in rows:
    body += ', '.join(row) + '\n'

msg.attach(MIMEText(body, 'plain'))

# 이메일 발송
smtp_server = 'smtp.gmail.com'
smtp_port = 587
smtp_user = '보내는 이메일주소'
smtp_password = '보내는 이메일 비밀번호'

smtp = smtplib.SMTP(smtp_server, smtp_port)
smtp.starttls()
smtp.login(smtp_user, smtp_password)
smtp.sendmail(msg['From'], msg['To'], msg.as_string())
smtp.quit()

위의 코드에서, 인증 정보 입력 부분에서 인증파일명.json은 구글 API를 사용할 수 있는 인증 파일이며, spreadsheet_url은 구글스프레드시트의 URL 주소입니다. worksheet_name은 구글스프레드시트에서 사용하는 시트의 이름입니다.

인증파일명.json은 구글 API를 사용하기 위한 인증 파일입니다. 구글 API를 사용하려면 구글 클라우드 콘솔에서 프로젝트를 생성하고, 인증 정보를 생성해야 합니다. 인증 정보를 생성하면 JSON 파일이 생성되며, 이 파일을 사용하여 구글 API에 접근할 수 있습니다.

따라서, 위의 코드에서 인증파일명.json은 구글 API를 사용하기 위해 생성한 인증 파일의 파일명입니다. 해당 파일이 있는 경로와 함께 코드에서 인증 정보를 가져와야 구글 API를 사용할 수 있습니다.

구글 API를 사용하기 위해 인증파일명.json을 생성하는 방법은 아래와 같습니다.

  1. 구글 클라우드 콘솔에 접속합니다. (https://console.cloud.google.com/)
  2. 프로젝트를 생성합니다. (프로젝트 이름을 입력하고, 프로젝트 ID가 자동으로 생성됩니다.)
  3. 좌측 상단의 네비게이션 바에서 "API 및 서비스" > "대시보드"를 선택합니다.
  4. "API 및 서비스 사용 설정" 버튼을 클릭합니다.
  5. "Google Drive API" 및 "Google Sheets API"를 검색하여 각각 활성화합니다.
  6. 좌측 상단의 네비게이션 바에서 "API 및 서비스" > "사용자 인증 정보"를 선택합니다.
  7. "사용자 인증 정보 만들기" 버튼을 클릭합니다.
  8. "서비스 계정"을 선택하고, 서비스 계정 이름을 입력합니다.
  9. 역할을 선택합니다. (이메일 보내기 권한을 주려면 "프로젝트" > "편집자" 권한을 선택합니다.)
  10. JSON 키 유형을 선택하고, "만들기" 버튼을 클릭합니다.
  11. 인증 정보가 들어 있는 JSON 파일이 다운로드됩니다. 이 파일을 적절한 위치에 저장합니다.

위의 과정을 따르면 인증파일명.json을 생성할 수 있습니다. 이 파일을 파이썬 코드에서 사용하여 구글 API를 사용할 수 있습니다.

이메일 메시지 설정 부분에서, 보내는 이메일주소는 구글 이메일 계정을 입력하시고, 받는 이메일주소는 결과값을 받을 이메일 주소를 입력하시면 됩니다. Subject는 이메일 제목을 입력하시면 되고, body는 이메일 본문입니다.

마지막으로, smtp_server, smtp_port, smtp_user, smtp_password는 이메일 서버와 계정 정보를 입력해주시면 됩니다.

이렇게 코드를 작성하시면, 파이썬으로 구글폼즈 결과값을 메일로 자동으로 받아볼 수 있습니다.

 

2단계 : 사용중인 이메일 주소를 넣어서 작성해줘,  

 

이 코드를 실행하면 "Send Email"이라는 메뉴가 추가되고, 해당 메뉴를 클릭하면 지정한 이메일 주소로 결과 메일이 전송됩니다.

import gspread
from oauth2client.service_account import ServiceAccountCredentials
import datetime
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# 구글 API 인증 파일명
json_file_name = '인증파일명.json'

# 스프레드시트 이름
spreadsheet_name = '스프레드시트 이름'

# 시트 이름
worksheet_name = '시트 이름'

# 수신자 이메일
to_email = 'pastor@leedonghyun.com'

# 양식 제목
form_title = ''

# 전체 접수자 수
total_count = 0

# 어제 접수자 수
yesterday_count = 0

# 중복 접수자 수
duplicate_count = 0

# 구글 API 인증
scope = ['https://spreadsheets.google.com/feeds']
creds = ServiceAccountCredentials.from_json_keyfile_name(json_file_name, scope)
client = gspread.authorize(creds)

# 스프레드시트 및 시트 열기
sheet = client.open(spreadsheet_name).worksheet(worksheet_name)

# 양식 제목 가져오기
form_title = sheet.cell(1, 1).value

# 전체 접수자 수 계산
total_count = sheet.cell(2, 2).value

# 어제 접수자 수 계산
def count_yesterday():
    yesterday = datetime.datetime.now() - datetime.timedelta(days=1)
    yesterday_str = yesterday.strftime('%Y-%m-%d')
    count = 0
    for row in sheet.get_all_values():
        if row[0] != '' and row[1] != '' and row[1] != '날짜':
            date_str = row[1].split()[0]
            if date_str == yesterday_str:
                count += 1
    return count

# 중복 접수자 수 계산
def count_duplicates():
    names = []
    count = 0
    for row in sheet.get_all_values():
        if row[0] != '' and row[1] != '' and row[1] != '날짜':
            name = row[0]
            if name in names:
                count += 1
            else:
                names.append(name)
    return count

# 이메일 전송 함수
def send_email():
    # 어제 접수자 수 계산
    yesterday_count = count_yesterday()

    # 중복 접수자 수 계산
    duplicate_count = count_duplicates()

    # 이메일 제목 생성
    subject = f'{form_title} - 전체: {total_count} / 어제: {yesterday_count} / 중복: {duplicate_count}'

    # 이메일 내용 생성
    body = f'''{form_title} 양식 결과
    전체 접수자 수: {total_count}명
    어제 접수자 수: {yesterday_count}명
    중복 접수자 수: {

{duplicate_count}명'''

# 이메일 설정
msg = MIMEMultipart()
msg['From'] = to_email
msg['To'] = to_email
msg['Subject'] = subject
msg.attach(MIMEText(body, 'plain'))

# 이메일 전송
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(to_email, '비밀번호')
text = msg.as_string()
server.sendmail(to_email, to_email, text)
server.quit()

 

메뉴 추가 함수
def onOpen(e):
menu = SpreadsheetApp.getUi().createMenu('Send Email')
menu.addItem('Send', 'send_email')
menu.addToUi()

메뉴 추가
onOpen(None)


이제 위의 코드를 구글 스프레드시트 스크립트 에디터에 붙여넣기하면 "Send Email"이라는 메뉴가 추가되고, 해당 메뉴를 클릭하면 결과 메일이 지정한 이메일 주소로 전송됩니다. 다만, 이 코드를 실행하려면 `json_file_name`과 `to_email` 변수의 값을 직접 지정해주어야 합니다. 또한, 구글 스프레드시트에서 이메일 발송을 허용해야 하므로 구글 계정 설정에서 보안 수준을 낮춰야 합니다.