📝 はじめに
こんにちは、前回まででSNSごとのフォロワー数をPyQt5のUIで表示するアプリを構築してきました。
今回は、アプリ起動時にのみ取得していたフォロワー数を、一定周期で自動更新する機能を追加したので、そのポイントと注意点をご紹介します。
🎯 今回の概要
今回の目的は以下のとおりです:
- 起動後もSNSのフォロワー数を一定周期で自動取得する
- SNSごとに取得タイミングを15分刻みでずらしてAPI制限に配慮
- 表示もリアルタイムに更新されるようにする
🔗 GitHubでコードを公開中
セットアップ手順やコード全体は以下のリポジトリにて公開しています👇
🔗 GitHub - SystermDevelopment/follower-counter
🛠️ 実装ポイント
🔸 SNS取得のタイミング制御
以下のように、QTimer
を使って毎分実行し、時刻の分に応じてSNSごとのAPIを呼び分けます。
def check_time_and_update(self):
minute = QTime.currentTime().minute() % 60
if minute == 0:
self.update_sns("Instagram", InstagramAPI.get_instagram_follower_count, "フォロワー数")
elif minute == 15:
self.update_sns("Qiita", QiitaAPI.get_qiita_likes_total, "合計いいね数")
elif minute == 30:
self.update_sns("X", xAPI.get_x_follower_count, "フォロワー数")
elif minute == 45:
self.update_sns("Facebook", FacebookAPI.get_facebook_follower_count, "フォロワー数")
🔸 SNS取得関数の共通化
処理の重複を避けるため、以下のように関数を汎用化しています:
def update_sns(self, name, api_func, label_type):
try:
value = api_func()
except:
value = "N/A"
self.update_label(name, value, label_type)
🔸 UIラベルの更新処理
表示の更新もシンプルにまとめました:
def update_label(self, sns_name, new_value, label_type):
for i in range(self.layout().count()):
frame = self.layout().itemAt(i).widget()
name_label = frame.findChildren(QLabel)[1]
count_label = frame.findChildren(QLabel)[2]
if name_label.text() == sns_name:
count_label.setText(f"{label_type}: {new_value}")
💡 注意点:X(旧Twitter)のAPI制限
無料プランのX APIでは、短時間に複数回リクエストを送ると429エラー(Too Many Requests)が返されることがあります(※仕様は変更される可能性あり)。
明確な上限は公開されていませんが、かなり時間を空けてアクセスしないと制限にかかる可能性が高いため注意が必要です。
そのため、アプリ側では例外処理を入れておき、取得失敗時もUIが落ちないようにしています。
🔜 次回の予定
次回は、SNSごとの更新ログ表示や、取得履歴の保存などに取り組んでみたいと思います。
- 最終取得時刻をUIに表示
- APIレスポンスのログ記録
- 取得失敗の通知アイコン表示 など
それでは、また次回の記事でお会いしましょう✨
フォロー・ストックよろしくお願いします!
🔗 シリーズリンク
📚 全記事まとめはこちら → シリーズまとめリンク