jsonscraper

Rakip TikTok içeriklerini herkese açık metriklerle Python’da karşılaştırma

Birden fazla arama sorgusundan sonuçları toplayın, yinelenenleri ayıklayın ve videoları görüntülenme, beğeni ve yorum sayılarına göre karşılaştırın

Yayın Politikası Hata bildirin

İki ekip benzer bir ürün hakkında videolar yayınlıyor, ancak bunları farklı ölçütlere göre elle değerlendiriyor: biri görüntülenme sayılarını hatırlıyor, diğeri yorumlara bakıyor, üçüncüsü de bağlantıları sohbetlerde saklıyor. Bir hafta sonra rakiplerin hangi formatları tekrarladığını, hangi gönderilerin kayda değer tepkiler aldığını ve önceki incelemeden bu yana nelerin değiştiğini anlamak zorlaşıyor.

Çözüm, önceden belirlenmiş anahtar kelimelere göre herkese açık videolardan sınırlı ve tekrarlanabilir bir örneklem toplamak, ham JSON’u saklamak ve tutarlı alanlardan oluşan bir tablo hazırlamaktır. Böylece rastgele gözlemleri pazar hakkındaki sonuçlarla karıştırmak yerine videoları aynı iş akışı içinde karşılaştırabilirsiniz. Aşağıda, jsonscraper’ın TikTok Scraper API hizmetini kullanan, Python tabanlı küçük ölçekli bir rakip izleme süreci yer alıyor.

Önce analiz sorusunu belirleyin

Veri toplamak, sonuçlara dayanarak hangi kararı vereceğiniz önceden belliyse işe yarar. Örneğin, bir spor matarası üreticisinin pazarlama ekibi rakiplerin ürünü kısa videolarda nasıl gösterdiğini anlamak istiyor olabilir: kullanımını göstererek mi, kutu açılımıyla mı, karşılaştırmayla mı yoksa kullanıcı tepkisiyle mi? Bunun için TikTok’un tamamını kopyalamak gerekmez. API’nin bu sorgular için döndürdüğü videoları tekrar tekrar izlemek ve birkaç hedef arama sorgusu belirlemek yeterlidir.

Soruyu sınanabilir biçimde kurun: “Belirlediğimiz beş anahtar ifadeyle ilgili yayımlanmış videolarda hangi anlatım ve gösterim formatları görülüyor, bulunan videolardan hangilerinin güncel görüntülenme ve etkileşim sayıları en yüksek?” Bu ifade, analizin iki katmanını birbirinden ayırır. Metin ve açıklama, yaratıcı yaklaşımları gruplandırmaya yardımcı olur; görüntülenme, beğeni, yorum ve paylaşım sayaçları ise toplama anındaki herkese açık tepkinin anlık görüntüsünü verir.

Bu anlık görüntü, hangi videoları elle inceleyeceğinize öncelik vermek ve değişiklikleri izlemek için yararlıdır. Belirli sorgular, parametreler ve çalıştırma zamanı için döndürülen videoları tanımlar. Bu nedenle doğru sonuç, “örneklemimizde kutu açılımı videolarına sık rastlanıyor” veya “bu video grubunun mevcut görüntülenme medyanı daha yüksek” şeklinde ifade edilir. İşte bu ölçekteki analiz, ekibin kendi içerikleri için varsayımlar seçmesine yardımcı olur.

Küçük bir veri işlem hattı tasarlayın

