キャンペーンを開始する前に、ブリーフに記載された各IGアカウントを公開プロフィール情報と自動で照合できます。このチェックによって、ユーザー名の不一致、非公開ステータス、名前や自己紹介の変更、投稿数と想定範囲の不一致を検出できます。結果はマーケター向けのチェック表であり、クリエイターの適格性を自動で判断するものではありません。

問題:ブリーフより表計算シートの更新が遅れる
キャンペーンの一覧には、アカウント名、リンク、フォロワー数の目安、公開プロフィールに関する要件を記載できます。しかし、情報は簡単に食い違います。アカウントがユーザー名を変更したり、プロフィールが非公開になったりしても、ブリーフの数値は以前のままかもしれません。プロフィールを一つずつ手動で確認するのは簡単ですが、キャンペーンのたびにアカウント一覧全体で繰り返すと、確認の管理や再現が難しくなります。
有効な方法は、各行に明確なルールを設定し、確認時点で取得できる公開項目を取得して、元の値と実際の値を並べて記録することです。「一致」とは、その項目が特定のルールに合致することだけを意味します。オーディエンスとの適合性やコンテンツの質については、専門家が判断します。
取得するデータ
IG APIのエンドポイント一覧には、必須パラメーターusernameを指定するGET /v1/user/by/usernameエンドポイントが記載されています。確認したレスポンスでは、プロフィール情報はigオブジェクトに含まれています。そこにはユーザー名、氏名、自己紹介、非公開と認証のフラグ、投稿数、フォロワー数、フォロー数が示されています。これらの項目は、取得時点で利用可能なプロフィールのスナップショットを表します。
事前チェックには、アカウント名、公開設定、数値のしきい値を照合するための情報がそろっています。自己紹介は担当者が確認できるよう表示したり、必須語句の有無など単純なルールでチェックしたりできます。このようなテキストフィルターは文字列の一致を検出しますが、それだけで意味を評価したり、契約上の条件が満たされていると確認したりすることはできません。
Pythonにリクエストを組み込む
まず、ライセンスキーをJSONSCRAPER_INSTAGRAM_LICENSE_KEY環境変数に保存します。この例では、確認済みのベースURL、エンドポイント、usernameパラメーター、およびキーのパラメーター名license_keyを使用します。CSVにはusername,min_followers,max_followers,require_publicの各フィールドを含めます。スクリプトは各アカウントについてレスポンスをルールと照合し、確認が必要な行に印を付けます。
import csv
import os
import sys
import requests
BASE_URL = "https://ig.jsonscraper.com"
API_KEY = os.environ.get("JSONSCRAPER_INSTAGRAM_LICENSE_KEY")
if not API_KEY:
raise SystemExit("Set JSONSCRAPER_INSTAGRAM_LICENSE_KEY")
# brief.csv: username,min_followers,max_followers,require_public
with open("brief.csv", newline="", encoding="utf-8") as source:
brief = list(csv.DictReader(source))
results = []
for row in brief:
username = row.get("username", "").strip()
minimum_text = row.get("min_followers", "").strip()
if not username or not minimum_text:
results.append({
"requested_username": username,
"needs_review": True,
"error": "Missing username or min_followers",
})
continue
try:
response = requests.get(
f"{BASE_URL}/v1/user/by/username",
params={"username": username, "license_key": API_KEY},
timeout=30,
)
response.raise_for_status()
payload = response.json()
if payload.get("status") != "ok" or not isinstance(payload.get("ig"), dict):
raise ValueError("Unexpected API response")
profile = payload["ig"]
followers = profile.get("follower_count")
minimum = int(minimum_text)
maximum_text = row.get("max_followers", "").strip()
maximum = int(maximum_text) if maximum_text else None
public_required = row.get("require_public", "").strip().lower() == "true"
checks = {
"username_matches": (
isinstance(profile.get("username"), str)
and profile["username"].lower() == username.lstrip("@").lower()
),
"followers_in_range": (
isinstance(followers, int)
and followers >= minimum
and (maximum is None or followers
実行方法:python check_profiles.py。requestsライブラリをインストールし、実行環境で環境変数を設定して、brief.csvを同じディレクトリに配置してください。キーをソースコードや出力CSVに記録しないでください。スクリプトは一覧を順番に処理するため、小規模なアカウント群の確認やデバッグに便利です。
欠損データを見える状態に保つ理由
チェックルールでは、値がゼロであることと、項目自体が存在しないことを区別することが重要です。この例では、フォロワー数の項目が数値として存在する場合に限り、条件を満たしたと判断します。カウンターが欠けている場合は条件を確認できないため、手動確認に回します。min_followersのしきい値が空欄の場合も、ゼロに自動変換するのではなく、入力データのエラーとして扱います。
レスポンスの検証もワークフローの一部として記録しておくとよいでしょう。スクリプトはまず外部ステータスがokであることを確認し、次にigオブジェクトの有無を調べます。HTTPエラー、想定外のJSON、不正なルールは、URL内のキーを漏らしかねない例外テキストを含めずにレポートへ記録します。こうすれば、秘密情報を広めることなく、リクエストの失敗とプロフィールの不一致を区別できます。
結果の読み方とチェックの自動化
profile_check.csvには、元のユーザー名、返された名前、利用可能な公開項目、個別条件の判定結果、全体のneeds_reviewフラグが含まれます。チームはこのフラグで行を絞り込み、開発者はレポートをストレージに保存したり、ETLプロセスの次の段階に渡したりできます。定期実行する場合はスケジューラーでスクリプトを起動し、キャンペーンのスナップショットを比較できるよう、実行日を別途保存してください。

ルールを変更する場合は、コードに埋め込むのではなく、ブリーフに保存してください。そうすれば、しきい値を検証しやすくなり、各行について想定されたフォロワー数の範囲や公開設定の条件を確認できます。自己紹介に指定のテキストが含まれるかをチェックすることもできますが、文字列の一致は専門家による内容の評価に代わるものではありません。
IG Scraper APIのページには、ベースURL、リクエスト例、Postmanへのリンクが掲載されています。上記のシナリオで使用するのは、ユーザー名による確認済みのプロフィール検索だけであり、このリクエストが投稿を返すことは前提としていません。
実務上の成果は、再現可能な事前チェックです。一覧全体を手作業で確認する代わりに、チームはブリーフの具体的な項目に関連付けられた一致と例外の一覧を取得できます。これにより、キャンペーン開始前の確認を効率化しつつ、適合性の判断は責任者に委ねられます。