jsonscraper
Mercati
Torna al diario

Verifica il profilo IG rispetto al brief della campagna prima del lancio: controllo tramite API

Uno script Python controlla nome utente, privacy, verifica e contatori del profilo, quindi segnala le discrepanze da esaminare manualmente.

Politica editoriale Segnala un errore

Prima del lancio di una campagna, puoi confrontare automaticamente un elenco di account IG con il brief e ottenere un CSV contenente solo le voci che richiedono attenzione. Per ogni riga, lo script richiede i dati del profilo, confronta username, stato di privacy e verifica con i valori attesi e salva anche i contatori disponibili. In questo modo, un controllo manuale ripetitivo diventa una verifica chiara da eseguire prima di avviare la campagna.

Obiettivo: individuare le discrepanze prima della pubblicazione

Un foglio di lavoro per una campagna include di solito il nome dell’account e alcune aspettative: il profilo deve essere pubblico, lo username deve corrispondere a quello concordato e il badge di verifica deve coincidere con quanto riportato nel brief. Tra la preparazione dell’elenco e il lancio, un account potrebbe cambiare nome, diventare privato oppure rivelarsi un altro profilo con un nome simile. Se controlli le righe manualmente, è difficile ripetere il processo e individuare rapidamente le eccezioni.

Articolo: Verifica il profilo IG rispetto al brief della campagna prima del lancio: controllo tramite API
Sommario: Prima del lancio, controlla automaticamente i profili IG indicati nel brief: recupera i dati tramite l’endpoint documentato di jsonscraper, confrontali con i valori attesi e salva un elenco chiaro delle eccezioni.
Ruolo dell’immagine: copertina — l’idea centrale
Sezione: Obiettivo: individuare le discrepanze prima della pubblicazione
Soggetto visivo: Natura morta editoriale: un foglio di pianificazione della campagna con diversi profili IG distinti
Il controllo preliminare confronta il profilo con i parametri attesi nel brief e segnala le righe da valutare manualmente.© jsonscraper · creato con l’IA

Per questo controllo preliminare basta recuperare il profilo tramite username. La documentazione pubblicata di jsonscraper indica la route GET /v1/user/by/username con il parametro username; è disponibile anche il parametro facoltativo cache_timeout. La risposta può includere username, nome completo, indicatori di privacy e verifica, numero di post, follower e account seguiti, oltre alla biografia. Leggi i campi presenti nella risposta effettiva: uno schema rilevato conferma che erano presenti nella risposta osservata, ma i valori possono variare o mancare.

Prepara il foglio di lavoro e le regole di verifica

Crea un CSV denominato profiles.csv con le colonne username, expected_private e expected_verified. Inserisci nelle ultime due colonne i valori attesi true o false e scrivi lo username senza il simbolo @. Se non conosci il valore atteso per un profilo, lascia vuota la cella: lo script non deve trattare l’assenza di un’aspettativa come un errore.

username,expected_private,expected_verified
examplebrand,false,true
anotheraccount,false,false

Il controllo svolge due compiti specifici: determina se lo username restituito corrisponde a quello richiesto e rileva eventuali differenze rispetto alle aspettative registrate per privacy e verifica. I contatori e la biografia vengono salvati come contesto per una valutazione manuale, ma non sono interpretati come prova della qualità del pubblico o dell’idoneità del creator alla campagna.

Collega IG Scraper API

Salva la chiave di accesso nella variabile d’ambiente JSONSCRAPER_INSTAGRAM_LICENSE_KEY. Non inserire il segreto nel CSV, nel codice sorgente o nei log di esecuzione. La documentazione ufficiale dell’endpoint IG descrive la route e i nomi dei parametri; l’indirizzo base dell’API è https://ig.jsonscraper.com e il nome del parametro per la chiave è license_key.

Prima di elaborare l’intero elenco, effettua una chiamata di prova per una riga di test, controlla la struttura JSON e verifica che il tuo account abbia accesso. Poiché l’endpoint accetta uno username, per questo semplice scenario non servono un identificatore di profilo noto né route aggiuntive.

Esempio: richieste, confronti e CSV delle eccezioni

Lo script seguente è compatibile con Python 3.8 e versioni successive. Legge il CSV, esegue una richiesta GET per ciascun profilo, controlla lo stato HTTP della risposta e salva i campi originali rilevanti insieme all’esito del confronto. Installa la dipendenza con python -m pip install requests, quindi imposta la chiave prima dell’esecuzione.

Articolo: Verifica il profilo IG rispetto al brief della campagna prima del lancio: controllo tramite API
Sommario: Prima del lancio, controlla automaticamente i profili IG indicati nel brief: recupera i dati tramite l’endpoint documentato di jsonscraper, confrontali con i valori attesi e salva un elenco chiaro delle eccezioni.
Ruolo dell’immagine: illustrazione di supporto 2 — un aspetto specifico diverso
Sezione: Esempio: richieste, confronti e CSV delle eccezioni
Soggetto visivo: Infografica in russo che mostra un flusso di dati verificato
Lo schema illustra il percorso dal CSV all’endpoint del profilo e ai risultati del confronto: corrispondenza, revisione manuale o errore.© jsonscraper · illustrazione generata dall’IA
import csv
import os
import time
from pathlib import Path

import requests

