jsonscraper

TikTok içerik üreticilerinin konuları nasıl analiz edilir: Python ile uygulamalı iş akışı

TikTok Scraper API ile herkese açık akışın nasıl alınacağını, ham yanıtların nasıl saklanacağını ve doğrulanmış alanlarla tekrarlanabilir yayın analizinin nasıl hazırlanacağını öğrenin.

Yayın Politikası Hata bildirin

Bir ekip bir sonraki kampanyası için konu ararken onlarca profili elle incelemek, kısa sürede ortak bir yöntemi olmayan not yığınlarına dönüşür. Bir analist görüntülenme sayılarını, diğeri video açıklamalarını kaydeder; benzer ifadeler içeren yayınlar ise farklı tablolara düşer. Bir hafta sonra en sık neyin tekrarlandığını anlamak zorlaşır: konu mu, sunum biçimi mi, yoksa yalnızca iyi performans gösteren bir video mu?

Makale: TikTok içerik üreticilerinin konuları nasıl analiz edilir: Python ile uygulamalı iş akışı
Özet: Python ile herkese açık TikTok hesaplarını izleme adımlarını ele alıyoruz: Postman’da uç noktayı ve parametreleri doğrulama, API yanıtlarını saklama, doğrulanmış alanları standartlaştırma ve yayınları zaman içinde karşılaştırma.
Görselin rolü: kapak — ana fikir
Bölüm: 
Görsel konusu: Araştırma masasının üzerinde zaman damgalı veri kartları ve konu etiketlerinin yanında düzenlenmiş, kimlik bilgileri gizlenmiş kısa video kutucuklarını gösteren editoryal fotoğraf.
© jsonscraper · Yapay zekâyla oluşturulmuş illüstrasyon

Uygulanabilir bir yaklaşım; herkese açık hesaplardan oluşan küçük bir liste tutmak, videolarıyla ilgili bilgileri düzenli olarak yapılandırılmış biçimde almak ve her veri toplama işlemini ayrı bir anlık görüntü olarak saklamaktır. Ardından yayınları ve erişilebilir ölçümleri zaman içinde karşılaştırabilir, açıklamaları ön gruplandırmak için bir dil modelinden yararlanabilirsiniz. Aşağıda, jsonscraper’ın TikTok Scraper API’sini kullanan böyle bir Python araştırma iş akışı yer alıyor.

Veri toplamadan önce araştırma sorunuzu belirleyin

Küçük bir sporcu gıdası markasının pazarlama ekibini düşünelim. Ekip, seçilen herkese açık TikTok içerik üreticilerinde hangi konuların düzenli olarak işlendiğini ve hangi videoların elle incelenmeye değer olduğunu öğrenmek istiyor. Amaç, önceden seçilmiş hesapların yayınlarını gözlem dönemi boyunca karşılaştırmaktır; TikTok’un genel geçer bir popülerlik sıralamasını oluşturmak değil.

Bu, analizin sınırlarını belirler. Seçilen profillerin akışını toplamak, bu hesapların içeriklerini ve yayın sıklığını incelemeye yardımcı olur. Erişilebilen herkese açık sayaçlar, istek anındaki değerleriyle kaydedilebilir. Kendi reklamınızın sonuçlarını değerlendirmek için reklam sistemi veya web analitiğindeki harcamalar ve dönüşümler gibi ayrı veriler gerekir.

API’ye bağlanmadan önce araştırma protokolünü yazın: hesap listesi, başlangıç tarihi, veri toplama sıklığı, analiz edilecek alanlar ve yayınları dahil etme ölçütleri. Her isteğin zamanını kaydedin. Böylece tek bir videodaki ölçüm değişimini iki farklı gözlem kümesi arasındaki farktan ayırabilirsiniz.

Neleri toplayıp ölçmeli?

Küçük bir proje için üç veri katmanı yeterlidir. İlki, hesap kimliği ve veri toplama işleminin başlatıldığı zamandır. İkincisi, sonradan doğrulama amacıyla saklanan ham API yanıtıdır. Üçüncüsü ise sorgulama ve raporlama için standartlaştırılmış alanlardır: video kimliği, açıklama, yayın zamanı ve erişilebilir etkileşim sayaçları.

Alan adlarını ve yanıtın iç içe yapısını, kullanılan uç noktanın örnek yanıtına bakarak belirleyin. Listenin her zaman videos adını taşıdığını veya görüntülenme sayacının views olduğunu varsaymayın. Önce belgelenmiş bir istek gönderip gerçek JSON yanıtını inceleyin, sonra kendi şemanıza dönüştürme işlemini yapılandırın.

