ブログに戻ります

TikTokフォロワーの成長をプロフィールスナップショットで追跡する

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

03-Sep-2026

TL;DR:

  • TikTokのフォロワー数の成長追跡はコレクションが始まったときに開始されます。 プロファイルアクターは現在の公開カウントを返し、歴史的シリーズではありません。
  • 各観察にはコレクションステータスが必要です。 失敗したコレクションと変更のないフォロワー数は異なる結果です。
  • アカウントのアイデンティティはハンドルの変更に耐えるべきです。 account_idsec_uid、および観察されたunique_idを一緒に保存します。
  • 成長は比較可能なスナップショットの差です。 同じアカウントの連続した有効カウントを引き算し、両方のタイムスタンプを保持します。
  • フォロワーの成長はその原因を特定しません。 変化は、別の証拠なしに1つのビデオまたはキャンペーンに帰属することはできません。
  • 無料で開始。 新しいScrapelessアカウントには、Scrapeless Dashboardを通じての無料クレジットが含まれます。

Introduction: プロファイルカウントは2回目の観察後に有用になる

公開フォロワー数はスナップショットです。同じアカウントが再度収集され、2つの有効な観察結果が比較されることで成長記録になります。

このチュートリアルでは、Scrapelessプロファイルアクター、Python、およびSQLiteを用いて小規模なTikTokフォロワー成長追跡パイプラインを構築します。アカウント識別子を保持し、成功したコレクション状態と失敗したコレクション状態を別々に保存し、連続した有効なスナップショットから変更を計算し、クリエイター成長ダッシュボードのための行を生成します。

基礎となるプロファイルフィールドとアイデンティティキーは、TikTokプロファイルスクレイパーチュートリアル で説明されています。

Pipeline at a Glance

Stage Action Durable output
定義 追跡するアカウントを提供する アカウント名簿
収集 各現在の公開プロファイルをリクエストする 生JSONまたはエラーレコード
正規化 アイデンティティと統計を抽出する プロファイルスナップショット行
比較 連続した成功したスナップショットを結合する フォロワー変動行
報告 レベルと変動をプロットする 成長ダッシュボード入力

このパイプラインは、収集を開始した日から歴史を作成します。最初に保存された観察の前の日付からフォロワー数を再構築することはありません。

Prerequisites

  • Scrapeless DashboardからのScrapelessアカウントとAPIトークン
  • 公共のTikTokユーザー名のユーザー管理リスト
  • 報告ニーズに適したコレクションスケジュール
  • 以下のAPIブロック用のSCRAPELESS_API_KEYにライブトークン

完全な例には前提条件のギャップがあります。なぜなら、読者がライブの資格情報とアカウント名簿を提供しなければならないからです。この記事は資格情報を埋め込んだり、偽のプロファイル応答を示したりしていません。

Stage 1: アカウント名簿を定義する

名簿には安定した内部キー、現在のユーザー名、トラッキングのビジネス理由、記録がアクティブであるかどうかが含まれているべきです。ユーザー名は便利なリクエスト入力ですが、唯一のデータベースキーにはなるべきではありません。

scraper.tiktok.user.detailアクターは、先頭に@なしでunique_idを受け入れます。その応答には、account_idunique_idsec_uid、公開プロファイルフィールド、アカウントフラグ、およびフォロワー、フォロー、友達、いいね、ビデオ、およびいいねされたビデオのカウントを含むstatisticsオブジェクトが含まれる可能性があります。

数値に見えるアカウントIDは文字列として保持します。後でハンドルが変更されても、新しい履歴シリーズが静かに作成されないように、3つの識別子すべてを保存します。

Stage 2: タイムスタンプ付きプロファイルスナップショットをキャプチャする

各コレクション試行にはアプリケーションタイムスタンプとステータスが必要です。成功した行は返された識別子と統計を保存します。失敗した試行では、アカウントキー、試行時間、および不在のカウントをゼロとしてコピーせずに簡潔なエラーステートを保存します。

