🤖

Python + Gmail でヤマト運輸の荷物追跡を自動化する

に公開

✅ はじめに

  • 荷物のステータスが更新されたらすぐ知りたい!
  • Web画面を毎回開くのが面倒なので、Pythonで自動化してみた

🔧 必要なもの

  • Python 3.x
  • ライブラリ: httpx, beautifulsoup4, smtplib, email
  • Gmail アカウントとアプリパスワード(2段階認証を有効にする必要あり)

📦 ステップ1: 追跡情報の取得

import httpx
from bs4 import BeautifulSoup

def get_yamato_status(tracking_code):
    url = "https://toi.kuronekoyamato.co.jp/cgi-bin/tneko"
    headers = {"User-Agent": "Mozilla/5.0"}
    data = {"number01": tracking_code, "number00": 1}

    with httpx.Client(headers=headers) as client:
        response = client.post(url, data=data)
        soup = BeautifulSoup(response.text, "html.parser")
        status_div = soup.find("div", class_="data state")
        return status_div.text.strip() if status_div else "状態不明"

📧 ステップ2: Gmail で通知を送る

import smtplib
from email.mime.text import MIMEText

def send_gmail(subject, body, to_email, from_email, app_password):
    msg = MIMEText(body)
    msg["Subject"] = subject
    msg["From"] = from_email
    msg["To"] = to_email

    with smtplib.SMTP_SSL("smtp.gmail.com", 465) as smtp:
        smtp.login(from_email, app_password)
        smtp.send_message(msg)

🔁 ステップ3: 状態の変化を定期チェック

import time
from datetime import datetime

TRACKING_CODE = "your_tracking_number"
EMAIL = "your_gmail@gmail.com"
APP_PASSWORD = "your_app_password"
LAST_STATUS = None

while True:
    current_status = get_yamato_status(TRACKING_CODE)
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    print(f"[{timestamp}] [現在の状態] {current_status}")
    
    if current_status != LAST_STATUS:
        if LAST_STATUS is not None:
            send_gmail(
                subject="荷物のステータスが更新されました",
                body=f"{timestamp} に状態が「{current_status}」に変わりました。",
                to_email=EMAIL,
                from_email=EMAIL,
                app_password=APP_PASSWORD
            )
        LAST_STATUS = current_status
    time.sleep(300)  # 5分間隔でチェック

🔒 Gmail アプリパスワードの取得方法(簡潔に)

  • Googleアカウント > セキュリティ にアクセス
  • 「2段階認証プロセス」を有効化
  • 「アプリ パスワード」から新規作成 → メール + Windowsなどを選択
  • 表示された16桁のパスワードを保存して使用

✅ おわりに

  • 状態が変わるとすぐ通知が来るので便利!
  • 改良案:LINE通知や複数荷物への対応 etc.
GitHubで編集を提案

Discussion