jsonscraper
Rynki
Powrót do dziennika

IG: jak wykrywać problemy z profilami publicznymi przed startem kampanii

Sprawdź status, prywatność i podstawowe wskaźniki profilu przez API, aby zmienić ręczną kontrolę listy kont w powtarzalny raport

Polityka redakcyjna Zgłoś błąd

Przed rozpoczęciem kampanii można przetworzyć listę kont na IGie za pomocą skryptu i uzyskać raport JSON z odpowiedzią API dla każdej nazwy. Endpoint IG Scraper API jsonscraper zwraca status zewnętrzny i obiekt profilu; obserwowany schemat obejmuje nazwę użytkownika, informacje o prywatności i weryfikacji, liczbę postów, obserwujących oraz obserwowanych. Te pola pomagają wybrać wpisy do ręcznej weryfikacji, ale same nie wyjaśniają przyczyny braku odpowiedzi ani odpowiedzi nieoczekiwanej.

Artykuł: IG: jak wykrywać problemy z profilami publicznymi przed startem kampanii
Podsumowanie: Przed rozpoczęciem kampanii sprawdź profile na IGie automatycznie: pobierz dane przez jsonscraper, zapisz odpowiedzi i utwórz listę kont wymagających ręcznej weryfikacji.
Rola obrazu: okładka — główna idea
Sekcja: 
Temat wizualny: Zdjęcie redakcyjne przedstawiające listę kontrolną kont kampanii obok telefonu z ogólną sylwetką profilu na IGie, zaznaczonymi polami weryfikacji i małą kartą danych JSON; bez re
Wstępna kontrola zamienia listę nazw w rekordy zawierające odpowiedź API i pola do weryfikacji.© jsonscraper · utworzono za pomocą AI

Problem: lista kont wygląda poprawnie, ale czy jest gotowa do użycia?

W arkuszu kampanii mogą znaleźć się konta, które zmieniły nazwę, zawierają literówki lub mają ustawiony profil prywatny. Jeśli zespół zacznie analizować listę bez wstępnej kontroli, ktoś będzie musiał otwierać konta pojedynczo. Automatyczne sprawdzenie ogranicza ręczną pracę i pozostawia jednolity dziennik tego, co API zwróciło dla każdej żądanej nazwy.

Cel tego procesu jest ograniczony: przejść przez listę, zapisać rzeczywiste odpowiedzi HTTP i JSON, a profile z istotnymi dla kampanii cechami skierować do ręcznej weryfikacji. Raport rejestruje zaobserwowane dane; nie określa, dlaczego profil nie został zwrócony ani dlaczego żądanie zakończyło się błędem.

Co sprawdza żądanie

W dokumentacji jsonscraper opisano endpoint GET \/v1\/user\/by\/username. Wymaganym parametrem jest username; klucz przekazuje się jako license_key. Opcjonalny parametr cache_timeout włącza buforowanie na określoną liczbę sekund, a wartość 0 pozostawia je wyłączone. Obserwowany schemat poprawnej odpowiedzi zawiera zewnętrzne pole status i obiekt ig z polami profilu.

Na potrzeby diagnostyki rozdziel trzy fakty: czy udało się wykonać żądanie HTTP; czy sparsowany JSON zawiera obiekt ig; jakie pola znajdują się w tym obiekcie. Jeśli którykolwiek etap nie przebiegnie zgodnie z oczekiwaniami, skrypt może zapisać wynik techniczny i surową odpowiedź. Taki wynik wskazuje na potrzebę weryfikacji, ale nie ustala przyczyny problemu.

Przygotuj dane wejściowe i klucz

Utwórz plik usernames.txt, wpisując po jednej nazwie użytkownika w wierszu, bez znaku @. Usuń puste wiersze i duplikaty, pozostawiając tylko konta powiązane z kampanią. Aby móc później porównywać wyniki, przechowuj osobno datę kontroli i identyfikator projektu.

Przechowuj klucz w zmiennej środowiskowej JSONSCRAPER_INSTAGRAM_LICENSE_KEY, a nie w kodzie źródłowym ani repozytorium:

export JSONSCRAPER_INSTAGRAM_LICENSE_KEY="twój_klucz"
python3 check_profiles.py

Przykład korzysta ze standardowej biblioteki Pythona 3.8+ i nie wymaga instalowania pakietów HTTP.

Przykład: pobierz profile i zapisz raport