Yararlı ölçümler arasında belirli bir aralıktaki yeni yayın sayısı, yayınların konulara göre dağılımı ve aynı videonun anlık görüntüleri arasındaki herkese açık sayaç değişimleri bulunur. Sonuncusu için video kimliği eşleşen kayıtları karşılaştırın. Böylece yayımlanmış bir videonun zaman içindeki değişimi, yeni yayınların ölçümlerinden ayrı kalır.

TikTok Scraper API’ye bağlanma

TikTok Scraper API açıklamasında temel adresin https://tiktok.evelode.com olduğu belirtiliyor; uç nokta belgeleri de GET /getUserFeed rotasını ve query, max_cursor, count, region, with_pinned_posts, sort_type ve cache_timeout parametrelerini doğruluyor. İlk istek için query alanına bir profil, örneğin de count alanına sonuç sayısı girmeniz yeterlidir. license_key query string içinde gönderilir; ayarları API uç nokta belgelerinde de açıklanıyor. Entegrasyon öncesinde uç noktayı doğrulamak ve yanıtı incelemek için Postman koleksiyonunu kullanabilirsiniz.

Anahtarı bir ortam değişkeninde saklayın. Kaynak koda, depoya, tabloya veya istemci uygulamasına eklemeyin. Bir istek gönderin, başarılı bir JSON örneğini tarih ve uç nokta adıyla birlikte saklayın; bunu standartlaştırma adaptörünün ve testlerin temelinde kullanın.

Python ile temel bir istek

Belgelere göre kullanıcı akışının yanıtında dış bir durum alanı ve yayın listesinin aweme_list altında bulunduğu bir tiktok nesnesi yer alır. Kayıtlarda kimlik, açıklama, yayın zamanı, yazar ve istatistikler bulunabilir. Bazı veriler eksik olabileceğinden alanları ve değerleri aldığınız yanıt üzerinden doğrulayın.

import json
import os
from datetime import datetime, timezone
from pathlib import Path

import requests

API_KEY = os.environ["JSONSCRAPER_TIKTOK_LICENSE_KEY"]
ENDPOINT_URL = "https://tiktok.evelode.com/getUserFeed"


def fetch_user_feed(handle: str, count: int = 20) -> dict:
    response = requests.get(
        ENDPOINT_URL,
        params={
            "license_key": API_KEY,
            "query": handle,
            "count": count,
            "region": "US",
        },
        timeout=45,
    )
    response.raise_for_status()
    payload = response.json()
    if not isinstance(payload, dict):
        raise ValueError("JSON nesnesi bekleniyordu")
    if payload.get("status") != "ok":
        raise RuntimeError(f"API şu durumu döndürdü: {payload.get('status')!r}")
    tiktok = payload.get("tiktok")
    if not isinstance(tiktok, dict):
        raise ValueError("Yanıtta tiktok nesnesi yok")
    return payload


def save_raw(payload: dict, account: str, output_dir: str = "data/raw") -> Path:
    collected_at = datetime.now(timezone.utc).isoformat()
    safe_account = "".join(c for c in account if c.isalnum() or c in "-_@")
    path = Path(output_dir) / f"{safe_account}_{collected_at.replace(':', '-')}.json"
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(
        json.dumps(
            {"collected_at": collected_at, "account": account, "payload": payload},
            ensure_ascii=False,
            indent=2,
        ),
        encoding="utf-8",
    )
    return path


def normalize_items(payload: dict, account: str, collected_at: str) -> list:
    items = payload["tiktok"].get("aweme_list", [])
    if not isinstance(items, list):
        raise ValueError("tiktok.aweme_list alanı bir liste değil")

    observations = []
    for item in items:
        if not isinstance(item, dict):
            continue
        stats = item.get("statistics")
        stats = stats if isinstance(stats, dict) else {}
        author = item.get("author")
        author = author if isinstance(author, dict) else {}
        observations.append({
            "account_handle": account,
            "collected_at": collected_at,
            "video_id": item.get("aweme_id"),
            "caption": item.get("desc"),
            "published_at_epoch": item.get("create_time"),
            "author_handle": author.get("unique_id"),
            "views": stats.get("play_count"),
            "likes": stats.get("digg_count"),
            "comments": stats.get("comment_count"),
            "shares": stats.get("share_count"),
        })
    return observations


if __name__ == "__main__":
    account = "creator_handle"
    payload = fetch_user_feed(account, count=20)
    collected_at = datetime.now(timezone.utc).isoformat()
    raw_path = save_raw(payload, account)
    observations = normalize_items(payload, account, collected_at)
    print(f"Kaydedildi: {raw_path}; kayıt sayısı: {len(observations)}")