Pythonのdatetimeドキュメントでは、タイムゾーンを考慮したタイムスタンプを説明しています。ストレージでは1つのタイムゾーン標準を使用し、表示タイムゾーンは報告レイヤーでのみ適用します。

TikTokの公式ユーザー情報ドキュメントも、ユーザーフィールドをアカウント履歴フィードではなく、現在の応答として扱います。したがって、Scrapelessパイプラインは独自の観察履歴を構築します。

Scrapelessでスクレイピングを開始

Scrapelessを使用してウェブスクレイピングと自動化ワークフローを強化しましょう!
今日サインアップして**$5の無料クレジット**を手に入れましょう — クレジットカードは不要

今すぐScrapeless Dashboardで無料クレジットを請求してください。

Stage 3: 成功とコレクションギャップを別々に保存する

SQLiteは、コンパクトなアペンド専用スナップショットテーブルをサポートしています。 SQLiteテーブル制約のドキュメントには、重複観測を防ぐために使用される複合キーが説明されています。

注: 以下のコードは、SCRAPELESS_API_KEYにライブのScrapeless APIトークンが必要で、TIKTOK_USERNAMESにカンマ区切りの公開ユーザー名が必要です。

python Copy
import json
import os
import sqlite3
from datetime import datetime, timezone
from urllib.error import HTTPError
from urllib.request import Request, urlopen

ENDPOINT = "https://api.scrapeless.com/api/v1/scraper/request"
TOKEN = os.environ["SCRAPELESS_API_KEY"]
USERNAMES = [v.strip().lstrip("@") for v in os.environ["TIKTOK_USERNAMES"].split(",") if v.strip()]


def get_profile(username):
    body = json.dumps({
        "actor": "scraper.tiktok.user.detail",
        "input": {"unique_id": username},
    }).encode()
    request = Request(
        ENDPOINT,
        data=body,
        headers={"x-api-token": TOKEN, "content-type": "application/json"},
        method="POST",
    )
    with urlopen(request, timeout=60) as response:
        return json.load(response)


database = sqlite3.connect("tiktok-profile-history.sqlite3")
database.execute("""
CREATE TABLE IF NOT EXISTS profile_snapshots (
    roster_username TEXT NOT NULL,
    collected_at TEXT NOT NULL,
    collection_status TEXT NOT NULL,
    account_id TEXT,
    unique_id TEXT,
    sec_uid TEXT,
    followers INTEGER,
    following INTEGER,
    likes INTEGER,
    videos INTEGER,
    error_code TEXT,
    raw_json TEXT,
    PRIMARY KEY (roster_username, collected_at)
)
""")

for username in USERNAMES:
    collected_at = datetime.now(timezone.utc).isoformat()
    try:
        profile = get_profile(username)
        statistics = profile.get("statistics") or {}
        database.execute(
            "INSERT INTO profile_snapshots VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
            (
                username, collected_at, "success",
                str(profile.get("account_id") or ""), profile.get("unique_id"),
                profile.get("sec_uid"), statistics.get("followers"),
                statistics.get("following"), statistics.get("likes"),
                statistics.get("videos"), None,
                json.dumps(profile, ensure_ascii=False),
            ),
        )
    except HTTPError as error:
        database.execute(
            "INSERT INTO profile_snapshots VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
            (username, collected_at, "failed", None, None, None, None, None, None, None,
             str(error.code), None),
        )

database.commit()
database.close()

collection_status列はギャップを可視化させます。これにより、利用できない観測をフォロワーの変化がないものとして扱う報告クエリを防ぎます。

ステージ4: 連続した有効なスナップショットからの成長の計算

フォロワーの成長は、同じaccount_idに対する後の有効カウントから前の有効カウントを引いたものです。開始および終了のタイムスタンプ、両方のソースカウント、差異、経過時間を保持します。

結合する際にユーザー名の前にアカウントIDを使用します。account_idが安定している間に観測されたユーザー名が変更される場合、1つのシリーズを保持し、各スナップショットに記録されたハンドルを保持します。アイデンティティフィールドが矛盾する場合、結合を停止し、行をレビューのために送信します。

