jsonscraper

איך לבנות ניטור יומי של יוצרי IG ב-Python

תהליך עבודה למשווקים ולאנליסטים: איסוף נתונים ציבוריים על פרופילים, שמירת תמונות מצב וזיהוי שינויים בלי לבדוק חשבונות ידנית.

מדיניות עריכה דיווח על שגיאה

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

מאמר: איך לבנות ניטור יומי של יוצרי IG ב-Python
תקציר: כך אפשר להפוך לאוטומטי ניטור יומי של רשימת פרופילי IG ציבוריים באמצעות IG Scraper API: לשלוף פרופיל, לשמור היסטוריית תצפיות ולהפיק דוח שינויים.
תפקיד התמונה: תמונת שער — הרעיון המרכזי
מקטע: 
הנושא החזותי: המחשה של לוח מחוונים לצינור נתונים, שבו רשת מסודרת של כרטיסי פרופילים ציבוריים מזינה רשומות JSON עם חותמות זמן לממשק ניתוח פשוט
© jsonscraper · איור שנוצר באמצעות בינה מלאכותית

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

תחילה הגדירו מה בדיוק צריך לעקוב אחריו

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

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

כלל שימושי לניטור: שמרו את התשובות הגולמיות בנפרד מהרשומות המנורמלות. JSON גולמי מאפשר לבדוק מחדש את הפרשנות אם תשובת ה-API משתנה; טבלה מנורמלת נוחה לגרפים ולסינון. בשני המקרים שמרו את מועד הבקשה, כדי להבחין בין ערך עדכני לערך היסטורי.

התחברו אל IG Scraper API

כתובת הבסיס של IG API ב-jsonscraper היא https://ig.jsonscraper.com. בתיעוד הרשמי מופיעה בקשת פרופיל לפי שם משתמש: GET /v1/user/by/username עם הפרמטרים username, license_key ו-cache_timeout. לדוגמה, עבור חשבון בדיקה התיעוד מציג כתובת URL בתבנית https://ig.jsonscraper.com/v1/user/by/username?username=apple&license_key=YOUR_LICENSE_KEY&cache_timeout=60. יש להשתמש בפרמטר המטמון רק בהתאם לתנאי הנתיב המסוים ולמטרתכם: תדירות הבקשות צריכה להתאים למהירות שבה נחוצים לכם העדכונים.

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

שמרו את מפתח ה-API במשתנה סביבה, ולא בקוד המקור או באפליקציית לקוח. התיעוד של jsonscraper ממליץ לשמור את המפתח בסביבה ולא להטמיע אותו בקובצי build של לקוח. יש להגביל את הגישה למפתח בתהליך העבודה; למשל, לאפשר אותו רק למשימת איסוף שרצה ברקע.

דוגמה מינימלית עובדת ב-Python

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

import json
import os
import time
from datetime import datetime, timezone
from pathlib import Path
from urllib.parse import urlencode
from urllib.request import Request, urlopen

API_KEY = os.environ["JSONSCRAPER_LICENSE_KEY"]
USERNAMES = [name.strip() for name in os.environ["IG_USERNAMES"].split(",") if name.strip()]
BASE_URL = "https://ig.jsonscraper.com/v1/user/by/username"
OUTPUT = Path("instagram_profiles.jsonl")


def fetch_profile(username: str) -> dict:
    query = urlencode({
        "username": username,
        "license_key": API_KEY,
        "cache_timeout": 60,
    })
    request = Request(f"{BASE_URL}?{query}", headers={"Accept": "application/json"})
    with urlopen(request, timeout=30) as response:
        return json.load(response)


with OUTPUT.open("a", encoding="utf-8") as output:
    for username in USERNAMES:
        collected_at = datetime.now(timezone.utc).isoformat()
        try:
            payload = fetch_profile(username)
            row = {
                "collected_at": collected_at,
                "requested_username": username,
                "ok": True,
                "payload": payload,
            }
        except Exception as exc:
            row = {
                "collected_at": collected_at,
                "requested_username": username,
                "ok": False,
                "error": str(exc),
            }

        output.write(json.dumps(row, ensure_ascii=False) + "\n")
        output.flush()
        time.sleep(1)

לפני ההרצה, הגדירו את התצורה בסביבה:

export JSONSCRAPER_LICENSE_KEY="המפתח_שלכם"
export IG_USERNAMES="creator_one,creator_two,creator_three"
python monitor.py

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

נרמלו את הנתונים לאחר בדיקת התשובה

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

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

כדאי לשמור את התשובה הגולמית לתקופה מוגבלת אם היא כוללת יותר נתונים מהנחוץ לדוח. הטבלה המנורמלת צריכה להכיל רק שדות שמוצדקים על ידי המשימה המסוימת. במחקר ציבורי של יוצרים הדבר בדרך כלל מצמצם את היקף הנתונים ומקל להסביר מדוע המידע נאסף.

הוסיפו הרצה יומית והתראה

בשרת אפשר להריץ את הסקריפט באמצעות מתזמן משימות כמו cron, ובכלי אוטומציה — לפי לוח זמנים ובאמצעות בקשת HTTP. התהליך הבסיסי כולל טריגר, קריאת רשימת הפרופילים, קריאה סדרתית לנתיב, בדיקת הצלחת התשובה, כתיבת שורה לאחסון והכנת סיכום. ב-n8n או ב-Make אפשר לחלק את אותם שלבים לצמתים נפרדים, כך שכשל בפרופיל אחד לא יעצור את איסוף הנתונים כולו.

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

כדאי גם להגדיר מטמון מתוך שיקול דעת. בתיעוד מתואר cache_timeout כפרמטר בנתיבים נתמכים, המאפשר שימוש חוזר בתוצאות עדכניות. עבור דוח השוואה יומי, בחרו מצב שתואם את רמת העדכניות הנדרשת; אל תערבבו תשובה שמורה במטמון עם נקודת בדיקה חדשה בלי לציין זאת ביומן.

מה ניטור כזה יכול להראות

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

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

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

People

No people listed for this article yet.

Keep readingאיך למדוד את הדינמיקה של תוכן מתחרים באינסטגרם: צינור API ב-Python
Read the next article

הפכו את מה שקראתם לאינטגרציה עובדת

גלו את ממשקי ה-API לנתונים חברתיים של jsonscraper, בדקו בקשות ובנו את תהליך העבודה הבא.

גלה API