1
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フォロワーカウンターシステムを作る【第9回:前日比・任意比較日数の実装と設定ファイル化】

1
Last updated at Posted at 2025-09-01

📝 はじめに

こんにちは!
前回は、SNSフォロワー数を一定周期で自動更新できるようにアップデートしました。

今回は「フォロワー数の前日比表示」に加え、
比較日数を任意で切り替えられるようにする機能」も追加しました!
実装の流れやポイント、現場でのやりとりも含めてご紹介します。


🎯 今回の概要

  • 各SNSのフォロワー数に「前日比」を表示
  • 社長からの「任意の日付で比較したい!」というリクエストに対応
  • 比較日数・データ保存先パスを設定ファイル(JSON)で管理できるように仕様変更

🔗 GitHubでコードを公開中

セットアップ手順やコード全体は以下のリポジトリにて公開しています👇
🔗 GitHub - SystermDevelopment/follower-counter


🛠️ 前日比の実装

まずは基本機能として「前日比」を実装しました。

■ やりたいこと

  • 各SNSのフォロワー数を日付ごと・SNSごとにJSON保存
  • 今日と昨日の値を比較し、「前日比」を計算・表示

■ 保存データの例

{
  "2024-07-16": {"Instagram": 51, "Qiita": 41, "X": 6, "Facebook": 160},
  "2024-07-17": {"Instagram": 54, "Qiita": 42, "X": 8, "Facebook": 167}
}

■ 前日比計算の流れ

  • 今日・昨日の日付を計算(datetime + timedelta
  • JSONファイルから両方の値を取得
  • 差分を計算し、UIに「前日比: +3」などと表示

■ コード例

def show_follower_diff(self, sns_name, today_count):
    from datetime import datetime, timedelta
    today = datetime.now().date()
    yesterday = today - timedelta(days=1)
    yesterday_str = yesterday.strftime("%Y-%m-%d")

    try:
        with open(self.daily_json, "r") as f:
            data = json.load(f)
        yesterday_count = data.get(yesterday_str, {}).get(sns_name, None)
    except Exception:
        yesterday_count = None

    if yesterday_count is None:
        return "前日データなし"
    try:
        diff = int(today_count) - int(yesterday_count)
        sign = "+" if diff > 0 else ""
        return f"{sign}{diff}"
    except Exception:
        return "計算エラー"

💡 社長から「比較日数を任意にしたい」要望が!

前日比機能を社内で使い始めたところ、
「前日だけじゃなくて、“1週間前比”とか“好きな日数前”でも比較したい!」
という要望が。実運用ならではですね。


🛠️ 設定ファイルによる仕様変更

要望を受けて、比較したい日数や保存パスをsettings.jsonで切り替えられるように改修しました!

■ 設定ファイル例(settings/settings.json

{
  "compare_days_ago": 7,
  "daily_json": "./data/daily_followers.json"
}
  • compare_days_agoを1にすれば前日比、7なら1週間前比に!

■ 設定値の反映例

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.settings = self.load_settings()
        self.daily_json = self.settings.get("daily_json", "./data/daily_followers.json")
        self.compare_days_ago = self.settings.get("compare_days_ago", 1)
        # ...残りの初期化処理...

    def load_settings(self):
        try:
            with open("./settings/settings.json", "r") as f:
                return json.load(f)
        except Exception:
            return {
                "compare_days_ago": 1,
                "daily_json": "./data/daily_followers.json"
            }

■ 任意日数前との比較に変更

def show_follower_diff(self, sns_name, today_count):
    from datetime import datetime, timedelta
    today = datetime.now().date()
    compare_date = today - timedelta(days=self.compare_days_ago)
    compare_date_str = compare_date.strftime("%Y-%m-%d")

    try:
        with open(self.daily_json, "r") as f:
            data = json.load(f)
        compare_count = data.get(compare_date_str, {}).get(sns_name, None)
    except (FileNotFoundError, json.JSONDecodeError):
        compare_count = None

    if compare_count is None:
        return f"{compare_date_str}データなし"
    try:
        diff = int(today_count) - int(compare_count)
        sign = "+" if diff > 0 else ""
        return f"{sign}{diff}"
    except Exception:
        return "計算エラー"

■ UIへの反映

def update_label(self, sns_name, new_value):
    # ...既存処理...
    diff_str = self.show_follower_diff(sns_name, new_value)
    diff_label.setText(f"{self.compare_days_ago}日前比: {diff_str}")

✅ これで「好きな日数前との比較」が即できる!

  • 設定ファイルを書き換えるだけで、前日比・1週間前比・10日前比…何でも対応可能
  • 急な現場ニーズにもコード修正なしで対応OK

🔔 次回予告

次回は、フォロワーが増えたら音が鳴る機能を追加予定!
数字の変化を体感できる、ちょっとワクワクする仕掛けを入れてみたいと思います。


🙏 さいごに

いいね・フォローストックもよろしくお願いします!
「うちもこういう仕様変更、よくある…」と共感した方はぜひストックしてもらえると嬉しいです。


📚 全記事まとめはこちら → シリーズまとめリンク


それでは、また次回の記事でお会いしましょう✨

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