Python応用

Pythonと無料APIでコンテンツリサーチを自動化する方法【ステップバイステップ】

「毎週リサーチに何時間も使っているのに、全然コンテンツ制作が追いつかない…」

そんな悩みを持っている方、けっこう多いんじゃないでしょうか。競合ブログをチェックして、RedditやXをスキャンして、検索結果をスプレッドシートにコピペして…気づけば半日終わってた、なんて経験ありませんか?😓

実は、PythonとAPIを組み合わせるだけで、このリサーチ作業の大半を自動化できます。この記事では、その仕組みをステップごとに丁寧に解説していきます!

🔍 全体の流れをざっくり把握しよう

Python automation research
Python automation research / Photo by Diego Martinez via Pexels

まずはシステムの全体像を頭に入れておきましょう。イメージとしては、こんな3ステップです。

  • APIでキーワードや検索トレンドを取得(SerpAPI・NewsAPI など)
  • Pythonで内容を解析・フィルタリング
  • 整理されたデータをCSVや通知として出力

一度作ってしまえば、あとは実行するだけ。手作業10時間 → 30分以下も夢じゃありません 🚀

🛠 使うライブラリと準備

まず必要なライブラリをインストールしておきましょう。ターミナルで以下を実行してください。

pip install requests pandas python-dotenv

各ライブラリの役割はこんな感じです。

  • requests:APIへのHTTPリクエストを送る
  • pandas:取得したデータをCSVに整形・保存する
  • python-dotenv:APIキーを安全に管理する

APIキーは .env ファイルで管理するのが鉄則です。コードに直書きは絶対やめましょう。

# .env ファイルの中身
NEWS_API_KEY=あなたのAPIキーをここに
SERP_API_KEY=あなたのAPIキーをここに

📰 ステップ1:NewsAPIでトレンドニュースを取得する

NewsAPIは無料プランでも月100リクエスト使えます。登録後にAPIキーを取得して、さっそく使ってみましょう。

import requests
import os
from dotenv import load_dotenv

load_dotenv()

NEWS_API_KEY = os.getenv("NEWS_API_KEY")

def get_trending_news(keyword, language="jp", page_size=10):
    url = "https://newsapi.org/v2/everything"
    params = {
        "q": keyword,
        "language": language,
        "sortBy": "publishedAt",
        "pageSize": page_size,
        "apiKey": NEWS_API_KEY
    }
    response = requests.get(url, params=params)
    data = response.json()

    if data["status"] != "ok":
        print("エラー:", data.get("message"))
        return []

    articles = []
    for article in data["articles"]:
        articles.append({
            "title": article["title"],
            "description": article["description"],
            "url": article["url"],
            "publishedAt": article["publishedAt"]
        })
    return articles

# 試してみよう
results = get_trending_news("Python プログラミング")
for r in results:
    print(r["title"])

これだけで最新ニュースの一覧が取得できます。keyword を変えれば、どんなテーマでも調べられますよ。

🔎 ステップ2:SerpAPIで検索結果を取得する

SerpAPIはGoogleの検索結果をJSON形式で取得できるAPIです。無料プランで月100クエリ使えます。

import requests
import os
from dotenv import load_dotenv

load_dotenv()

SERP_API_KEY = os.getenv("SERP_API_KEY")

def get_search_results(query, num=10):
    url = "https://serpapi.com/search"
    params = {
        "q": query,
        "hl": "ja",
        "gl": "jp",
        "num": num,
        "api_key": SERP_API_KEY
    }
    response = requests.get(url, params=params)
    data = response.json()

    results = []
    for item in data.get("organic_results", []):
        results.append({
            "title": item.get("title"),
            "link": item.get("link"),
            "snippet": item.get("snippet")
        })
    return results

# 使い方
results = get_search_results("Python 自動化 初心者")
for r in results:
    print(r["title"])
    print(r["snippet"])
    print("---")

検索上位に来ているページのタイトルとスニペットを自動収集できます。競合コンテンツ分析に超使えます。

📊 ステップ3:取得データをPandasでCSVに整理する

取得したデータをそのまま眺めるより、CSVにまとめてスプレッドシートで見るほうが断然便利です。

