Før en kampanje lanseres, kan du automatisk sammenligne en liste over IG-kontoer med briefen og få en CSV-fil som bare inneholder oppføringer som krever oppmerksomhet. For hver rad ber skriptet om profilen, sammenligner brukernavn, personvernstatus og verifisering med forventede verdier og lagrer også tilgjengelige tellere. Dermed blir en gjentakende manuell kontroll til et oversiktlig kontrollpunkt før kampanjen settes i gang.
Oppgaven: finn avvik før publisering
Kampanjetabellen inneholder vanligvis et kontonavn og noen forventninger: Profilen skal være offentlig, brukernavnet skal samsvare med det avtalte, og verifiseringsmerket skal stemme med oppføringen i briefen. Mellom utarbeidelsen av listen og lanseringen kan kontoen endre navn, bli privat eller vise seg å være en annen profil med et lignende navn. Hvis du kontrollerer radene manuelt, er det vanskelig å gjenta prosessen og raskt finne avvikene.

For en slik forhåndskontroll er det nok å hente profilen med brukernavn. I den publiserte dokumentasjonen fra jsonscraper er ruten GET /v1/user/by/username oppført med parameteren username; en valgfri cache_timeout er også tilgjengelig. Svaret kan inneholde brukernavn, fullt navn, indikatorer for privat og verifisert status, antall innlegg, følgere og kontoer som følges, samt biografi. Les de konkrete feltene fra det faktiske svaret: Et øyeblikksbilde av skjemaet bekrefter at de finnes i det observerte svaret, men verdier kan variere eller mangle.
Forbered tabellen og kontrollreglene
Opprett en CSV-fil kalt profiles.csv med kolonnene username, expected_private og expected_verified. Angi forventede verdier som true eller false i de to siste kolonnene, og skriv brukernavnet uten tegnet @. Hvis forventningen for en profil er ukjent, lar du cellen stå tom: Skriptet skal ikke behandle manglende forventninger som en feil.
username,expected_private,expected_verified
examplebrand,false,true
anotheraccount,false,false
Kontrollen har to avgrensede oppgaver: Den fastslår om det hentede brukernavnet samsvarer med det forespurte, og avdekker forskjeller fra de registrerte forventningene til personvern og verifisering. Tellere og biografi lagres som kontekst for manuell vurdering, ikke som bevis på målgruppens kvalitet eller om skaperen passer til kampanjen.
Koble til IG Scraper API
Lagre tilgangsnøkkelen i miljøvariabelen JSONSCRAPER_INSTAGRAM_LICENSE_KEY. Ikke skriv hemmeligheten i CSV-filen, kildekoden eller kjøreloggene. Den offisielle dokumentasjonen for IG-endepunktet beskriver ruten og parameternavnene; API-ets basisadresse er https://ig.jsonscraper.com, og parameteren for nøkkelen heter license_key.
Før du behandler hele listen, gjør ett prøveoppslag for en testoppføring, kontroller JSON-strukturen og bekreft at kontoen din har tilgang. Siden endepunktet tar imot et brukernavn, trenger du verken en kjent profil-ID eller flere ruter for dette enkle bruksområdet.
Eksempel: forespørsler, sammenligning og CSV med avvik
Det følgende skriptet er kompatibelt med Python 3.8+. Det leser CSV-filen, sender én GET-forespørsel per profil, kontrollerer HTTP-statusen og lagrer relevante kildefelter sammen med sammenligningsresultatet. Installer avhengigheten med kommandoen python -m pip install requests, og eksporter deretter nøkkelen før kjøring.

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)
Koden kontrollerer den observerte svarinnpakningen: den ytre status-verdien og profilobjektet ig. Hvis leverandøren endrer formatet, stopper strukturkontrollen behandlingen av den aktuelle oppføringen og lagrer en feil, i stedet for å opprette et feilaktig samsvar uten varsel. Skriptet skriver ikke ut nøkkelen eller legger den i resultatfilen.
Slik leser du resultatet
I preflight_results.csv har radene med statusen matched bestått de angitte sammenligningene. Verdien review betyr at én eller flere parametere avviker fra briefen; kolonnen checks viser hvilke. Feil i forespørselen eller svaret markeres separat, slik at manglende tilgang til data ikke fremstår som bekreftet samsvar.
Antall følgere og innlegg hjelper en person med å se profilens nåværende øyeblikksbilde ved siden av søknaden. Dette er øyeblikksverdier fra svaret på forespørselen. Hvis du vil vurdere endringer over tid, bør du lagre separate kjøringer med dato; én kontroll inneholder ingen historikk. Felter kan være tomme. Da kan oppføringen fortsatt brukes til å kontrollere identitet og andre tilgjengelige kjennetegn, men ikke til å sammenligne en teller som mangler.
Automatisering før kampanjelansering
Når du har kontrollert en test-CSV manuelt, kan du legge skriptet til i en tidsplan eller et trinn i kampanjeforberedelsene. For en etterprøvbar kontroll bør du oppbevare den opprinnelige listen separat, registrere kjøringsdatoen og lagre resultat-CSV-filen i et lukket arbeidsområde. Hvis brukernavn kan endres, kan du bruke en stabil rad-ID fra systemet ditt for å gjøre senere behandling enklere.
Når listen blir større, bør du legge til en grense for samtidige forespørsler, nye forsøk bare ved midlertidige nettverksfeil og en egen feillogg uten hemmeligheter. Ikke kjør uendelige nye forsøk ved ugyldig nøkkel eller feil formatert brukernavn. Legg bare til verdien cache_timeout hvis den passer til ønsket policy for datavolumets aktualitet: Dokumentasjonen oppgir at mellomlagring for IG er deaktivert som standard, og at en verdi større enn null aktiverer mellomlagring i den angitte perioden.
Profilkontrollen reduserer den manuelle sammenligningen til en konkret liste over avvik: navn, offentlig status, verifisering og tilgjengelige tellere samles i én tabell før kampanjen starter. Se siden for IG Scraper API og dokumentasjonen for API-rutene for API-parametere og oppdaterte integrasjonsmuligheter.