Skrypt przetwarza listę, wysyłając żądanie dla każdej nazwy z osobna. Po otrzymaniu poprawnej odpowiedzi JSON zapisuje jej rzeczywistą treść i dostępne pola profilu; w przypadku błędu HTTP lub sieci zapisuje go jako wynik techniczny. Brakujące pola pozostają ustawione na null, a surowa treść odpowiedzi zostaje zapisana, jeśli udało się ją odczytać.

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("Ustaw 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"Zapisano wyników: {len(results)}")

To przykład integracji, a nie informacja o przeprowadzonym teście. Klucz jest przekazywany w parametrze license_key, ale nie jest wyświetlany. Pełna odpowiedź może zawierać informacje, do których dostęp należy ograniczyć zgodnie z zasadami przechowywania danych obowiązującymi w zespole.

Jak odczytywać wyniki

Wpis profile_returned oznacza, że skrypt otrzymał obiekt JSON ig. Porównaj requested_username z returned_username i sprawdź informacje istotne dla procesu kampanii. Na przykład is_private: true można skierować do ręcznej weryfikacji, jeśli kampania wymaga profilu publicznego.

Artykuł: IG: jak wykrywać problemy z profilami publicznymi przed startem kampanii
Podsumowanie: Przed rozpoczęciem kampanii sprawdź profile na IGie automatycznie: pobierz dane przez jsonscraper, zapisz odpowiedzi i utwórz listę kont wymagających ręcznej weryfikacji.
Rola obrazu: ilustracja uzupełniająca 2 — inny konkretny aspekt
Sekcja: Jak odczytywać wyniki
Temat wizualny: Infografika po polsku: lista nazw → API profilu na IGie GET → kontrola HTTP i JSON → obiekt profilu oraz pola nazwy użytkownika
Schemat przedstawia drogę od listy użytkowników do raportu i oddziela pobrane dane profilu od błędów technicznych.© jsonscraper · ilustracja wygenerowana przez AI

Wyniki http_error, request_error i unexpected_or_missing_profile_object wskazują jedynie etap, na którym skrypt nie otrzymał oczekiwanej struktury. Nie dowodzą, że konto zostało usunięte, jest prywatne ani że jest niedostępne z konkretnego powodu. Zapisz odpowiedź, sprawdź nazwę i klucz, a następnie ponów żądanie lub skontaktuj się ze standardową pomocą techniczną usługi.

Jeśli brakuje pola, pozostaw je jako nieznane — nie interpretuj braku jako zera ani false. Liczniki profilu opisują stan zwrócony w chwili wysłania żądania. Znacznik czasu pozwala odróżnić ten zrzut od wyników kolejnego uruchomienia.

Automatyzacja bez utraty widoczności

Przenieś uruchamianie do harmonogramu zadań lub etapu istniejącego procesu ETL. Przechowuj datę kontroli, żądaną nazwę, wynik, status i treść odpowiedzi. W osobnym kroku możesz wczytać JSON do tabeli i wysyłać specjaliście tylko wpisy wymagające weryfikacji.

Aby wykrywać zmiany, porównuj zrzuty tego samego profilu według wybranych pól. Zmiana liczby postów to powód, by otworzyć profil i go sprawdzić, a nie dokładna data publikacji posta. Liczba obserwujących również odzwierciedla stan z chwili żądania, dlatego historia obserwacji powstaje z zapisanych zrzutów.

W przypadku dużej listy ustaw kontrolowane tempo, dodaj ograniczoną liczbę ponowień i rejestruj błędy. Nie umieszczaj klucza w logach adresów URL. Oddzielne przechowywanie listy wejściowej i wyników ułatwia ustalenie, które konta zostały już przetworzone.

Oczekiwany rezultat

Wynikiem jest plik JSON zawierający rezultat przetworzenia każdej podanej nazwy, znacznik czasu, dostępne atrybuty i zapisaną odpowiedź. Przed przekazaniem listy do kampanii można odfiltrować pasujące nazwy, profile prywatne i przypadki techniczne wymagające ręcznej weryfikacji. Kryteria kolejnego kroku określa sam zespół.

Endpoint i parametry opisano w dokumentacji IG API; informacje o produkcie znajdują się na stronie IG Scraper API. Zacznij od niewielkiej próbki, sprawdź rzeczywistą strukturę odpowiedzi i dostosuj reguły raportu do swojego procesu.

Ludzie

Nie ma jeszcze żadnych osób na liście dla tego artykułu.

Czytaj dalejJak zamienić profile na IGie w codzienną listę zmian
Przeczytaj następny artykuł

Zmień lekturę w działającą integrację

Poznaj API danych społecznościowych jsonscraper, testuj zapytania i buduj kolejne procesy.

Poznaj API