0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🌟Raspberry PiでSNSフォロワーカウンターシステムを作る【第3回:API動作確認編】

Last updated at Posted at 2025-07-22

📝 はじめに

こんにちは、piyovateです!

第2回までで使用機材の選定や仕様整理を行いました。
第3回となる今回は、SNS APIを使って実際にデータを取得し、コンソール上に出力するところまでをテストしました。

現在は Windows 11 上の開発用PCで動作を確認しており、Raspberry Pi 5 上での動作は次回以降に移行予定です。


⚡ 使用API

  • Qiita:Organizationメンバーの投稿から「いいね数」を集計
  • X (旧Twitter):ユーザーのフォロワー数を取得

💡 テスト環境の構築

1. Python環境の準備

必要なライブラリを一括インストール

pip install requests selenium webdriver-manager

2. WebDriverの準備(Qiita用)

Google Chrome と同期した ChromeDriver が webdriver-manager 経由で自動取得され、自動的に利用されます。


🔧 テスト用コードの概要と全文

ここでは、QiitaとXのAPIを使ってどのようにデータを取得し、表示するかを実際のコードとともに説明します。


✅ Qiita API: qiita_Organization.py

📘 解説

  • Qiitaの組織ページから、Seleniumを使って投稿者のユーザー名を抽出します。
  • 各ユーザーの投稿に対してAPI経由で「いいね数(likes_count)」を取得し、合計を算出しています。
  • API制限対策として、1秒ごとのインターバルを設けています。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
import requests
import time
import re

ORGANIZATION_NAME = "technosphere"  # Qiita組織名
QIITA_TOKEN = "YOUR_QIITA_TOKEN"  # Qiitaトークン

qiita_organization_url = f"https://qiita.com/organizations/{ORGANIZATION_NAME}"

def get_organization_members():
    service = Service(ChromeDriverManager().install())
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    driver = webdriver.Chrome(service=service, options=options)
    driver.get(qiita_organization_url)
    time.sleep(5)

    article_links = driver.find_elements(By.CSS_SELECTOR, "a[href*='/items/']")
    authors = set()
    for link in article_links:
        href = link.get_attribute('href')
        match = re.match(r"https://qiita.com/([^/]+)/items/", href)
        if match:
            authors.add(match.group(1))
    driver.quit()
    return authors

def get_likes(username):
    headers = {"Authorization": f"Bearer {QIITA_TOKEN}"}
    page = 1
    per_page = 100
    total_likes = 0
    while True:
        url = f"https://qiita.com/api/v2/users/{username}/items?page={page}&per_page={per_page}"
        response = requests.get(url, headers=headers)
        if response.status_code != 200:
            print(f"{username} さんのQiita APIエラー: {response.status_code}")
            print("詳細:", response.text)
            break
        items = response.json()
        if not isinstance(items, list) or not items:
            break
        for item in items:
            total_likes += item.get('likes_count', 0)
        page += 1
    return total_likes

members = get_organization_members()
total_like_count = 0
for member in members:
    likes = get_likes(member)
    print(f"{member} さんのQiita合計いいね数: {likes}")
    total_like_count += likes
    time.sleep(1)
print(f"Qiita合計いいね数: {total_like_count}")

✅ X API: x_count.py

📘 解説

  • 任意のX(旧Twitter)ユーザー名から、そのユーザーIDを取得します。
  • ユーザーIDを元に、公開プロフィール情報をAPI経由で取得します。
  • そこから「フォロワー数(followers_count)」を抽出して表示します。
import requests

USERNAME = "technosphere_co"  # 任意のXユーザー名
CONFIG = {
    "BEARER_TOKEN": "YOUR_BEARER_TOKEN",  # XのBearerトークンを入力
    "BASE_URL": "https://api.twitter.com/2",
    "HEADERS": lambda token: {
        "Authorization": f"Bearer {token}"
    }
}

def get_follower_count(username):
    token = CONFIG["BEARER_TOKEN"]
    headers = CONFIG["HEADERS"](token)
    user_url = f'{CONFIG["BASE_URL"]}/users/by/username/{username}'
    resp_user = requests.get(user_url, headers=headers)
    if resp_user.status_code != 200:
        print("ユーザー取得エラー:", resp_user.status_code, resp_user.text)
        return
    user_id = resp_user.json()["data"]["id"]
    detail_url = f'{CONFIG["BASE_URL"]}/users/{user_id}?user.fields=public_metrics'
    resp_detail = requests.get(detail_url, headers=headers)
    if resp_detail.status_code != 200:
        print("詳細情報取得エラー:", resp_detail.status_code, resp_detail.text)
        return
    data = resp_detail.json()["data"]
    followers = data["public_metrics"]["followers_count"]
    print(f"@{username} のXフォロワー数は {followers} 人です。")

get_follower_count(USERNAME)

🔍 実行結果

@technosphere_co のXフォロワー数は 8 人です。
koyama-technoさんのQiita合計いいね数: 2
PiyovateさんのQiita合計いいね数: 19
Qiita合計いいね数: 21

🧠 注意点

  • X APIは Bearer Token が必要です
  • Qiita APIはパーソナルアクセストークンが必要です
  • Seleniumを使う場合、Google ChromeとChromeDriverのバージョンが一致している必要があります

🖌️ 次回の予定

  • Raspberry Pi上でのAPIコード実行
  • PyQt6を用いた可視化用GUIの作成
  • バックエンドとの部分的な結合(取得値のリアルタイム表示)

次回もお楽しみに!


📝 補足:FacebookとInstagramについて

FacebookおよびInstagramのAPIについては現在キー取得中のため、
別途 番外編として解説予定です。

これらのSNSはAPIの制限やポリシーが比較的厳しく、ビジネスアカウントの登録や審査が必要になるケースもあるため、
タイミングを見て丁寧にご紹介します。


🔗 シリーズリンク

📚 シリーズ全記事はこちら:🌟 Raspberry PiでSNSフォロワーカウンターシステムを作る

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?