「毎週リサーチに何時間も使っているのに、全然コンテンツ制作が追いつかない…」
そんな悩みを持っている方、けっこう多いんじゃないでしょうか。競合ブログをチェックして、RedditやXをスキャンして、検索結果をスプレッドシートにコピペして…気づけば半日終わってた、なんて経験ありませんか?😓
実は、PythonとAPIを組み合わせるだけで、このリサーチ作業の大半を自動化できます。この記事では、その仕組みをステップごとに丁寧に解説していきます!
🔍 全体の流れをざっくり把握しよう

まずはシステムの全体像を頭に入れておきましょう。イメージとしては、こんな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)
.env に SLACK_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ロボット入門のおすすめコース・部品を見る →





