Claudeで生成したSeleniumスクリプトをWordPress自動投稿に組み込む方法

スポンサーリンク

こんにちは、Heywaです。

以前の記事で、ClaudeとPythonを使ったWordPressの自動投稿パイプラインについて紹介しました。今回はその応用編として、「Seleniumを使ったWebスクレイピング」と「WordPressへの自動投稿」を連携させる方法について解説します。

この仕組みを作れば、「特定のサイトから最新情報を自動で取得し、AIで要約・整形して、自分のブログに記事として公開する」という、強力なキュレーションメディアの自動運用が可能になります。

スポンサーリンク

システム全体のアーキテクチャ

今回構築するシステムの全体像は以下の通りです。

  1. データ収集 (Selenium): JavaScriptで動的に描画されるサイトから、Seleniumを使って必要なテキストや画像URLをスクレイピングする。
  2. コンテンツ生成 (Claude API): 取得した生データをClaudeのAPIに渡し、ブログ記事用のHTMLフォーマットに要約・整形させる。
  3. 記事投稿 (WordPress REST API): 生成されたHTMLを、WordPressのREST API経由で投稿する。

これらすべてを1つのPythonスクリプト(または連携する複数のスクリプト)で完結させます。

ステップ1:Seleniumでのデータ収集

まずは、Claude Codeを使ってSeleniumのスクレイピング部分を作成します。例えば、あるニュースサイトの最新記事一覧を取得したい場合、以下のようなコードになります。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

def scrape_news():
    options = Options()
    options.add_argument('--headless')
    driver = webdriver.Chrome(options=options)
    
    news_data = []
    try:
        driver.get("https://example-news-site.com")
        # 記事要素の取得(サイトの構造に合わせて変更)
        articles = driver.find_elements(By.CLASS_NAME, 'article-item')
        for article in articles[:5]:  # 最新5件を取得
            title = article.find_element(By.TAG_NAME, 'h2').text
            summary = article.find_element(By.CLASS_NAME, 'summary').text
            news_data.append(f"タイトル: {title}\n概要: {summary}")
    finally:
        driver.quit()
        
    return "\n\n".join(news_data)

ステップ2:Claude APIによる記事化

次に、取得した news_data をClaude APIに渡して、ブログ記事の体裁に整えてもらいます。ここでプロンプトの工夫が活きてきます。

import anthropic
import os

def generate_blog_post(raw_data):
    client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
    
    prompt = f"""
    以下のニュースデータを元に、私のブログ(Heywaの雑記帳)用の記事を作成してください。
    
    【要件】
    - HTML形式で出力すること(h2, h3, p, ulタグなどを適切に使用)
    - 冒頭は「こんにちは、Heywaです。」から始めること
    - ニュースに対する私(40代、投資・副業好きの会社員)の簡単な所感を交えること
    
    【ニュースデータ】
    {raw_data}
    """
    
    response = client.messages.create(
        model="claude-3-5-sonnet-20241022",
        max_tokens=2000,
        messages=[{"role": "user", "content": prompt}]
    )
    return response.content[0].text

ステップ3:WordPressへの自動投稿

最後に、生成されたHTMLをWordPressに投稿します。これは以前紹介したREST APIを使う方法と全く同じです。

import requests
from requests.auth import HTTPBasicAuth

def post_to_wordpress(title, content):
    url = os.getenv("WP_URL") + "/wp-json/wp/v2/posts"
    auth = HTTPBasicAuth(os.getenv("WP_USER"), os.getenv("WP_APP_PASSWORD"))
    
    data = {
        "title": title,
        "content": content,
        "status": "draft", # まずは下書きで保存
        "categories": [13] # ソフト・ツールカテゴリ
    }
    
    response = requests.post(url, auth=auth, json=data)
    return response.status_code == 201

まとめ:パイプラインを繋ぐ快感

これら3つの関数を順番に呼び出すメイン処理を書けば、完全自動化パイプラインの完成です。

「データを集める」「考える(整形する)」「発信する」という一連のプロセスが、Pythonという接着剤によってシームレスに繋がる瞬間は、システム思考型の人間にとって最高の快感です。皆さんもぜひ、自分だけの自動化パイプラインを構築して、日々のAwesomeを増やしていきましょう。

タイトルとURLをコピーしました