jsonscraper
Markten
Terug naar het journaal

IG: problemen met openbare profielen opsporen vóór de campagne

Controleer de status, privacy en basisstatistieken van profielen via een API, en zet handmatige controle van accountlijsten om in een reproduceerbaar rapport

Redactioneel beleid Een fout melden

Vóór de campagne kun je een lijst met IG-accounts met een script verwerken en een JSON-rapport maken met het API-antwoord voor elke gebruikersnaam. De route IG Scraper API van jsonscraper retourneert een externe status en een profielobject; het waargenomen schema bevat de gebruikersnaam, privacy- en verificatiekenmerken, het aantal berichten, volgers en gevolgde accounts. Deze velden helpen bij het selecteren van vermeldingen voor handmatige controle, maar verklaren op zichzelf niet waarom een antwoord ontbreekt of onverwacht is.

Artikel: IG: problemen met openbare profielen opsporen vóór de campagne
Samenvatting: Controleer IG-profielen automatisch vóór de campagne: vraag gegevens op via jsonscraper, bewaar de antwoorden en stel een lijst samen van accounts die handmatig moeten worden gecontroleerd.
Beeldrol: omslag — het centrale idee
Sectie: 
Visueel onderwerp: redactionele foto van een checklist voor campagneaccounts naast een telefoon met een generiek IG-profielsilhouet, aangevinkte verificatievakjes en een kleine JSON-gegevenskaart; geen re
Een voorafgaande controle zet een lijst met gebruikersnamen om in records met API-antwoorden en controleerbare velden.© jsonscraper · gemaakt met AI

Het probleem: de accountlijst ziet er goed uit, maar is die klaar voor gebruik?

Een campagnetabel kan hernoemde accounts, typefouten en privéprofielen bevatten. Als het team de lijst zonder voorafgaande controle gaat analyseren, moet iemand de accounts één voor één openen. Een automatische controle beperkt het handwerk en legt in één logboek vast wat de API voor elke opgevraagde gebruikersnaam heeft geretourneerd.

Het doel van dit scenario is beperkt: de lijst doorlopen, de feitelijke HTTP-antwoorden en JSON bewaren en profielen met voor de campagne relevante kenmerken markeren voor handmatige controle. Het rapport legt waargenomen gegevens vast; het bepaalt niet waarom een profiel niet is geretourneerd of waarom een verzoek is mislukt.

Wat het verzoek controleert

In de documentatie van jsonscraper staat de route GET /v1/user/by/username. De verplichte parameter is username; de sleutel wordt doorgegeven als license_key. Met de optionele parameter cache_timeout schakel je caching in voor een opgegeven aantal seconden; met 0 blijft die uitgeschakeld. Het waargenomen schema van een geslaagd antwoord bevat een externe status en een object ig met profielvelden.

Houd voor diagnostiek drie feiten uit elkaar: is het HTTP-verzoek uitgevoerd; bevat de geparseerde JSON een object ig; en welke velden zijn in dat object aanwezig. Als een stap niet naar verwachting verloopt, kan het script het technische resultaat en het oorspronkelijke antwoord vastleggen. Zo’n resultaat wijst erop dat controle nodig is, maar stelt de oorzaak van de fout niet vast.

Bereid de invoer en sleutel voor

Maak een bestand usernames.txt met één gebruikersnaam per regel, zonder het teken @. Verwijder lege regels en duplicaten en houd alleen accounts over die bij de campagne horen. Bewaar voor latere vergelijking de controledatum en de project-ID apart.

Bewaar de sleutel in de omgevingsvariabele JSONSCRAPER_INSTAGRAM_LICENSE_KEY, niet in de broncode of repository:

export JSONSCRAPER_INSTAGRAM_LICENSE_KEY="uw_sleutel"
python3 check_profiles.py

Het voorbeeld gebruikt de standaardbibliotheek van Python 3.8+ en vereist geen installatie van HTTP-pakketten.

Voorbeeld: profielen opvragen en een rapport opslaan

Het script verwerkt de lijst één gebruikersnaam tegelijk. Bij een geslaagd JSON-antwoord slaat het de feitelijke inhoud en beschikbare profielvelden op; bij een HTTP- of netwerkfout registreert het die als technische uitkomst. Ontbrekende velden blijven null en de ruwe antwoordinhoud wordt bewaard als die kon worden gelezen.

import json
import os
import time
from datetime import datetime, timezone
from urllib.error import HTTPError, URLError
from urllib.parse import urlencode
from urllib.request import Request, urlopen

API_KEY = os.environ.get("JSONSCRAPER_INSTAGRAM_LICENSE_KEY")
if not API_KEY:
    raise SystemExit("Stel JSONSCRAPER_INSTAGRAM_LICENSE_KEY in")

BASE_URL = "https://ig.jsonscraper.com/v1/user/by/username"

with open("usernames.txt", encoding="utf-8") as f:
    usernames = list(dict.fromkeys(
        line.strip().lstrip("@") for line in f if line.strip()
    ))

