0
3

PythonとSeleniumを使って天気予報をSlack通知するアプリの作成方法

Last updated at Posted at 2024-08-07

はじめに

天気予報を定期的に取得し、自動でSlackに通知するアプリをPythonとSeleniumで作成する方法を解説します。

この記事では、天気予報の取得、Slack通知の設定、そして全体の自動化プロセスを紹介します。

1. 必要なライブラリのインストール

以下のライブラリを使用します。

  • selenium: Webブラウザの操作を自動化するため。
  • slack_sdk: Slackへのメッセージ送信のため。
  • webdriver_manager: Selenium WebDriverの管理のため。

ライブラリは以下のコマンドでインストールできます。

pip install selenium slack_sdk webdriver_manager

2. WebDriverの設定

Seleniumを使用するには、ブラウザドライバが必要です。ここでは、Chromeドライバを使用します。

WebDriverのセットアップ

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

# WebDriverの設定
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

3. 天気予報の取得

天気予報を取得するためには、天気予報が表示されているWebページにアクセスし、必要な情報を抽出します。ここでは、例としてWeather.comを使用します。

天気予報取得のコード例

from selenium.webdriver.common.by import By

# 天気予報ページにアクセス
driver.get('https://weather.com')

# 地域を検索して天気情報を取得
search_box = driver.find_element(By.ID, 'LocationSearch_input')
search_box.send_keys('Your City')  # 地域名を入力
search_box.submit()

# 少し待ってから天気予報情報を取得
driver.implicitly_wait(10)

# 天気予報の情報を取得
temperature = driver.find_element(By.CSS_SELECTOR, 'span.CurrentConditions--tempValue--3a50n').text
condition = driver.find_element(By.CSS_SELECTOR, 'div.CurrentConditions--phraseValue--2xXSr').text

print(f'Temperature: {temperature}')
print(f'Condition: {condition}')

4. Slackへの通知

Slackに通知を送信するためには、SlackのIncoming Webhookを利用します。

まず、SlackのアプリでIncoming Webhookを作成し、Webhook URLを取得します。

Slack通知のコード例

from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

# Slack Webhook URL
slack_webhook_url = 'https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX'
client = WebClient(token=slack_webhook_url)

def send_slack_message(message):
    try:
        response = client.chat_postMessage(
            channel='#general',  # 通知を送るチャンネル
            text=message
        )
        assert response['message']['text'] == message
    except SlackApiError as e:
        print(f"Error sending message: {e.response['error']}")

# 天気情報をSlackに送信
weather_message = f"Today's weather:\nTemperature: {temperature}\nCondition: {condition}"
send_slack_message(weather_message)

5. 全体の統合

最後に、天気予報の取得とSlack通知を統合し、全体のスクリプトを作成します。

完全なコード例

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

# WebDriverの設定
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# Slack Webhook URL
slack_webhook_url = 'https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX'
client = WebClient(token=slack_webhook_url)

def send_slack_message(message):
    try:
        response = client.chat_postMessage(
            channel='#general',
            text=message
        )
        assert response['message']['text'] == message
    except SlackApiError as e:
        print(f"Error sending message: {e.response['error']}")

def get_weather():
    # 天気予報ページにアクセス
    driver.get('https://weather.com')
    # 地域を検索して天気情報を取得
    search_box = driver.find_element(By.ID, 'LocationSearch_input')
    search_box.send_keys('Your City')  # 地域名を入力
    search_box.submit()
    # 少し待ってから天気予報情報を取得
    driver.implicitly_wait(10)
    # 天気予報の情報を取得
    temperature = driver.find_element(By.CSS_SELECTOR, 'span.CurrentConditions--tempValue--3a50n').text
    condition = driver.find_element(By.CSS_SELECTOR, 'div.CurrentConditions--phraseValue--2xXSr').text
    return temperature, condition

# 天気情報を取得
temperature, condition = get_weather()

# 天気情報をSlackに送信
weather_message = f"Today's weather:\nTemperature: {temperature}\nCondition: {condition}"
send_slack_message(weather_message)

# WebDriverを終了
driver.quit()

6. スケジューリング

このスクリプトを定期的に実行するには、cron(Linux)やTask Scheduler(Windows)を使用することで自動化できます。

Linuxでのスケジューリング例(cron)

  1. スクリプトを保存し、例えばweather_notifier.pyという名前にします。
  2. crontab -eコマンドでcron設定を開きます。
  3. 次の行を追加して毎日午前8時に実行するように設定します。
0 8 * * * /usr/bin/python3 /path/to/weather_notifier.py

まとめ

PythonとSeleniumを使用して天気予報を取得し、Slackに通知する方法を紹介しました。

スクレイピングとAPIを利用することで、日々の天気情報を簡単に自動で確認できるようになります。

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3