SQLウィンドウ関数は、元の観測を上書きすることなく成功した行をペアにできます:

sql Copy
SELECT
  account_id,
  unique_id,
  collected_at,
  followers,
  followers - LAG(followers) OVER (
    PARTITION BY account_id ORDER BY collected_at
  ) AS follower_change
FROM profile_snapshots
WHERE collection_status = 'success' AND followers IS NOT NULL;

結果は保存された観測間の変化を測定します。報告がラベル付けされた正確な間隔で分離されている限り、これは日次成長率ではありません。

ステージ5: クリエーター成長ダッシュボードの構築

役立つダッシュボードは、成長の横にデータ品質を表示します:

  • 最新の有効フォロワー数とその収集時間
  • 前の有効スナップショット以来の変化
  • 明確にラベル付けされた報告間隔を通じた変化
  • 成功した観測数と収集ギャップ
  • 現在観測されているユーザー名と安定したアカウントID
  • 履歴の境界を定義する最初の保存された観測日

フォロワーレベルとフォロワー変化を別々にプロットします。レベルチャートは累積されたシリーズを示し、変化チャートは収集ギャップと突然の違いをレビューしやすくします。

プロファイルデータを責任を持って扱う

公開プロフィール統計は、個人データである可能性があります。アカウント名簿を声明された目的に制限し、生の応答アクセスを制限し、古いスナップショットを削除する時期を定義します。 NISTプライバシーフレームワークは、収集リスクを特定し管理するための構造を提供します。

プロフィール応答からオーディエンスの人口統計、フォロワーのアイデンティティ、または成長の原因を推測してはいけません。カウントの変化はキャンペーンや投稿と一致する可能性がありますが、一致は属性ではありません。

Scrapelessは、Scraping APIを通じてプロファイルアクターを公開しています。アカウント数とスケジュールを設定する前に、現在の料金ページを確認してください。

結論: 履歴は記録されたベースラインから始まる

TikTokフォロワー成長の追跡には、安定したアカウントID、タイムスタンプが付けられた有効カウント、および明示的な収集ギャップが必要です。ベースラインが存在するようになれば、連続するスナップショットは、利用できないプラットフォーム履歴を主張したり、変化を1つのコンテンツに割り当てたりすることなく、成長曲線をサポートできます。

プロファイル統計トラッカーの構築の準備はできましたか?

Scrapeless DiscordまたはTelegramコミュニティに参加して、スナップショットスキーマを比較してください。アカウント名簿が準備できたら、Scrapeless Dashboardでアカウントを作成しましょう。

FAQ

Q: TikTokフォロワートラッカーは歴史的なカウントを回復できますか?

このワークフローは、収集が開始される前のカウントを回復することはできません。最初の成功した観測は、後の比較のためのベースラインとなります。

Q: 成長がないことと収集の失敗の違いは何ですか?

成長がないことは、2つの有効なスナップショットが同じフォロワーカウントを含むことを意味します。収集の失敗は、後のカウントが不明で、違いを計算すべきではないことを意味します。

Q: フォロワー成長を1本のTikTokビデオに帰属させることはできますか?

プロフィールスナップショットからだけでは、フォロワーの成長を1本のビデオに帰属させることはできません。属性には、別の実験またはファーストパーティキャンペーンの証拠が必要です。

Q: ワークフローはフォロワーのアイデンティティや人口統計を公開しますか?

プロフィールアクターは、フォロワーリストやオーディエンス人口統計ではなく、公開アカウント統計を返します。

Q: プロキシやプロフィールページのパーサーを管理する必要がありますか?

アクターは、APIリクエストの背後でその収集表面を処理します。呼び出し元は、名簿、スケジュール、ストレージ、比較、報告を管理します。

Q: 公共のフォロワーカウントを収集することは合法ですか?
合法性は、管轄、目的、アクセス方法、データ、および適用される条件に依存します。収集を最小限に抑え、目的を文書化し、特定の使用について法律的アドバイスを取得してください。

Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。

最も人気のある記事

カタログ