jsonscraper
Markkinat
Takaisin lehteen

Tarkista IG-profiilit kampanjabriifiä vasten ennen julkaisua API:n avulla

Python-skripti tarkistaa käyttäjänimen, julkisuuden, vahvistuksen ja laskurit sekä merkitsee poikkeamat manuaalista tarkistusta varten.

Toimituksellinen linjaus Ilmoita virheestä

Ennen kampanjan käynnistämistä voit verrata IG-tilien luetteloa briifiin automaattisesti ja saada CSV-tiedoston, jossa ovat vain huomiota vaativat rivit. Skripti hakee kunkin rivin profiilin, vertaa käyttäjänimeä, yksityisyysasetusta ja vahvistusta odotettuihin arvoihin sekä tallentaa saatavilla olevat laskurit. Näin toistuvasta manuaalisesta tarkistuksesta tulee selkeä tarkistusvaihe ennen kampanjan siirtämistä tuotantoon.

Tavoite: löydä poikkeamat ennen julkaisua

Kampanjataulukossa on yleensä tilin nimi ja muutamia odotuksia: profiilin tulee olla julkinen, käyttäjänimen tulee vastata sovittua ja vahvistusmerkin tulee täsmätä briifiin kirjattuun tietoon. Tilin nimi voi vaihtua, profiili muuttua yksityiseksi tai kyseessä voi olla toinen samanniminen profiili listan kokoamisen ja kampanjan käynnistämisen välillä. Rivien manuaalinen tarkistaminen on vaikea toistaa, ja poikkeamien nopea löytäminen on hankalaa.

Artikkeli: Tarkista IG-profiilit kampanjabriifiä vasten ennen julkaisua API:n avulla
Yhteenveto: Tarkista kampanjabriifin IG-profiilit automaattisesti ennen kampanjan käynnistämistä: hae tiedot dokumentoidusta jsonscraper-endpointista, vertaa niitä odotettuihin arvoihin ja tallenna selkeä luettelo poikkeamista.
Kuvan rooli: kansikuva – keskeinen ajatus
Osio: Tavoite: löydä poikkeamat ennen julkaisua
Visuaalinen aihe: toimituksellinen asetelma: kampanjasuunnittelulomake, jossa on useita erilaisia IG-profiileja
Esitarkistus vertaa profiilia briifin odotettuihin tietoihin ja nostaa manuaalista arviointia vaativat rivit esiin.© jsonscraper · luotu tekoälyllä

Tällaiseen esitarkistukseen riittää, että profiili haetaan käyttäjänimen perusteella. jsonscraperin julkaistussa dokumentaatiossa mainitaan reitti GET /v1/user/by/username ja parametri username; lisäksi käytettävissä on valinnainen cache_timeout. Vastauksessa voi olla käyttäjänimi, koko nimi, private- ja verified-tiedot, julkaisujen, seuraajien ja seurattavien määrä sekä esittelyteksti. Lue kentät varsinaisesta vastauksesta: skeeman tilannekuva vahvistaa niiden esiintymisen havaitussa vastauksessa, mutta arvot voivat vaihdella tai puuttua.

Valmistele taulukko ja tarkistussäännöt

Luo CSV-tiedosto profiles.csv, jossa on sarakkeet username, expected_private ja expected_verified. Syötä kahteen viimeiseen sarakkeeseen odotetut arvot true tai false ja kirjoita käyttäjänimi ilman @-merkkiä. Jos profiilin odotettu arvo ei ole tiedossa, jätä solu tyhjäksi: skripti ei saa tulkita odotuksen puuttumista virheeksi.

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

Tässä tarkistuksessa on kaksi rajattua tavoitetta: selvittää, vastaako saatu käyttäjänimi pyydettyä, ja havaita erot yksityisyydestä ja vahvistuksesta kirjattuihin odotuksiin. Laskurit ja esittelyteksti tallennetaan kontekstiksi ja manuaalista arviointia varten, eikä niitä tulkita näytöksi yleisön laadusta tai tekijän soveltuvuudesta kampanjaan.

Ota IG Scraper API käyttöön

Tallenna käyttöavain ympäristömuuttujaan JSONSCRAPER_INSTAGRAM_LICENSE_KEY. Älä kirjoita salaisuutta CSV-tiedostoon, lähdekoodiin tai ajolokeihin. IG-endpointin ohje kuvaa reitin ja parametrien nimet; API:n perusosoite on https://ig.jsonscraper.com, ja avaimen parametrin nimi on license_key.

Tee yksi koepyyntö testirivillä ennen koko luettelon käsittelyä, tarkista JSON-rakenne ja varmista, että tililläsi on käyttöoikeus. Koska endpoint ottaa vastaan käyttäjänimen, tässä yksinkertaisessa käyttötapauksessa ei tarvita tunnettua profiilitunnistetta eikä muita reittejä.

Esimerkki: pyynnöt, vertailu ja CSV poikkeamista

