לפני השקת קמפיין אפשר להשוות באופן אוטומטי כל חשבון IG שבבריף לנתונים הציבוריים של הפרופיל. כך אפשר לזהות אי-התאמה ב-username, חשבון פרטי, שינוי בשם או בביוגרפיה, ופער בין מספר הפרסומים לטווח הצפוי. התוצאה היא טבלת בדיקות למשווק, ולא החלטה אוטומטית אם היוצר מתאים לקמפיין.

הבעיה: הבריף מתיישן מהר יותר מהגיליון
רשימת הקמפיין עשויה לכלול שם חשבון, קישור, אומדן למספר העוקבים ודרישות לפרופיל ציבורי. הנתונים האלה עלולים לא להתאים עוד למציאות: החשבון משנה את ה-username, הפרופיל הופך לפרטי, והמספרים בבריף נשארים כפי שהיו. קל לבדוק ידנית פרופיל יחיד; קשה יותר לפקח על בדיקה חוזרת של רשימת חשבונות לפני כל קמפיין ולשחזר אותה.
פתרון שימושי הוא להגדיר כללים מפורשים לכל שורה, לאחזר את השדות הציבוריים הזמינים בזמן הבדיקה ולרשום לצדם את הערכים המקוריים והנוכחיים. «תואם» פירושו אז רק ששדה מסוים עומד בכלל מסוים; ההחלטה אם הקהל או איכות התוכן מתאימים נשארת בידי המומחה.
אילו נתונים לבקש
מדריך הנתיבים של IG API מתאר את הנתיב GET /v1/user/by/username ואת הפרמטר הנדרש username. בתשובה שנבדקה, נתוני הפרופיל נמצאים באובייקט ig: הוא כולל username, שם מלא, ביוגרפיה, סימוני פרטיות ואימות, ומספר הפרסומים, העוקבים והחשבונות שהמשתמש עוקב אחריהם. השדות האלה מתארים תמונת מצב זמינה של הפרופיל.
לבדיקה מקדימה די בכך כדי להשוות את שם החשבון, את הגדרת הפרטיות ואת הספים המספריים. אפשר להציג את הביוגרפיה לעיון המפעיל או לבדוק אותה לפי כלל פשוט, למשל אם מופיע בה מונח נדרש. מסנן טקסט כזה מאתר התאמה של מחרוזת, אך כשלעצמו אינו מעריך משמעות ואינו מאשר עמידה בתנאי חוזה.
איך לשלב את הבקשה ב-Python
תחילה שמרו את מפתח הרישיון במשתנה הסביבה JSONSCRAPER_INSTAGRAM_LICENSE_KEY. הדוגמה משתמשת בכתובת הבסיס, בנתיב, בפרמטר 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 כולל את ה-username המקורי, את השם שהוחזר, שדות ציבוריים זמינים, תוצאות של תנאים נפרדים וסימון כללי needs_review. הצוות יכול לסנן שורות לפי הסימון הזה, והמפתח יכול לשמור את הדוח באחסון או להעביר אותו לשלב הבא בתהליך ETL. לתזמון ההרצה, השתמשו במתזמן ושמרו בנפרד את תאריך ההרצה, כדי שאפשר יהיה להשוות תמונות מצב של הקמפיין.

אם כלל משתנה, שמרו אותו בבריף ולא בקוד. כך אפשר לאמת את הספים: לכל שורה ברור איזה טווח עוקבים או איזה מאפיין של פרופיל ציבורי נדרש. אפשר להוסיף בדיקה של הופעת טקסט מסוים בביוגרפיה, אך התאמה מילולית אינה תחליף להערכה תוכנית של מומחה.
בדף IG Scraper API מופיעים כתובת הבסיס, דוגמת בקשה וקישור ל-Postman. התרחיש שלמעלה משתמש רק בשליפת פרופיל לפי username שאומתה, ואינו מניח שהבקשה מחזירה פרסומים.
התוצאה המעשית היא בקרה מקדימה שאפשר לשחזר: במקום לעבור ידנית על הרשימה כולה, הצוות מקבל רשימת התאמות וחריגות הקשורות לשדות מסוימים בבריף. כך הבדיקה לפני ההשקה מהירה יותר, וההחלטה אם הקמפיין עומד בדרישות נשארת בידי המומחה האחראי.