import pandas as pd
from datetime import datetime

def save_to_csv(news_data, search_data, keyword):
    # ニュースデータをDataFrameに変換
    news_df = pd.DataFrame(news_data)
    news_df["source"] = "NewsAPI"
    news_df["keyword"] = keyword

    # 検索結果をDataFrameに変換
    search_df = pd.DataFrame(search_data)
    search_df["source"] = "SerpAPI"
    search_df["keyword"] = keyword

    # 両方を結合
    combined = pd.concat([news_df, search_df], ignore_index=True)

    # ファイル名に日付を付ける
    today = datetime.now().strftime("%Y%m%d")
    filename = f"research_{keyword}_{today}.csv"

    combined.to_csv(filename, index=False, encoding="utf-8-sig")
    print(f"✅ 保存完了: {filename}")
    return filename

# 実行
keyword = "Python 自動化"
news = get_trending_news(keyword)
search = get_search_results(keyword)
save_to_csv(news, search, keyword)

utf-8-sig を指定しているのがポイント。Excelで開いたときに文字化けしなくなります👍

⚙️ ステップ4:全部まとめて「ワンクリック実行」にする

ここまでの関数を1つのスクリプトにまとめましょう。キーワードリストを渡すだけで、全部自動でリサーチしてCSV出力してくれます。

import requests
import pandas as pd
import os
from dotenv import load_dotenv
from datetime import datetime

load_dotenv()

NEWS_API_KEY = os.getenv("NEWS_API_KEY")
SERP_API_KEY = os.getenv("SERP_API_KEY")

# --- 関数定義 ---

def get_trending_news(keyword, page_size=5):
    url = "https://newsapi.org/v2/everything"
    params = {
        "q": keyword,
        "language": "jp",
        "sortBy": "publishedAt",
        "pageSize": page_size,
        "apiKey": NEWS_API_KEY
    }
    res = requests.get(url, params=params).json()
    articles = []
    for a in res.get("articles", []):
        articles.append({
            "type": "news",
            "keyword": keyword,
            "title": a.get("title"),
            "description": a.get("description"),
            "url": a.get("url"),
            "date": a.get("publishedAt")
        })
    return articles

def get_search_results(keyword, num=5):
    url = "https://serpapi.com/search"
    params = {
        "q": keyword,
        "hl": "ja",
        "gl": "jp",
        "num": num,
        "api_key": SERP_API_KEY
    }
    res = requests.get(url, params=params).json()
    results = []
    for item in res.get("organic_results", []):
        results.append({
            "type": "search",
            "keyword": keyword,
            "title": item.get("title"),
            "description": item.get("snippet"),
            "url": item.get("link"),
            "date": ""
        })
    return results

def run_research(keywords):
    all_data = []
    for kw in keywords:
        print(f"🔍 リサーチ中: {kw}")
        all_data.extend(get_trending_news(kw))
        all_data.extend(get_search_results(kw))

    df = pd.DataFrame(all_data)
    today = datetime.now().strftime("%Y%m%d_%H%M")
    filename = f"content_research_{today}.csv"
    df.to_csv(filename, index=False, encoding="utf-8-sig")
    print(f"\n✅ 完了!{len(df)}件のデータを保存しました → {filename}")

# --- 実行 ---
if __name__ == "__main__":
    keywords = [
        "Python 自動化",
        "プログラミング 副業",
        "AI ツール 2024"
    ]
    run_research(keywords)

このスクリプトを実行すると、指定したすべてのキーワードのニュース+検索結果をまとめたCSVファイルが一発で生成されます。

📬 おまけ:結果をSlackに自動通知する

CSVを毎回開くのが面倒な方には、Slack通知もおすすめです。Incoming Webhookを使えば、リサーチ結果のサマリーをSlackに送れます。

import requests
import os
from dotenv import load_dotenv

load_dotenv()

SLACK_WEBHOOK_URL = os.getenv("SLACK_WEBHOOK_URL")