BASE_URL = "https://ig.jsonscraper.com/v1/user/by/username"
API_KEY = os.environ["JSONSCRAPER_INSTAGRAM_LICENSE_KEY"]
INPUT_FILE = Path("profiles.csv")
OUTPUT_FILE = Path("preflight_results.csv")


def parse_expected(value):
    value = (value or "").strip().lower()
    if value == "true":
        return True
    if value == "false":
        return False
    return None


def profile_from_response(payload):
    # The documented observed response wraps profile fields in "ig".
    if payload.get("status") != "ok":
        raise ValueError("API response status is not ok")
    profile = payload.get("ig")
    if not isinstance(profile, dict):
        raise ValueError("Response has no profile object under 'ig'")
    return profile


with INPUT_FILE.open(newline="", encoding="utf-8") as source:
    rows = list(csv.DictReader(source))

results = []
for row in rows:
    requested = (row.get("username") or "").strip().lstrip("@")
    if not requested:
        results.append({
            "requested_username": "",
            "result": "missing_username",
            "error": "username is empty",
        })
        continue

    try:
        response = requests.get(
            BASE_URL,
            params={"username": requested, "license_key": API_KEY},
            timeout=30,
        )
        response.raise_for_status()
        profile = profile_from_response(response.json())

        actual_username = profile.get("username")
        actual_private = profile.get("is_private")
        actual_verified = profile.get("is_verified")
        expected_private = parse_expected(row.get("expected_private"))
        expected_verified = parse_expected(row.get("expected_verified"))

        checks = []
        if actual_username and actual_username.casefold() != requested.casefold():
            checks.append("username_mismatch")
        if expected_private is not None and actual_private != expected_private:
            checks.append("privacy_mismatch")
        if expected_verified is not None and actual_verified != expected_verified:
            checks.append("verification_mismatch")

        results.append({
            "requested_username": requested,
            "username": actual_username,
            "full_name": profile.get("full_name"),
            "is_private": actual_private,
            "is_verified": actual_verified,
            "media_count": profile.get("media_count"),
            "follower_count": profile.get("follower_count"),
            "following_count": profile.get("following_count"),
            "result": "review" if checks else "matched",
            "checks": ";".join(checks),
            "error": "",
        })
    except (requests.RequestException, ValueError, KeyError) as exc:
        results.append({
            "requested_username": requested,
            "result": "request_or_response_error",
            "error": str(exc),
        })

    # A small delay spaces requests; it is not a documented quota guarantee.
    time.sleep(0.5)

fieldnames = sorted({key for item in results for key in item})
with OUTPUT_FILE.open("w", newline="", encoding="utf-8") as destination:
    writer = csv.DictWriter(destination, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(results)

print("Saved", len(results), "rows to", OUTPUT_FILE)

Il codice controlla la struttura della risposta osservata: lo status esterno e l’oggetto profilo ig. Se il fornitore modifica il formato, il controllo della struttura interrompe l’elaborazione della singola riga e registra un errore, invece di creare silenziosamente una corrispondenza errata. Lo script non stampa la chiave e non la inserisce nel file finale.

Come leggere il risultato

Nel file preflight_results.csv, le righe con stato matched hanno superato i confronti configurati. Il valore review indica che uno o più parametri differiscono dal brief; la colonna checks specifica quali. Gli errori di richiesta o di risposta sono segnalati separatamente, così l’indisponibilità dei dati non viene scambiata per una corrispondenza confermata.

Il numero di follower e di post aiuta a confrontare l’istantanea attuale del profilo con la candidatura. Sono valori rilevati al momento della risposta alla richiesta. Per valutare i cambiamenti nel tempo, conserva esecuzioni separate con le relative date: un singolo controllo non contiene dati storici. Alcuni campi possono essere vuoti; in tal caso la riga resta utile per verificare l’identità e gli altri attributi disponibili, ma non per confrontare un contatore assente.

Automatizza il controllo prima del lancio della campagna

Dopo aver verificato manualmente un CSV di prova, aggiungi lo script a una pianificazione o a una fase di preparazione della campagna. Per rendere il controllo ripetibile, conserva separatamente l’elenco originale, registra la data di esecuzione e salva il CSV dei risultati in un archivio di lavoro ad accesso riservato. Se lo username può cambiare, per elaborare nuovamente le righe è utile usare un identificatore stabile del tuo sistema.

Quando l’elenco cresce, aggiungi un limite alla concorrenza, tentativi aggiuntivi solo per gli errori di rete temporanei e un log separato dei codici di errore, senza segreti. Non ripetere all’infinito le richieste con una chiave non valida o uno username non corretto. Aggiungi il valore cache_timeout solo in base alla politica di aggiornamento necessaria: la documentazione indica che la cache per IG è disattivata per impostazione predefinita e che un valore maggiore di zero la attiva per il periodo specificato.

Il controllo del profilo riduce la verifica manuale a un elenco preciso di eccezioni: nome, privacy, verifica e contatori disponibili sono raccolti in un unico foglio prima dell’avvio della campagna. Per i parametri API e le opzioni d’integrazione aggiornate, consulta la pagina di IG Scraper API e la documentazione delle route.

Persone

Nessuna persona elencata ancora per questo articolo.

Continua a leggereIG: come individuare i problemi nei profili pubblici prima del lancio di una campagna
Leggi il prossimo articolo

Trasforma ciò che leggi in un'integrazione funzionante

Esplora le API per dati social di jsonscraper, prova le richieste e crea il tuo prossimo flusso di lavoro.

Esplora API