jsonscraper
Marknader
Tillbaka till journalen

IG: så upptäcker du problem med offentliga profiler före kampanjstart

Kontrollera profilstatus, sekretess och grundläggande mätvärden via API:et och gör manuell granskning av en kontolista till en reproducerbar rapport

Redaktionella riktlinjer Rapportera ett fel

Inför en kampanj kan du bearbeta en lista med IG-konton med ett skript och skapa en JSON-rapport med API-svaret för varje användarnamn. IG Scraper API från jsonscraper returnerar en yttre status och ett profilobjekt; det observerade schemat innehåller användarnamn, uppgifter om sekretess och verifiering samt antal inlägg, följare och konton som följs. Dessa fält hjälper till att välja ut poster för manuell granskning, men förklarar inte i sig varför ett svar saknas eller är oväntat.

Artikel: IG: så upptäcker du problem med offentliga profiler före kampanjstart
Sammanfattning: Kontrollera IG-profiler automatiskt före kampanjstart: hämta data via jsonscraper, spara svaren och skapa en lista över konton som behöver granskas manuellt.
Bildens roll: omslag — huvudidén
Avsnitt: 
Visuellt motiv: Redaktionellt foto av en checklista för kampanjkonton intill en telefon som visar en generisk IG-profilsilhuett, markerade verifieringsrutor och ett litet JSON-datakort; inga re
Förhandskontrollen omvandlar en lista med användarnamn till poster med API-svar och fält som kan granskas.© jsonscraper · skapad med AI

Problemet: listan över konton ser korrekt ut, men är den redo att användas?

I kampanjens arbetsblad kan det finnas konton som bytt namn, felskrivningar och privata profiler. Om teamet börjar analysera listan utan en förhandskontroll måste någon öppna kontona ett i taget. En automatiserad genomgång minskar det manuella arbetet och ger en enhetlig logg över exakt vad API:et returnerade för varje begärt användarnamn.

Syftet med det här arbetsflödet är avgränsat: gå igenom listan, spara de faktiska HTTP-svaren och JSON-data samt markera profiler med egenskaper som är relevanta för kampanjen för manuell granskning. Rapporten dokumenterar observerade data; den fastställer inte varför en profil inte returnerades eller varför en begäran misslyckades.

Vad begäran kontrollerar

I jsonscrapers dokumentation anges slutpunkten GET \/v1\/user\/by\/username. Den obligatoriska parametern är username; nyckeln skickas som license_key. Den valfria parametern cache_timeout aktiverar cachning under ett angivet antal sekunder, medan 0 innebär att den är avstängd. Det observerade schemat för ett lyckat svar innehåller en yttre status och ett objekt ig med profilfält.

Skilj mellan tre fakta vid diagnostik: om HTTP-begäran kunde genomföras, om den tolkade JSON-datan innehåller objektet ig och vilka fält som finns i objektet. Om något steg inte ger det förväntade resultatet kan skriptet logga ett tekniskt utfall och det ursprungliga svaret. Ett sådant resultat visar att något behöver kontrolleras, men fastställer inte orsaken till felet.

Förbered indata och nyckel

Skapa filen usernames.txt med ett användarnamn per rad, utan tecknet @. Ta bort tomma rader och dubbletter och behåll bara konton som hör till kampanjen. Spara kontrolldatum och projekt-ID separat för att kunna jämföra resultaten senare.

Förvara nyckeln i miljövariabeln JSONSCRAPER_INSTAGRAM_LICENSE_KEY, inte i källkoden eller kodförrådet:

export JSONSCRAPER_INSTAGRAM_LICENSE_KEY="din_nyckel"
python3 check_profiles.py

Exemplet använder Pythons standardbibliotek i version 3.8 eller senare och kräver inga HTTP-paketinstallationer.

Exempel: hämta profiler och skriva en rapport