Çalıştırmadan önce JSONSCRAPER_TIKTOK_LICENSE_KEY ortam değişkenini ayarlayın ve requests kütüphanesini yükleyin. Kod HTTP yanıtını ve dış durum alanını denetler, tiktok nesnesinin varlığını doğruladıktan sonra aweme_list alanını okur. Ham JSON’u kaydeder ve belgelerde doğrulanmış alanları çıkarır; eksik değerleri boş bırakır. Dönen akış, API’nin sonuç olarak verdiği kümedir; bu nedenle raporda istek zamanı ve seçilen profil belirtilmelidir.

Anlık görüntüleri saklayın ve yayınları karşılaştırın

Küçük bir proje için SQLite veya PostgreSQL uygundur. Ham yanıtı standartlaştırılmış kayıtlardan ayrı saklayın. Gözlem tablosu için şu şemayı kullanabilirsiniz:

CREATE TABLE IF NOT EXISTS video_observations (
    account_handle TEXT NOT NULL,
    video_id TEXT NOT NULL,
    collected_at TEXT NOT NULL,
    published_at_epoch INTEGER,
    caption TEXT,
    views INTEGER,
    likes INTEGER,
    comments INTEGER,
    shares INTEGER,
    raw_file TEXT,
    PRIMARY KEY (account_handle, video_id, collected_at)
);

Her çalıştırma önceki kaydın üzerine yazmak yerine yeni bir anlık görüntü ekler. Sayaçları karşılaştırırken yalnızca aynı videoya ait her iki değer de mevcutsa farkı hesaplayın. Değişimin hangi dönemde biriktiğini açıklamak için istekler arasındaki aralığı ve gözlem zamanını rapora ekleyin.

Konuları gruplandırmak için küçük bir kategori sözlüğüyle başlayın; gerekirse daha sonra bir sınıflandırıcı veya dil modeli ekleyin. Modele temizlenmiş açıklamaları, yayın kimliklerini ve önceden belirlenmiş kategorileri verin. Kategori ve kısa gerekçe içeren yapılandırılmış bir çıktı, serbest biçimli bir özete kıyasla farklı çalıştırmalar arasında daha kolay karşılaştırılır.

Doğrulanabilir etiketlemeyle dil modeli ekleyin

Model; açıklamaları “tarifler”, “antrenmanlar”, “ürün incelemeleri” ve “kişisel hikâyeler” gibi konulara göre önceden sınıflandırabilir. Başlangıç olarak birkaç düzine yayını elle etiketleyin. Otomatik etiketleri bu örneklerle karşılaştırın, kategori tanımlarını netleştirin ve istemi veya modeli değiştirdikten sonra değerlendirmeyi yineleyin.

Yeni yayın sayısını, sayaçların medyanını ve anlık görüntüler arasındaki farkı normal kodla hesaplamak daha güvenilirdir. Modeli metin sınıflandırması ve kısa açıklamalar hazırlamak için kullanın. Ham açıklamaları ve sayısal gözlemleri doğrulamaya açık tutun.

Etiketle birlikte yayın kimliğini, istem sürümünü, işleme tarihini ve kullanılan modeli kaydedin. Bir sınıflandırma hatalıysa analist açıklamayı bulup kuralı düzeltebilir. İlk etiketi ve elle yapılan düzeltmeyi ayrı tutmak yararlıdır.

Çalıştırmayı otomatikleştirin

Elle yapılan denemeyi doğruladıktan sonra betiği cron, GitHub Actions, n8n veya Make’e taşıyın. Zamanlayıcı, veri toplamayı programa göre başlatır, hesap listesini aktarır, sonucu kaydeder ve raporu seçilen depolama alanına gönderir. Anahtarı çalışma ortamının gizli değişkenlerinde saklayın. Önce süreci tek bir hesapta sınayın, ardından listeyi genişletin.

Otomasyonu aşamalara ayırın: hesap kuyruğu, API çağrısı, ham yanıtın kaydedilmesi, standartlaştırma, anlık görüntünün yazılması ve raporun hazırlanması. Bir hesaptaki hata diğerlerinin sonuçlarını silmemelidir. Veritabanındaki çalıştırma kimliği ve benzersizlik kısıtlarıyla yeniden çalıştırmayı idempotent hâle getirebilirsiniz.

Zamanı, hesabı, uç noktayı, HTTP durumunu, süreyi, işlenen öğe sayısını ve hata açıklamasını günlüğe kaydedin. API anahtarını günlüğe yazmayın. cache_timeout parametresi /getUserFeed için belgelenmiştir; belirli bir önbellekleme süresi gerekiyorsa isteğe ekleyebilirsiniz. API belgelerinde varsayılan değer 3600 saniye olarak belirtilir.