def notify_slack(data_list, keyword):
    # 上位3件だけ通知する
    top3 = data_list[:3]
    message = f"*📊 [{keyword}] リサーチ結果(上位3件)*\n"
    for i, item in enumerate(top3, 1):
        message += f"\n{i}. {item['title']}\n{item['url']}\n"

    payload = {"text": message}
    res = requests.post(SLACK_WEBHOOK_URL, json=payload)
    if res.status_code == 200:
        print("✅ Slack通知送信完了")
    else:
        print("❌ 送信失敗:", res.status_code)

.envSLACK_WEBHOOK_URL を追加すれば使えます。朝イチでスクリプトを実行して、Slackで確認するルーティンにするのが最高です ☕

🗓 スケジュール実行でさらに全自動化

毎朝自動でリサーチを実行したい場合は、cronジョブ(Mac/Linux)タスクスケジューラ(Windows) に登録しましょう。

# Mac/Linux の crontab 設定例
# 毎朝8時にスクリプトを実行
0 8 * * * /usr/bin/python3 /Users/yourname/research/run_research.py

crontabの編集は crontab -e コマンドで開けます。これを設定しておけば、起きたらSlackにリサーチ結果が届いてる、という夢の環境が完成します。🎉

💡 よくある質問・つまずきポイント

Q. APIキーはどこで取得できますか?

NewsAPIは newsapi.org、SerpAPIは serpapi.com でそれぞれ無料登録できます。どちらもクレジットカード不要のプランがあるので安心です。

Q. 無料プランの制限は?

NewsAPIは無料プランで月100リクエスト、SerpAPIは月100クエリまで。個人のコンテンツリサーチ用途なら十分使えます。キーワード数を絞ってリクエスト数を節約しましょう。

Q. `requests.exceptions.ConnectionError` が出た

ネットワーク接続かAPIのURLを確認してください。また .env ファイルが正しい場所にあるか、APIキーが正確に貼り付けられているかも確認しましょう。

Q. Windowsで文字化けする

CSVの保存時に encoding="utf-8-sig" を指定しているので、ExcelやGoogleスプレッドシートで開けば文字化けしないはずです。メモ帳で開く場合は文字コードを「UTF-8 BOM付き」に変えてください。

🎯 まとめ:一度作れば毎週時短できる

今回作ったシステムを整理するとこうなります。

  • ✅ NewsAPIでキーワードに関連する最新ニュースを自動収集
  • ✅ SerpAPIでGoogle検索の上位記事を自動取得
  • ✅ PandasでCSVに整理・保存
  • ✅ Slack通知でどこでも確認できる
  • ✅ cronで毎朝自動実行

最初のセットアップに1〜2時間かかるかもしれませんが、一度作ってしまえば毎週何時間もの作業が自動化されます。コスパ最強のツールです。

「Pythonって実際に何に使えるの?」という疑問の答えが、まさにこういう日常の面倒な作業を自動化することにあります。ぜひ試してみてください!💪

📡 Arduinoをもっと深く学ぼう!

Arduino・ラズパイ・ロボットプログラミングを体系的に学びたい方へ。おすすめのUdemyコースや電子部品もまとめています。

Arduinoロボット入門のおすすめコース・部品を見る →

📚 関連商品・おすすめ書籍

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

もしも

スッキリわかるPython入門 第2版 (スッキリわかる入門シリーズ)

初心者に定番のPython入門書

Amazonで見る
Arduinoをはじめよう 第4版 (Make: PROJECTS)

もしも

Arduinoをはじめよう 第4版 (Make: PROJECTS)

Arduino公式推薦の定番入門書

Amazonで見る
徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

もしも

徹底攻略! 電子工作&プログラミング Arduinoで学ぶ電子工作完全ガイド

電子工作とプログラミングを同時に学べる

Amazonで見る

※本記事にはアフィリエイトリンクが含まれます。

ABOUT ME
やまちゃん
これまで学生と社会人を合わせて5000人以上にプログラミング学習を指導。 ゼロからイチをわかりやすく解説する専門家として活動しており、本業ではArduinoを用いたIoT開発とロボットプログラミングが専門。 Pythonを用いたアプリ開発、ウェブアプリケーションの開発で業務の効率化をサポートしています。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です