Skriptet går igenom listan ett användarnamn i taget. Vid ett lyckat JSON-svar sparar det det faktiska svaret och tillgängliga profilfält; vid ett HTTP- eller nätverksfel registreras det tekniska utfallet. Saknade fält förblir null, och råsvaret sparas om det gick att läsa.

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("Ange JSONSCRAPER_INSTAGRAM_LICENSE_KEY")

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"Sparade resultat: {len(results)}")

Det här är ett integrations exempel, inte en rapport om ett genomfört test. Nyckeln skickas i parametern license_key, men skrivs inte ut. Det fullständiga svaret kan innehålla uppgifter vars åtkomst bör begränsas enligt teamets regler för datalagring.

Så tolkar du resultatet

En post med profile_returned betyder att skriptet fick ett JSON-objekt ig. Jämför requested_username med returned_username och granska de egenskaper som är viktiga för kampanjprocessen. Om kampanjen exempelvis kräver en offentlig profil kan is_private: true skickas vidare för manuell granskning.

Artikel: IG: så upptäcker du problem med offentliga profiler före kampanjstart
Sammanfattning: Kontrollera IG-profiler automatiskt före kampanjstart: hämta data via jsonscraper, spara svaren och skapa en lista över konton som behöver granskas manuellt.
Bildens roll: stödillustration 2 — en annan specifik aspekt
Avsnitt: Så tolkar du resultatet
Visuellt motiv: Infografik på svenska: lista med användarnamn → IG API för profilhämtning → kontroll av HTTP och JSON → profilobjekt och fältet username
Diagrammet visar vägen från användarlistan till rapporten och skiljer hämtade profildata från tekniska fel.© jsonscraper · AI-genererad illustration

Resultaten http_error, request_error och unexpected_or_missing_profile_object visar bara i vilket steg skriptet inte fick den förväntade strukturen. De bevisar inte att kontot har tagits bort, gjorts privat eller är otillgängligt av en viss anledning. Spara svaret, kontrollera användarnamnet och nyckeln och gör sedan ett nytt försök eller kontakta tjänstens ordinarie support.

Om ett fält saknas ska det förbli okänt — tolka inte frånvaron som noll eller false. Profilräknare beskriver tillståndet vid tidpunkten för begäran. Tidsstämpeln gör det möjligt att skilja den här ögonblicksbilden från resultatet av nästa körning.

Automatisera utan att förlora insyn

Lägg körningen i en schemaläggare eller i ett steg i den befintliga ETL-processen. Spara kontrolldatum, begärt användarnamn, resultat, status och svarskropp. I ett separat steg kan du läsa in JSON-data i en tabell och bara skicka de poster som behöver granskas till en handläggare.

För att upptäcka förändringar jämför du ögonblicksbilder av samma profil utifrån utvalda fält. En förändring i antalet inlägg är en anledning att öppna profilen och kontrollera den, inte ett exakt datum för när ett inlägg publicerades. Antalet följare är också ett värde från tidpunkten för begäran, så historiken byggs upp av sparade ögonblicksbilder.

Om listan är stor bör du hålla ett kontrollerat tempo, lägga till begränsade återförsök och föra en fellogg. Ta inte med nyckeln i URL-loggar. Separat lagring av indatalistan och resultaten gör det lättare att se vilka konton som redan har behandlats.

Förväntat resultat

Resultatet är en JSON-fil med utfall för varje angivet användarnamn, en tidsstämpel, tillgängliga attribut och det sparade svaret. Innan listan förs in i kampanjen kan du filtrera fram användarnamn som matchar, privata profiler och tekniska fall för manuell granskning. Teamet bestämmer kriterierna för nästa steg.

Slutpunkten och parametrarna beskrivs i dokumentationen för IG API; produktinformation finns på sidan för IG Scraper API. Börja med ett litet urval, kontrollera den faktiska svarsstrukturen och anpassa rapportreglerna till ert arbetsflöde.

Personer

Inga personer listade för denna artikel ännu.

Fortsätt läsaSå gör du IG-profiler till en daglig ändringslogg
Läs nästa artikel

Gör det du läser till en fungerande integration

Utforska jsonscrapers API:er för social data, testa anrop och bygg nästa arbetsflöde.

Utforska API:er