jsonscraper
Trhy
Zpět do magazínu

Před spuštěním kampaně porovnejte profil IGu se zadáním: kontrola přes API

Skript v Pythonu ověří uživatelské jméno, veřejnost, ověření a počty sledujících, poté označí nesrovnalosti k ruční kontrole.

Redakční zásady Nahlásit chybu

Před spuštěním kampaně můžete automaticky porovnat seznam účtů IGu se zadáním a získat CSV pouze se záznamy, které vyžadují pozornost. U každého řádku skript načte profil, porovná uživatelské jméno, nastavení soukromí a ověření s očekávanými hodnotami a uloží také dostupné počty. Opakovanou ruční kontrolu tak proměníte v přehledný kontrolní krok před předáním kampaně k realizaci.

Úkol: odhalit nesrovnalosti před zveřejněním

Tabulka kampaně obvykle obsahuje název účtu a několik očekávání: profil má být veřejný, uživatelské jméno má odpovídat schválené variantě a označení ověření se má shodovat se záznamem v zadání. Mezi přípravou seznamu a spuštěním může účet změnit jméno, přejít do soukromého režimu nebo se ukázat jako jiný profil s podobným názvem. Při ruční kontrole jednotlivých řádků se proces obtížně opakuje a výjimky se hledají pomalu.

Článek: Před spuštěním kampaně porovnejte profil IGu se zadáním: kontrola přes API
Shrnutí: Před spuštěním kampaně automaticky ověřte profily IGu uvedené v zadání: načtěte údaje přes dokumentovaný endpoint jsonscraper, porovnejte je s očekávanými hodnotami a uložte přehledný seznam výjimek.
Role obrázku: titulní — ústřední myšlenka
Sekce: Úkol: odhalit nesrovnalosti před zveřejněním
Vizuální námět: Zátiší v redakčním stylu: plánovací list kampaně s několika odlišnými profily IGu
Předběžná kontrola porovnává profil s očekávanými parametry zadání a označuje řádky k ručnímu posouzení.© jsonscraper · vytvořeno pomocí AI

Pro takovou předběžnou diagnostiku stačí načíst profil podle uživatelského jména. V publikované dokumentaci jsonscraper je uvedena cesta GET /v1/user/by/username s parametrem username; k dispozici je také nepovinný parametr cache_timeout. Odpověď může obsahovat uživatelské jméno, celé jméno, příznaky private a verified, počet příspěvků, sledujících a sledovaných účtů i životopis. Konkrétní pole je třeba číst ze skutečné odpovědi: snímek schématu potvrzuje jejich přítomnost v pozorované odpovědi, hodnoty se však mohou lišit nebo chybět.

Připravte tabulku a pravidla kontroly

Vytvořte soubor CSV profiles.csv se sloupci username, expected_private a expected_verified. Do posledních dvou sloupců zadejte očekávané hodnoty true nebo false a uživatelské jméno uveďte bez znaku @. Pokud očekávanou hodnotu u některého profilu neznáte, ponechte buňku prázdnou: skript nemá chybějící očekávání považovat za chybu.

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

Kontrola zde řeší dva úzce vymezené úkoly: ověřuje, zda načtené uživatelské jméno odpovídá požadovanému, a zjišťuje odchylky od zaznamenaných očekávání ohledně soukromí a ověření. Počty a životopis se ukládají pro kontext a ruční posouzení, nikoli jako důkaz kvality publika nebo vhodnosti autora pro kampaň.

Připojte IG Scraper API

Přístupový klíč uložte do proměnné prostředí JSONSCRAPER_INSTAGRAM_LICENSE_KEY. Tajný klíč nezapisujte do CSV, zdrojového kódu ani protokolů běhu. Oficiální dokumentace endpointu IGu popisuje cestu a názvy parametrů; základní adresa API je https://ig.jsonscraper.com a parametr pro klíč se jmenuje license_key.

Než zpracujete celý seznam, proveďte jeden testovací požadavek pro zkušební řádek, zkontrolujte strukturu JSON a ověřte, že váš účet má přístup. Protože endpoint přijímá uživatelské jméno, pro tento jednoduchý scénář nejsou potřeba známý identifikátor profilu ani další cesty.

