10年前のニュースを送ろう

NewsAPIを通して、Outlookに10年前の今日起こった出来事を通知してくれるプログラムをつくった。
参考資料→インターネットサイト、ChatGPT、ふりがなプログラミングpython(インプレス)

ソースコード


  1. import smtplib
  2. from email.mime.text import MIMEText
  3. from email.mime.multipart import MIMEMultipart
  4. from datetime import datetime, timedelta
  5. import requests
  6. def get_historical_date():
  7.     # 今日から10年前の日付を取得
  8.     ten_years_ago = datetime.now() - timedelta(days=365*10)
  9.     return ten_years_ago.strftime('%Y-%m-%d')
  10. def get_historical_event():
  11.     # NewsAPIを使用して10年前のニュースを取得
  12.     api_key = "-------------"
  13.     date = get_historical_date()
  14.     url = f"https://newsapi.org/v2/everything?q=history&from={date}&to={date}&sortBy=popularity&apiKey={api_key}"
  15.     try:
  16.         response = requests.get(url)
  17.         response.raise_for_status()
  18.         data = response.json()
  19.         # ニュースがある場合、最初の記事を出す
  20.         if data["articles"]:
  21.             article = data["articles"][0]
  22.             title = article["title"]
  23.             description = article["description"] or "No description available."
  24.             url = article["url"]
  25.             return f"Title: {title}\nDescription: {description}\nURL: {url}"
  26.         else:
  27.             return "No news found for this date."
  28.     except Exception as e:
  29.         return f"Error fetching news: {e}"
  30. def send_email(event):
  31.     # メール情報を設定
  32.     sender_email = "r202402050fm@jindai.jp"
  33.     receiver_email = "r202402050fm@jindai.jp"
  34.     password = "----------"
  35.     
  36.     # メールの内容を作成
  37.     subject = f"10年前の今日: {get_historical_date()}"
  38.     body = f"こんにちは!\n\n10年前の今日({get_historical_date()})に起こった出来事:\n\n{event}"
  39.     
  40.     message = MIMEMultipart()
  41.     message["From"] = sender_email
  42.     message["To"] = receiver_email
  43.     message["Subject"] = subject
  44.     message.attach(MIMEText(body, "plain"))
  45.     
  46.     try:
  47.         
  48.         with smtplib.SMTP("smtp-mail.outlook.com", 587) as server:
  49.             server.starttls() # 暗号化
  50.             server.login(sender_email, password)
  51.             server.sendmail(sender_email, receiver_email, message.as_string())
  52.             print("メール送信完了!")
  53.     except Exception as e:
  54.         print(f"メール送信に失敗しました: {e}")
  55. if __name__ == "__main__":
  56.     event = get_historical_event() # ニュース取得
  57.     send_email(event)