Raporu yayımlamadan önce kaliteyi denetleyin

Standartlaştırılmış birkaç kaydı ham JSON ile karşılaştırın. Tekrarlanan veri toplamanın aynı videoyu kimliğiyle tanıdığını, tarihlerin beklendiği gibi ayrıştırıldığını, sayısal alanların uygun türde olduğunu ve eksik veri oranının bilindiğini kontrol edin. Ardından süreci tekrar çalıştırarak veritabanının eski gözlemleri koruduğunu ve yenilerini eklediğini doğrulayın.

Hesapları ve veri toplama dönemlerini birbirine karıştırmayın. Konu karşılaştırması için eşit uzunlukta dönemler kullanın veya dönem uzunluğunu raporda açıkça gösterin. Sayaçların değişimini incelerken karşılaştırılan aralıkların ölçeğinin anlaşılması için anlık görüntüler arasındaki süreyi belirtin.

Açıklamanın orijinal metnini saklayın ve temizlenmiş bir sürümü ayrıca oluşturun. Emojiler, hashtag’ler, bağlantılar ve dil özellikleri sınıflandırmayı etkileyebilir; ayrı alanlar, temizlemenin etkisini incelemeyi ve API’ye yeniden istek göndermeden kategorileri yeniden hesaplamayı sağlar.

İş akışı ne tür bir sonuç sağlar?

Birkaç döngünün ardından ekip, yayın ve anlık görüntü tablosuna, açıklamaların konulara göre ön gruplandırmasına ve seçilen dönem içinde yeni videoları gösteren bir rapora sahip olur. Bu, uzman incelemesi için videolar seçmeye, seçilen hesaplarda tekrarlanan konuları görmeye ve gözlem tarihleri arasındaki herkese açık sayaç değişimlerini doğrulamaya yardımcı olur.

Bu verilerle yayın takvimi için hipotezler oluşturabilirsiniz: aynı konunun farklı sunum biçimlerini karşılaştırabilir veya kendi içeriğinizde denenecek konuları belirleyebilirsiniz. Ticari etkiyi ölçmek için gözlemleri kurum içi kampanya verileriyle karşılaştırın.

Başlamak için küçük bir herkese açık hesap listesi seçin ve Postman istek koleksiyonunda GET /getUserFeed rotasını doğrulayın. Koda yalnızca rota belgelerinde ve gerçek yanıtında doğrulanmış parametreleri ve alan yollarını aktarın.

Herkese açık verileri sorumlu biçimde toplayın

Hesap listesini araştırma amacıyla sınırlayın, yalnızca gerekli alanları toplayın ve ham yanıtlar için bir saklama süresi belirleyin. Verileri ticari amaçla kullanmadan önce bulunduğunuz yargı bölgesindeki geçerli platform koşullarını ve kişisel veri gerekliliklerini inceleyin. Erişim denetimi ve süresi dolmuş anlık görüntülerin silinmesi, sürecin amacına uygun kalmasına yardımcı olur.

Verileri bir yapay zekâ hizmetine göndermeden önce modelin ihtiyaç duymadığı alanları kaldırın. Çıkarımın dayanağını kontrol edebilmesi için raporda yayın kimliğini ve gözlem tarihini belirtin.

Başlangıç için kısa kontrol listesi

  1. Nişi, hesap listesini, dönemi ve analiz sorularını belirleyin.
  2. Belgelerde GET /getUserFeed parametrelerini ve Postman’da gerçek yanıtı doğrulayın.
  3. Bir JSON örneği kaydedin ve standartlaştırıcıyı doğrulanmış alanlara göre yapılandırın.
  4. Ham yanıtı ve ayrı anlık görüntüleri veri toplama zamanlarıyla birlikte kaydedin.
  5. Sayısal ölçümleri kodla hesaplayın; metni ön gruplandırmak için yapay zekâdan yararlanın.
  6. Zamanlamayı, günlük kaydını, yeniden deneme işlemlerini ve saklama süresini ekleyin.

Böylece izleme, tekrarlanabilir bir araştırmaya dönüşür: her çıkarım bir yayınla ve gözlem zamanıyla ilişkilendirilir, kod ise seçilen rotanın gerçek şemasını temel alır.

People

No people listed for this article yet.

Keep readingTikTok Arama Sonuçları Python ile Nasıl Arşivlenir
Read the next article

Okuduklarınızı çalışan bir entegrasyona dönüştürün

jsonscraper sosyal veri API'lerini keşfedin, istekleri test edin ve sonraki iş akışınızı oluşturun.

API'leri Keşfet