Python転職初心者向けエンジニアリングブログ

Pythonに魅了されたあなたへ。エンジニアリングの扉を開く転職初心者向けのブログへようこそ。このブログでは、Pythonの奥深さに迫りながら、エンジニアリングへの転職に役立つ情報を提供しています。未経験者から始めるPythonエンジニアリングの世界への一歩を踏み出すためのガイダンス、ベストプラクティス、そして成功事例など、初心者の方でもわかりやすいコンテンツをお届けします。

Pythonでニュースサイトから最新記事をスクレイピングし、自動ツイートする「ニュースツイートボット」の作り方

LYPプレミアム会員 python

あなたは、いつも最新のニュースをチェックしたいのに、何度もサイトにアクセスするのが面倒だと感じたことはありませんか?そんな時、Pythonを使ってニュースサイトから自動的に最新記事をスクレイピングして、ツイートしてくれる「ニュースツイートボット」を作ることができれば、もう心配はいりません。今回は、ニュースを自動で集めて、あなたのTwitterアカウントから最新情報を発信できる方法を、コード付きで詳しく解説します。

必要な準備

まず、ニュース記事を取得し、それをTwitterに投稿するために必要なライブラリをインストールしましょう。使うのは、ニュースサイトの情報をスクレイピングするためのBeautifulSouprequests、Twitter APIを操作するためのtweepyです。

pip install tweepy requests beautifulsoup4

そして、Twitter APIを使用するための準備も必要です。前回の記事で紹介した方法と同様に、TwitterのDeveloperアカウントを作成してAPIキーを取得してください。

ニュースサイトから記事をスクレイピングする

ニュースサイトの構造はサイトごとに異なりますが、一般的にはHTMLの中に記事タイトルやURLが含まれているので、それを抽出することができます。今回は、例として「Example News」というニュースサイトから最新記事のタイトルとURLをスクレイピングして、それをツイートするコードを書いていきます。

まずは、最新の記事を取得するためのコードです。

import requests
from bs4 import BeautifulSoup

# ニュースサイトから最新記事のタイトルとURLを取得する関数
def get_latest_news():
    url = 'https://www.example-news.com/latest'
    response = requests.get(url)

    # HTMLを解析
    soup = BeautifulSoup(response.text, 'html.parser')

    # 記事のタイトルとURLを取得(例: タグやクラスを変更する必要がある場合もあります)
    articles = soup.find_all('h2', class_='news-title')  # 仮のクラス名です
    news_list = []

    for article in articles:
        title = article.get_text().strip()
        link = article.find('a')['href']
        full_url = f"https://www.example-news.com{link}"
        news_list.append({'title': title, 'url': full_url})

    return news_list

このコードでは、まずrequestsを使ってニュースサイトにアクセスし、そのHTMLコンテンツを取得します。次に、BeautifulSoupを使ってHTMLを解析し、最新記事のタイトルとURLを抽出します。上記の例では、h2タグに記事のタイトルが含まれているとしてスクレイピングしていますが、実際にはニュースサイトのHTML構造に応じてタグやクラス名を調整する必要があります。

Twitterに自動投稿する

次に、取得したニュースをTwitterに自動投稿する機能を追加します。Twitter APIを使って自動ツイートを行う部分は、前回のツイートボットと同様にtweepyを使います。

import tweepy

# Twitter APIの認証情報
API_KEY = 'あなたのAPIキー'
API_SECRET = 'あなたのAPIシークレットキー'
ACCESS_TOKEN = 'あなたのアクセストークン'
ACCESS_TOKEN_SECRET = 'あなたのアクセストークンシークレット'

# 認証設定
auth = tweepy.OAuth1UserHandler(API_KEY, API_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)

# 最新ニュースをツイートする関数
def tweet_latest_news(news_list):
    for news in news_list:
        tweet_content = f"{news['title']} \n{news['url']}"
        try:
            api.update_status(status=tweet_content)
            print(f"ツイート成功: {tweet_content}")
        except tweepy.TweepError as e:
            print(f"エラーが発生しました: {e}")

このコードでは、前回と同様にTwitter APIの認証を行い、api.update_statusを使ってツイートを投稿します。ここで、ニュースリストの中から記事のタイトルとURLを一つずつ取り出し、ツイート文として投稿します。

メインの処理

最後に、ニュース記事を取得し、それをツイートする処理を実行します。

if __name__ == "__main__":
    # 最新ニュースを取得
    latest_news = get_latest_news()

    # ニュースがあればツイート
    if latest_news:
        tweet_latest_news(latest_news)
    else:
        print("ニュースが見つかりませんでした。")

このメインの部分では、まずget_latest_news()を呼び出して最新記事のリストを取得し、それが空でなければtweet_latest_news()を実行してツイートします。

実行結果

では、実際にこのプログラムを実行してみましょう。ニュースサイトの最新記事がツイートされます。

ツイート成功: "Breaking News: 新しい発見が世界を変える! https://www.example-news.com/articles/123"
ツイート成功: "Technology Update: 最新のスマートフォンがついに発売 https://www.example-news.com/articles/124"

これで、ニュースサイトの最新記事を自動的にスクレイピングし、それをあなたのTwitterアカウントでツイートすることができました!いつでも最新情報をキャッチして、自動で共有できる便利なツールですね。

カスタマイズのヒント

このニュースツイートボットをさらに便利にするためのカスタマイズも考えてみましょう。

  • 複数のニュースサイトを統合: 一つのサイトだけでなく、複数のニュースサイトをスクレイピングして、一つのツイートボットに統合することで、より多くの情報をリアルタイムに発信できます。

  • フィルタリング機能: 特定のキーワードに基づいてニュースをフィルタリングすることで、自分の興味に合ったニュースだけをツイートするようにすることもできます。

  • 定期実行: このボットを一定間隔で実行するように設定することも可能です。例えば、cronscheduleライブラリを使って、毎日や毎時間ごとに最新ニュースをツイートさせることができます。

次回のテーマ

次回は、Pythonを使って天気予報データを取得し、自動的にツイートする「天気ツイートボット」の作り方を紹介します。天気の変動に応じて、日々のツイート内容が変わるダイナミックなボットを作成しましょう!興味がある方は、ぜひTwitterでフォローしてください!