Çalışmayı dört aşamaya ayırın: toplama, ham yanıtı saklama, normalleştirme ve analiz. Toplama aşamasında, onaylanmış her anahtar kelime için API’ye istek gönderilir. Ham yanıt, çıkarılan değerlerin sonradan yeniden kontrol edilebilmesi için tümüyle saklanır. Normalleştirme, iç içe geçmiş JSON yapısını tablo satırlarına dönüştürür; analiz ise metrikleri hesaplar ve videoları anahtar kelimelere veya elle atanmış formatlara göre gruplandırır.

  • Toplama. Her anahtar kelime için aynı bölge ve sıralama ayarlarıyla belirli sayıda sonuç isteyin.
  • Arşiv. Çıkarılan değerleri denetleyebilmek için ham JSON’u ve alınma zamanını kaydedin.
  • Normalleştirme. Video kimliğini, bağlantıyı, açıklamayı, yazarı, yayın zamanını ve mevcut sayaçları tutun.
  • Kalite kontrolü. Kimliğe göre yinelenenleri ayıklayın, eksik değerleri işaretleyin ve videoya ulaşılmasını sağlayan anahtar kelimeyi saklayın.
  • Karşılaştırma. Yalnızca mevcut ham alanlardan kendi metriklerinizi hesaplayın ve grupları aynı anlık görüntü içinde karşılaştırın.

Bu yaklaşım, bağlantı listesinden daha kullanışlıdır; çünkü her satırın kaynağını korur ve aynı videonun yeniden bulunmasıyla yeni bir içeriği birbirinden ayırmanıza olanak tanır. Toplama tarihini de saklayın: herkese açık sayaçlar değişebilir, bu nedenle bugünkü yanıttaki değer videonun kalıcı bir özelliği gibi yorumlanmamalıdır.

TikTok Scraper API neleri destekliyor?

Metin sorgusuyla video aramak için jsonscraper belgelerinde https://tiktok.evelode.com temel adresindeki GET /searchVideo rotası açıklanıyor. Zorunlu parametre keyword; ayrıca count, cursor, region, date_posted, sort_by ve cache_timeout parametreleri de kullanılabiliyor. Belgelerde most-liked, relevance ve date-posted sıralama seçenekleri; yayın dönemleri arasında ise yesterday, this-week, this-month, last-3-months, last-6-months ve all-time belirtiliyor. Parametre adlarını ve işlevlerini TikTok rotaları kılavuzundan doğrulayın.

Anahtar, license_key sorgu parametresiyle iletilir. Çalışan bir betikte anahtarı kaynak dosyasına, tabloya veya çalıştırma günlüğüne koymak yerine JSONSCRAPER_TIKTOK_LICENSE_KEY ortam değişkeninde saklayın. Yanıtta önce üst düzey status değerini kontrol edin, ardından tiktok nesnesini ayrıştırın. Arama yanıtı, aweme_list listesini ve video bilgilerinin aweme_info içinde yer aldığı search_item_list listesini içerebilir. Aşağıdaki kod her iki yapıyı da destekler.

Doğrulanmış arama yanıtı örneklerinde video kimliği, açıklama, yayın zamanı, bağlantı, yazar bilgileri ve görüntülenme, beğeni, yorum, kaydetme ve paylaşım gibi metrikler bulunur. Belirli bir kayıtta bazı alanlar olmayabilir. Tabloda bu değerleri sıfırla değiştirmek yerine boş bırakın: sıfır ölçülmüş bir değeri, boş hücre ise alınan nesnede değerin bulunmadığını ifade eder.

Python ile temel örnek

Aşağıdaki betik her anahtar kelime için bir istek gönderir, tam yanıtı JSON dosyasına kaydeder ve tablo veya sonraki işlemler için bir CSV oluşturur. Python 3.8+ ile çalışır ve yalnızca standart kütüphaneyi kullanır. Çalıştırmadan önce lisans anahtarını ortam değişkeni olarak ayarlayın. Anahtar kelime listesini ve sonuç sayısını kullanım senaryonuza göre düzenleyin.

import csv
import json
import os
import time
from datetime import datetime, timezone
from pathlib import Path
from urllib.parse import urlencode
from urllib.request import urlopen

BASE_URL = "https://tiktok.evelode.com/searchVideo"
LICENSE_KEY = os.environ["JSONSCRAPER_TIKTOK_LICENSE_KEY"]
KEYWORDS = ["termos matara", "spor matarası", "matara kutu açılımı"]
REGION = "US"
COUNT = 20


