📝 はじめに
こんにちは!
前回は、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
🔔 次回予告
次回は、フォロワーが増えたら音が鳴る機能を追加予定!
数字の変化を体感できる、ちょっとワクワクする仕掛けを入れてみたいと思います。
🙏 さいごに
いいね・フォローストックもよろしくお願いします!
「うちもこういう仕様変更、よくある…」と共感した方はぜひストックしてもらえると嬉しいです。
📚 全記事まとめはこちら → シリーズまとめリンク
それでは、また次回の記事でお会いしましょう✨