Seuraava skripti toimii Python 3.8:ssa ja sitä uudemmissa versioissa. Se lukee CSV-tiedoston, tekee yhden GET-pyynnön profiilia kohti, tarkistaa HTTP-vastauksen tilan ja tallentaa alkuperäiset keskeiset kentät yhdessä vertailun tuloksen kanssa. Asenna riippuvuus komennolla python -m pip install requests ja vie avain ympäristömuuttujaksi ennen käynnistystä.

Artikkeli: Tarkista IG-profiilit kampanjabriifiä vasten ennen julkaisua API:n avulla
Yhteenveto: Tarkista kampanjabriifin IG-profiilit automaattisesti ennen kampanjan käynnistämistä: hae tiedot dokumentoidusta jsonscraper-endpointista, vertaa niitä odotettuihin arvoihin ja tallenna selkeä luettelo poikkeamista.
Kuvan rooli: havainnollistava kuva 2 – eri yksityiskohta
Osio: Esimerkki: pyynnöt, vertailu ja CSV poikkeamista
Visuaalinen aihe: venäjänkielinen infografiikka, joka esittää vahvistetun datan polun
Kaavio havainnollistaa polkua CSV-tiedostosta profiili-endpointiin ja vertailutuloksiin: vastaavuus, manuaalinen tarkistus tai virhe.© jsonscraper · tekoälyn luoma kuvitus
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)

Koodissa tarkistetaan nimenomaan havaittu vastauskuori: ulompi status ja profiiliobjekti ig. Jos palveluntarjoaja muuttaa muotoa, rakennetarkistus keskeyttää kyseisen tietueen käsittelyn ja tallentaa virheen sen sijaan, että loisi huomaamatta virheellisen vastaavuuden. Skripti ei tulosta avainta eikä tallenna sitä tulostiedostoon.

Tulosten tulkinta

preflight_results.csv-tiedoston rivit, joiden tila on matched, läpäisivät määritetyt vertailut. Arvo review tarkoittaa, että yksi tai useampi tieto eroaa briifistä; checks-sarake kertoo, mikä tieto poikkeaa. Pyyntö- tai vastausvirhe merkitään erikseen, joten tietojen puuttuminen ei näytä vahvistetulta vastaavuudelta.

Seuraajien ja julkaisujen määrä auttaa näkemään profiilin nykytilanteen hakemuksen rinnalla. Kyseessä ovat pyynnön vastaushetken arvot. Tallenna erilliset, päivämäärällä varustetut ajot, jos haluat arvioida muutoksia ajan mittaan; yksittäinen tarkistus ei sisällä historiaa. Kentät voivat olla tyhjiä, jolloin tietuetta voi edelleen käyttää tunnisteen ja muiden saatavilla olevien ominaisuuksien tarkistamiseen, mutta puuttuvan laskurin vertaamiseen se ei sovellu.

Automatisointi ennen kampanjan käynnistämistä

Kun olet tarkistanut testin CSV-tiedoston manuaalisesti, lisää skripti ajastettuun tehtävään tai kampanjan valmisteluvaiheeseen. Toistettavaa tarkistusta varten säilytä alkuperäinen luettelo erillään, kirjaa ajon päivämäärä ja tallenna tulos-CSV suojattuun työskentelytilaan. Jos käyttäjänimi voi vaihtua, käytä uudelleenkäsittelyssä järjestelmäsi pysyvää rivitunnistetta.

Kun luettelo kasvaa, lisää rinnakkaisuusrajoitus, tee uusia yrityksiä vain tilapäisten verkkovirheiden yhteydessä ja pidä erillistä virhekoodilokia ilman salaisuuksia. Älä yritä loputtomasti uudelleen virheellisellä avaimella tai virheellisellä käyttäjänimellä. Lisää cache_timeout vain tarpeisiisi sopivan tuoreuskäytännön mukaisesti: dokumentaation mukaan IGin välimuistitus on oletuksena pois käytöstä, ja nollaa suurempi arvo ottaa välimuistin käyttöön määritetyksi ajaksi.

Profiilin tarkistus vähentää manuaalisen vertailun konkreettiseksi poikkeamaluetteloksi: nimi, julkisuus, vahvistus ja saatavilla olevat laskurit ovat samassa taulukossa ennen kampanjan alkua. API-parametreja ja ajantasaisia integraatiovaihtoehtoja varten katso IG Scraper API -sivu ja reittien dokumentaatio.

Ihmiset

Tämän artikkelin luettelossa ei ole vielä ihmisiä.

Jatka lukemistaIG: näin tunnistat julkisten profiilien ongelmat ennen kampanjaa
Lue seuraava artikkeli

Muuta lukemasi toimivaksi integraatioksi

Tutustu jsonscraperin sosiaalisen datan rajapintoihin, testaa pyyntöjä ja rakenna seuraava työnkulkusi.

Tutki API:t