Příklad: požadavky, porovnání a CSV s výjimkami

Následující skript je kompatibilní s Pythonem 3.8 a novějším. Načte CSV, provede jeden požadavek GET na každý profil, zkontroluje stav HTTP odpovědi a uloží původní důležitá pole spolu s výsledkem porovnání. Nainstalujte závislost příkazem python -m pip install requests a před spuštěním exportujte klíč.

Článek: Před spuštěním kampaně porovnejte profil IGu se zadáním: kontrola přes API
Shrnutí: Před spuštěním kampaně automaticky ověřte profily IGu uvedené v zadání: načtěte údaje přes dokumentovaný endpoint jsonscraper, porovnejte je s očekávanými hodnotami a uložte přehledný seznam výjimek.
Role obrázku: doprovodná ilustrace 2 — jiný konkrétní aspekt
Sekce: Příklad: požadavky, porovnání a CSV s výjimkami
Vizuální námět: Infografika v ruštině znázorňující ověřený datový tok
Schéma znázorňuje cestu od CSV přes endpoint profilu k výsledkům porovnání: shoda, ruční kontrola nebo chyba.© jsonscraper · ilustrace vytvořená AI
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)

Kód kontroluje právě pozorovanou obálku odpovědi: vnější status a objekt profilu ig. Pokud poskytovatel formát změní, kontrola struktury zastaví zpracování konkrétního záznamu a uloží chybu, místo aby tiše vytvořila nesprávnou shodu. Skript klíč nevypisuje ani jej nevkládá do výstupního souboru.

Jak číst výsledky

Řádky se stavem matched v souboru preflight_results.csv prošly zadanými porovnáními. Hodnota review znamená, že se jeden nebo více parametrů liší od zadání; sloupec checks ukazuje které. Chyba požadavku nebo odpovědi se označuje samostatně, takže nedostupná data nevypadají jako potvrzená shoda.

Počet sledujících a příspěvků pomáhá člověku vidět aktuální snímek profilu vedle přihlášky. Jde o okamžité hodnoty z odpovědi na požadavek. Chcete-li sledovat změny v čase, ukládejte samostatné běhy s datem; jedna kontrola žádnou historii neobsahuje. Pole mohou být prázdná. Záznam pak lze stále použít k ověření identity a dalších dostupných údajů, nikoli však k porovnání chybějícího počtu.

Automatizace před spuštěním kampaně

Po ruční kontrole testovacího CSV přidejte skript do plánované úlohy nebo do kroku přípravy kampaně. Pro opakovatelnou kontrolu uchovávejte původní seznam odděleně, zaznamenávejte datum spuštění a výsledné CSV ukládejte do zabezpečeného pracovního úložiště. Pokud se uživatelské jméno může měnit, hodí se pro opakované zpracování stabilní identifikátor řádku z vašeho systému.

S růstem seznamu přidejte omezení souběžnosti, opakované pokusy pouze při dočasných síťových chybách a samostatný protokol chybových kódů bez tajných údajů. Nekonečně neopakujte požadavky s neplatným klíčem nebo chybným uživatelským jménem. Hodnotu cache_timeout přidejte pouze podle požadované zásady aktuálnosti: dokumentace uvádí, že ukládání do mezipaměti je u IGu ve výchozím nastavení vypnuto a hodnota větší než nula zapne mezipaměť na stanovenou dobu.

Kontrola profilu zkracuje ruční ověřování na konkrétní seznam výjimek: uživatelské jméno, veřejnost, ověření a dostupné počty jsou v jedné tabulce ještě před zahájením kampaně. Informace o parametrech API a aktuálních možnostech integrace najdete na stránce IG Scraper API a v dokumentaci endpointů.

Lidé

Pro tento článek zatím nejsou uvedeni žádní lidé.

Pokračujte ve čteníIG: jak odhalit problémy veřejných profilů před spuštěním kampaně
Přečtěte si další článek

Proměňte přečtené ve funkční integraci

Prozkoumejte API sociálních dat jsonscraper, testujte požadavky a sestavte další workflow.

Prozkoumat API