아래는 숙명여대 홈페이지에서 특정 단어를 검색하여 결과가 나오면 메일을 보내주는 소스이다. 이 프로그램을 CRON에 등록해서 매일 아침에 실행하게 했다. 만약에 모집요강이 뜨면 내게 메일을 보내준다.
클로드 AI의 지원을 받아 소스를 수정하고 메일을 보내는 기능을 추가했다. 코딩에 대한 기본 개념만 알고 있어도 AI의 지원을 받으면 얼마든지 개발이 가능하다. 최근에 만든 CCTV앱처럼 AI의 지원을 받으면 개발하기 쉽다.

이 프로그램을 개발하기 위해서는 기본적인 파이썬에 대한 기조지식이 있어야 한다. 또한 http통신에 대한 기초지식을 알고 있어야 한다. 메일을 보내는 것과 관련하여 smtp메일서버에 대한 기초지식을 알고 있어야 한다. 인터넷을 통해 검색하면 기초지식을 파악하는데는 하루도 안걸리는 일이다.
실제로 미국에서 조세프라는 청년은 AI로 앱을 만들어 15개월만에 2백만달러를 벌었다고 한다. (관련기사) 나중에 시간이 되면 주식분석 프로그램을 AI로 만들어 봐야겠다.
import requests
from bs4 import BeautifulSoup as bs
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import os
import ssl
import re
def send_email(subject, body):
sender_email = os.environ.get("SENDER_EMAIL")
receiver_email = os.environ.get("RECEIVER_EMAIL")
password = os.environ.get("EMAIL_PASSWORD")
smtp_server = os.environ.get("SMTP_SERVER")
smtp_port = int(os.environ.get("SMTP_PORT", 465))
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = subject
message.attach(MIMEText(body, "plain"))
context = ssl.create_default_context()
try:
with smtplib.SMTP_SSL(smtp_server, smtp_port, context=context) as server:
server.login(sender_email, password)
server.send_message(message)
print("이메일을 성공적으로 보냈습니다.")
except Exception as e:
print(f"이메일 전송 중 오류 발생: {e}")
print(f"SMTP 서버: {smtp_server}")
print(f"SMTP 포트: {smtp_port}")
print(f"발신자 이메일: {sender_email}")
def search_sookmyung(query):
url = "https://www.sookmyung.ac.kr/kr/etc/search.do"
params = {"qt": query}
headers = {
"referer": "https://www.sookmyung.ac.kr/kr/etc/search.do",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
try:
response = requests.get(url, params=params, headers=headers)
response.raise_for_status()
soup = bs(response.text, "lxml")
result_span = soup.find('span', class_="result")
if result_span:
result_text = result_span.text.strip()
print("검색 결과:", result_text)
result_cnt = re.findall(r'\d+', result_text)
if int(result_cnt[0]) > 0:
email_subject = f"검색 결과 알림: {query}"
email_body = f"'{query}'에 대한 검색 결과가 {result_text} 있습니다."
send_email(email_subject, email_body)
else:
print("검색 결과를 찾을 수 없습니다.")
except requests.RequestException as e:
print(f"요청 중 오류 발생: {e}")
except Exception as e:
print(f"예상치 못한 오류 발생: {e}")
def check_email_env_vars():
required_vars = ["SENDER_EMAIL", "RECEIVER_EMAIL", "EMAIL_PASSWORD", "SMTP_SERVER", "SMTP_PORT"]
for var in required_vars:
if not os.environ.get(var):
print(f"오류: 환경 변수 {var}가 설정되지 않았습니다.")
return False
return True
if __name__ == "__main__":
if not check_email_env_vars():
print("이메일 전송에 필요한 환경 변수를 설정해주세요.")
else:
search_sookmyung("2025 전과 모집 요강")
드디어 내게 메일이 왔다. 9시 정각에 전날 올라온 공지를 보고 내게 메일을 보내왔다.