results = []
for username in usernames:
    params = urlencode({"username": username, "license_key": API_KEY})
    request = Request(f"{BASE_URL}?{params}", method="GET")
    checked_at = datetime.now(timezone.utc).isoformat()

    try:
        with urlopen(request, timeout=30) as response:
            http_status = response.status
            raw_body = response.read().decode("utf-8")
        try:
            payload = json.loads(raw_body)
            json_error = None
        except json.JSONDecodeError as exc:
            payload = None
            json_error = str(exc)

        profile = payload.get("ig") if isinstance(payload, dict) else None
        record = {
            "requested_username": username,
            "checked_at": checked_at,
            "http_status": http_status,
            "api_status": payload.get("status") if isinstance(payload, dict) else None,
            "check_result": "profile_returned" if isinstance(profile, dict) else "unexpected_or_missing_profile_object",
            "response": payload if payload is not None else raw_body,
        }
        if json_error:
            record["json_error"] = json_error
        if isinstance(profile, dict):
            record["returned_username"] = profile.get("username")
            record["is_private"] = profile.get("is_private")
            record["is_verified"] = profile.get("is_verified")
            record["media_count"] = profile.get("media_count")
            record["follower_count"] = profile.get("follower_count")
            record["following_count"] = profile.get("following_count")
        results.append(record)
    except HTTPError as exc:
        body = exc.read().decode("utf-8", errors="replace")
        results.append({
            "requested_username": username,
            "checked_at": checked_at,
            "check_result": "http_error",
            "http_status": exc.code,
            "response": body,
        })
    except (URLError, TimeoutError) as exc:
        results.append({
            "requested_username": username,
            "checked_at": checked_at,
            "check_result": "request_error",
            "detail": str(exc),
        })

    time.sleep(0.5)

with open("profile-check.json", "w", encoding="utf-8") as f:
    json.dump(results, f, ensure_ascii=False, indent=2)

print(f"Opgeslagen resultaten: {len(results)}")

Dit is een integratievoorbeeld, geen melding van een uitgevoerde test. De sleutel wordt doorgegeven in de parameter license_key, maar niet afgedrukt. Het volledige antwoord kan informatie bevatten waarvan de toegang moet worden beperkt volgens de regels voor gegevensopslag van je team.

Resultaten interpreteren

De vermelding profile_returned betekent dat het script een JSON-object ig heeft ontvangen. Vergelijk requested_username met returned_username en bekijk de kenmerken die voor het campagneproces van belang zijn. Je kunt bijvoorbeeld is_private: true markeren voor handmatige controle als de campagne een openbaar profiel vereist.

Artikel: IG: problemen met openbare profielen opsporen vóór de campagne
Samenvatting: Controleer IG-profielen automatisch vóór de campagne: vraag gegevens op via jsonscraper, bewaar de antwoorden en stel een lijst samen van accounts die handmatig moeten worden gecontroleerd.
Beeldrol: ondersteunende illustratie 2 — een ander specifiek aspect
Sectie: Resultaten interpreteren
Visueel onderwerp: infographic in het Russisch: lijst met gebruikersnamen → GET IG Profile API → HTTP en JSON controleren → profielobject en velden username
Het schema toont de route van een gebruikersnamenlijst naar een rapport en maakt onderscheid tussen ontvangen profielgegevens en technische fouten.© jsonscraper · AI-gegenereerde illustratie

De resultaten http_error, request_error en unexpected_or_missing_profile_object geven alleen aan in welke stap het script de verwachte structuur niet heeft ontvangen. Ze bewijzen niet dat een account is verwijderd, privé is of om een specifieke reden niet beschikbaar is. Bewaar het antwoord, controleer de gebruikersnaam en sleutel en probeer het verzoek daarna opnieuw of neem contact op met de gebruikelijke ondersteuning van de dienst.

Ontbreekt een veld, laat het dan onbekend: interpreteer de afwezigheid niet als nul of false. De profielstatistieken beschrijven de toestand op het moment van het verzoek. Dankzij de tijdstempel kun je deze momentopname onderscheiden van de resultaten van een volgende uitvoering.

Automatiseren zonder zicht op de resultaten te verliezen

Verplaats de uitvoering naar een taakplanner of een stap in een bestaand ETL-proces. Bewaar de controledatum, opgevraagde gebruikersnaam, uitkomst, status en antwoordinhoud. In een aparte stap kun je de JSON naar een tabel uploaden en alleen vermeldingen die controle vereisen naar een specialist sturen.

Vergelijk voor het opsporen van veranderingen momentopnamen van hetzelfde profiel op basis van geselecteerde velden. Een verandering in het aantal berichten is aanleiding om het profiel te openen en te controleren, maar geeft niet precies aan wanneer een bericht is geplaatst. Ook het aantal volgers is een waarde op het moment van het verzoek; de geschiedenis van waarnemingen ontstaat dus uit de opgeslagen momentopnamen.

Stel bij een grote lijst een beheersbaar tempo in, voeg een beperkt aantal herhaalpogingen toe en houd een foutenlogboek bij. Neem de sleutel niet op in URL-logboeken. Door de invoerlijst en resultaten apart op te slaan, kun je bepalen welke accounts al zijn verwerkt.

Verwacht resultaat

Het resultaat is een JSON-bestand met de verwerkingsuitkomst voor elke opgegeven gebruikersnaam, een tijdstempel, beschikbare kenmerken en het opgeslagen antwoord. Voordat je de lijst voor de campagne gebruikt, kun je overeenkomende gebruikersnamen, privéprofielen en technische gevallen eruit filteren voor handmatige controle. Het team bepaalt zelf de criteria voor de volgende stap.

De route en parameters worden beschreven in de documentatie van de IG API; productinformatie staat op de pagina van IG Scraper API. Begin met een kleine steekproef, controleer de feitelijke antwoordstructuur en stem de rapportageregels af op je eigen proces.

Mensen

Er zijn nog geen mensen vermeld voor dit artikel.

Blijf lezenIG-profielen omzetten in een dagelijkse lijst met wijzigingen
Lees het volgende artikel

Maak van wat je leest een werkende integratie

Ontdek de socialdata-API's van jsonscraper, test aanvragen en bouw je volgende workflow.

API's verkennen