def request_search(keyword):
    params = {
        "license_key": LICENSE_KEY,
        "keyword": keyword,
        "count": COUNT,
        "region": REGION,
        "sort_by": "relevance",
        "date_posted": "this-month",
    }
    url = BASE_URL + "?" + urlencode(params)
    with urlopen(url, timeout=60) as response:
        return json.loads(response.read().decode("utf-8"))


def extract_videos(payload):
    if payload.get("status") != "ok":
        raise RuntimeError("API, ok olmayan bir durum döndürdü")

    tiktok = payload.get("tiktok") or {}
    rows = []

    for item in tiktok.get("aweme_list") or []:
        if isinstance(item, dict):
            rows.append(item)

    for item in tiktok.get("search_item_list") or []:
        video = item.get("aweme_info") if isinstance(item, dict) else None
        if isinstance(video, dict):
            rows.append(video)

    return rows, tiktok


Path("raw").mkdir(exist_ok=True)
seen = set()
records = []

for keyword in KEYWORDS:
    payload = request_search(keyword)
    collected_at = datetime.now(timezone.utc).isoformat()
    safe_name = keyword.replace(" ", "_")
    raw_path = Path("raw") / (safe_name + ".json")
    raw_path.write_text(json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8")

    videos, tiktok = extract_videos(payload)
    for video in videos:
        video_id = video.get("aweme_id")
        if not video_id:
            continue
        dedupe_key = (keyword, video_id)
        if dedupe_key in seen:
            continue
        seen.add(dedupe_key)

        stats = video.get("statistics") or {}
        author = video.get("author") or {}
        records.append({
            "collected_at": collected_at,
            "keyword": keyword,
            "video_id": video_id,
            "url": video.get("share_url"),
            "created_at_epoch": video.get("create_time"),
            "description": video.get("desc"),
            "author": author.get("nickname"),
            "username": author.get("unique_id"),
            "views": stats.get("play_count"),
            "likes": stats.get("digg_count"),
            "comments": stats.get("comment_count"),
            "shares": stats.get("share_count"),
            "saves": stats.get("collect_count"),
            "cursor": tiktok.get("cursor"),
        })

    time.sleep(1)

fieldnames = [
    "collected_at", "keyword", "video_id", "url", "created_at_epoch",
    "description", "author", "username", "views", "likes", "comments",
    "shares", "saves", "cursor",
]
with open("tiktok_creatives.csv", "w", newline="", encoding="utf-8") as output:
    writer = csv.DictWriter(output, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(records)

print("tiktok_creatives.csv dosyasına", len(records), "video satırı kaydedildi")

Betik, anahtar kelimeyi videonun yanında saklar; bu, aynı video birden fazla sorguyla bulunduğunda önemlidir. Burada yinelenenleri ayıklama her anahtar kelimenin kendi içinde yapılır, dolayısıyla aynı kimlik farklı sorgular için ayrı satırlarda yer alabilir. Tekrarsız tek bir tablo istiyorsanız (keyword, video_id) anahtarını video_id olarak değiştirin ve anahtar kelimeleri bir listede ya da ayrı bir ilişki tablosunda biriktirin.

Kod, her kelime için bilerek yalnızca bir istek gönderir ve sayfaları otomatik olarak dolaşmaz. Sonraki sayfaya geçmek gerekiyorsa belgelerde cursor, önceki yanıttan alınan ve sonuçları ilerletmek için kullanılan değer olarak tanımlanır. Bunu kendiniz hesaplamadan, opak bir değer olarak iletin. Belirli iş akışınız için sayfalama yapısını bir test yanıtında doğrulayın ve yeni sonuç ya da sonraki imleç olmadığında durun.

Karşılaştırılabilir bir tablo oluşturma

CSV’yi bir elektronik tabloda açabilir, veritabanına yükleyebilir veya Python’da toplulaştırma hesapları için kullanabilirsiniz. İlk raporda satırları toplama tarihine, anahtar kelimeye ve video formatına göre gruplandırın. Formatı, açıklamayı ve videonun kendisini inceledikten sonra etiketlemek daha doğru olur: örneğin “ürün gösterimi”, “kutu açılımı”, “inceleme” veya “karşılaştırma”. Küçük bir örneklem elle sınıflandırılabilir ya da modele taslak etiketler önerdirilip bir kişi tarafından doğrulanabilir.

Metinleri otomatik etiketleyecekseniz modele yalnızca gerekli alanları, örneğin açıklama ve kimliği iletin ve önceden onaylanmış bir listeden tek bir etiket döndürmesini isteyin. Orijinal açıklamayı sınıflandırma sonucundan ayrı saklayın. Böylece analist tartışmalı bir etiketi denetleyebilir ve taksonomi değiştiğinde API’ye yeniden istek göndermeden raporu tekrar hesaplayabilir.

Karşılaştırma metrikleri için aynı toplama zamanındaki değerleri kullanın. Örneğin, her iki alan da mevcutsa ve görüntülenme sıfırdan büyükse beğeni/görüntülenme oranını likes / views olarak hesaplayabilirsiniz. Benzer şekilde yorum veya paylaşım oranı da hesaplanabilir. Bu oranlar, belirli videonun mevcut herkese açık sayaçlarını tanımlar; belirli bir kitlenin erişimini, videonun tamamlanma oranını veya dönüşümü ölçmez. İş kararları için bunları kendi kampanyanızla karşılaştırın ve başkasının formatını tekrarlamanın garantili sonucu olarak değil, fikir seçmeye yardımcı bir gösterge olarak kullanın.

Örneklemde çok büyük birkaç video varsa medyan, ortalamadan daha kullanışlı olabilir. Gruplar arasındaki görüntülenme ve etkileşim medyanlarını yalnızca toplama kuralı aynı olduğunda karşılaştırın: aynı sorgu kümesi, bölge, zaman filtresi ve birbirine yakın anlık görüntü zamanları. Çalıştırma parametrelerini tarihle birlikte kaydedin. Arama veya örneklemdeki değişiklikler satırların bileşimini de değiştiriyorsa iki rapor arasındaki fark, yöntemdeki değişikliği yansıtıyor olabilir.

Yeniden çalıştırma ve değişiklikleri izleme

Tek seferlik analizi izlemeye dönüştürmek için betiği, örneğin her gün veya haftada bir, zamanlanmış olarak çalıştırın ve her kayda toplama tarihini ekleyin. Her video için “anlık görüntü zamanı — sayaç değeri” çiftlerini saklayın. Böylece her ölçümü ayrı ayrı koruyarak herkese açık göstergelerin gözlemler arasında nasıl değiştiğini görebilirsiniz. Eski sayaçları güncel değerlerle değiştirmeyin; aksi hâlde değişim bilgisi kaybolur.

Üretim ortamında ham JSON’u yerel klasörden nesne depolamaya veya başka bir arşivleme sistemine taşıyın; normalleştirilmiş satırları ise video kimliği ve toplama zamanı birleşimi gibi benzersiz bir anahtara sahip bir veritabanında tutun. Gizli anahtarı içermeyen bir hata günlüğü, yeniden deneme sınırı ve başarısız isteklerde bildirim ekleyin. Geçici bir hata durumunda isteği gecikmeyle tekrarlayabilirsiniz; yapısal bir hata varsa yanıtı saklayıp çalıştırmayı inceleme gerektiriyor olarak işaretlemek daha iyidir. Böylece hata sessizce boş bir rapora dönüşmez.

cursor değerini kalıcı bir araştırma kimliği olarak kullanmayın: bu, sonuç akışını sürdürmeye yarayan bir işaretçidir. İlgili isteğin parametreleriyle birlikte saklayın, yalnızca o sonuç akışını sürdürmek için kullanın ve farklı anahtar kelimelerin sayfalarını birbirine karıştırmayın. Ayrıca işlenen gerçek sonuç sayısını kaydedin: istenen count değeri yanıtın hedeflenen boyutunu belirtir, eşleşen tüm gönderilerin kapsanacağını garanti etmez.

İş akışını genişletme

Arama örneklemi fazla gürültülüyse belirli herkese açık profilleri veya hashtag’leri ayrıca izleyebilirsiniz. Belgelerde sorgu ve sayfalama parametreleriyle birlikte /getUserFeed ve /getHashtagFeed rotaları yer alıyor. Bunlar, kendilerine özgü devam kuralları olan farklı örneklemlerdir: profil akışında max_cursor, hashtag akışında ise cursor kullanılır. Bunları ayrı kaynaklar olarak ekleyin ve arama sonuçlarını profil ya da hashtag gönderileriyle karıştırmamak için kaynak türünü ve parametreleri saklayın.

Kendi altyapısı olmayan bir ekip, CSV’yi API aracılığıyla Google Sheets’e aktarabilir: Google Sheets API belgeleri, hücre değerlerinin okunup yazılmasını açıklar. Ham çalıştırmalar, normalleştirilmiş videolar ve özet için ayrı sayfalar ekleyin. Bu yöntem ortak etiketleme için kullanışlıdır; geçmiş verinin hacmi elektronik tabloyu kullanışsız hâle getirdiğinde aynı alanları ve veri kökeni bilgilerini koruyarak SQL deposuna geçebilirsiniz.

Bir yapay zekâ ajanının uygun rolü, önceden toplanmış ve normalleştirilmiş kayıtların kısa bir özetini hazırlamaktır: açıklamaları gruplandırmak, formatlar önermek ve olağan dışı değerleri belirtmek. Ajanın, küçük bir sonuç kümesinden tüm platform hakkında olgular çıkarmasını istemeyin. Dönemi, sorgu listesini ve satır sayısını iletin; video kimliklerine atıf yapmasını, belirsiz veya eksik alanları boş bırakmasını isteyin. Ardından analist, saklanan bağlantılardan örnekleri kontrol eder.

Sonuçta ne elde edersiniz?

Kurulum tamamlandığında ekip; bulunan videoların kimliklerini, bağlantılarını, açıklamalarını, yazarlarını, yayın zamanlarını ve mevcut herkese açık sayaçlarını içeren, tekrarlanabilir bir kayıt listesine sahip olur. Saklanan ham yanıt, dönüşüm adımlarını yeniden denetleme olanağı verir; CSV ise videoları hızla sıralamayı, anahtar kelimeye göre filtrelemeyi ve farklı tarihlerdeki anlık görüntüleri karşılaştırmayı sağlar. Buradan haftalık bir özet hazırlayabilirsiniz: hangi formatlar tekrarlandı, hangi gönderiler incelenmeye değer ve kendi içeriklerinizde hangi yaratıcı fikirler test edilmeli?

Pratik sonuç, rakipleri evrensel biçimde sıralayan bir liste değil, kaynağı açıkça tanımlanmış ve disiplinli biçimde oluşturulmuş bir örneklemdir. Kalitesi; seçilen sorgulara, filtrelere ve gözlem dönemine bağlıdır. Bu nedenle toplama parametrelerini saklayın, videoları tek tek elle kontrol edin ve mevcut metrikleri yorumlardan ayırın. Böyle bir süreç, dağınık yer imlerinin yerine karşılaştırılabilir veriler koyar ve içeriklerin somut örnekler üzerinden tartışılmasına yardımcı olur.

Arama rotasını ve parametreleri jsonscraper’ın resmi belgelerinden doğrulayabilir, hizmetin açıklamasına ve erişimine TikTok Scraper API sayfasından ulaşabilirsiniz. Birkaç arama ifadesiyle başlayın, test amaçlı tek bir yanıtı saklayın ve zamanlanmış çalıştırmayı kurmadan önce yapıyı kontrol edin.

People

No people listed for this article yet.

Keep readingTikTok Trendlerinin Erken Sinyalleri Nasıl Bulunur: Arama Sonuçlarının Otomatik İzlenmesi
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