HTTP 200, günlük TikTok izlemesinin video topladığını garanti etmez. Arama sonuçları aweme_list veya search_item_list[].aweme_info içinde bulunabilir; yalnızca ilk diziyi okuyan bir betik hata vermeden çalışıp boş bir rapor yazabilir. Güvenilir bir kontrol, taşıma ve uygulama düzeyindeki durumu ayrı ayrı doğrular, desteklenen her iki yanıt yapısından kayıtları çıkarır ve bu çalıştırmada kaç benzersiz videonun alındığını kaydeder.
Tam olarak neleri teşhis etmelisiniz?
Şöyle bir görev düşünün: Bir ekip, ürün hakkında yeni paylaşımları fark etmek için her sabah çeşitli sorgularla herkese açık videoları topluyor. Bu sürecin önemli çıktısı; açıklama, içerik üreticisi, yayın tarihi ve mevcut ölçümlerle birlikte bulunan kayıtların tekrarlanabilir bir listesidir. Rapor aniden boşalırsa neden JSON işleme hatası, sonuç kümesinin değişmesi, daha önce bilinen videoların yeniden listelenmesi ya da gerçek bir istek hatası olabilir. aweme_list uzunluğu gibi tek bir sayı bu durumları birbirinden ayırmaya yetmez.
jsonscraper TikTok Scraper API'nin /searchVideo arama uç noktası, zorunlu keyword parametresini ve isteğe bağlı count, cursor, date_posted, sort_by ve region parametrelerini kabul eder. Uç nokta belgeleri, cursor üzerinden sayfalamayı açıklar; bu değer önceki yanıttan alındığı gibi, içeriği yorumlanmadan aktarılmalıdır. count parametresi istenen sonuç sayısını belirler; tüm paylaşımların eksiksiz alınacağını garanti etmez.
Kontrolü dört ayrı sinyale bölün
Yararlı bir tanılama dört bağımsız kontrolden oluşur. Birincisi, HTTP isteğinin başarıyla tamamlanmasıdır. İkincisi, yanıtın dışındaki status değerinin ok olması ve tiktok.status_code değerinin başarılı bir yanıta karşılık gelmesidir. Üçüncüsü, tiktok nesnesinin bulunması ve kayıtların yanıtın belgelenmiş iki konumundan da çıkarılmasıdır. Dördüncüsü, yinelenenler kaldırıldıktan sonra saklanmaya uygun kimliklere sahip kayıtların kalmasıdır. Günlüğe yinelenenleri kaldırmadan önceki ve sonraki öğe sayılarını yazın: aradaki fark, normalleştirme sırasında tekrar oluşup oluşmadığını gösterir.
Eksik alanları boş bırakın; uydurma değerlerle doldurmayın. Örneğin, belirli bir kayıtta görüntülenme sayısı bulunmayabilir. Ham JSON'u normalleştirilmiş satırın yanında saklamak, daha sonra bilginin ayrıştırma sırasında mı kaybolduğunu yoksa kaynak yanıtta zaten mi bulunmadığını kontrol etmeyi sağlar.
Python ile temel istek ve normalleştirme
jsonscraper belirtimi, temel adresi https://tiktok.evelode.com olarak tanımlar ve anahtarın license_key sorgu parametresinde gönderilmesini belirtir. Aşağıdaki örnek, belgelenmiş parametreleri kullanır; anahtar ortam değişkeninden okunur ve günlüğe yazılmaz. python -m pip install requests komutuyla bağımlılığı yükleyin, ardından ortamda JSONSCRAPER_TIKTOK_LICENSE_KEY değişkenini ayarlayın.


import json
import os
from datetime import datetime, timezone
from pathlib import Path
import requests
BASE_URL = "https://tiktok.evelode.com/searchVideo"
KEY = os.environ["JSONSCRAPER_TIKTOK_LICENSE_KEY"]
def extract_videos(payload):
"""Arama yanıtındaki bilinen iki yapıdan da videoları topla."""
tiktok = payload.get("tiktok") or {}
videos = []
for item in tiktok.get("aweme_list") or []:
if isinstance(item, dict):
videos.append(item)
for item in tiktok.get("search_item_list") or []:
if isinstance(item, dict):
aweme = item.get("aweme_info")
if isinstance(aweme, dict):
videos.append(aweme)
return videos
def main():
params = {
"license_key": KEY,
"keyword": "ürün hakkında örnek sorgu",
"count": 20,
"region": "US",
}
response = requests.get(BASE_URL, params=params, timeout=30)
response.raise_for_status()
payload = response.json()
if payload.get("status") != "ok":
raise RuntimeError("API, ok dışında bir dış durum döndürdü")
tiktok = payload.get("tiktok")
if not isinstance(tiktok, dict):
raise RuntimeError("Yanıtta tiktok nesnesi bulunmuyor")
if tiktok.get("status_code") != 0:
raise RuntimeError("Dahili status_code başarılı değer olan 0'a eşit değil")
raw_videos = extract_videos(payload)
unique = {}
for video in raw_videos:
video_id = video.get("aweme_id")
if video_id:
unique.setdefault(str(video_id), video)
snapshot = {
"collected_at": datetime.now(timezone.utc).isoformat(),
"keyword": params["keyword"],
"status": payload.get("status"),
"status_code": tiktok.get("status_code"),
"raw_items": len(raw_videos),
"unique_items": len(unique),
"has_more": tiktok.get("has_more"),
"cursor": tiktok.get("cursor"),
"videos": list(unique.values()),
}
Path("snapshots").mkdir(exist_ok=True)
stamp = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%SZ")
Path(f"snapshots/{stamp}.json").write_text(
json.dumps(snapshot, ensure_ascii=False, indent=2),
encoding="utf-8",
)
print({
"status": snapshot["status"],
"status_code": snapshot["status_code"],
"raw_items": snapshot["raw_items"],
"unique_items": snapshot["unique_items"],
"has_more": snapshot["has_more"],
})
if __name__ == "__main__":
main()
Betik, taşıma katmanını raise_for_status() ile denetler; ardından dış durumu, tiktok nesnesinin varlığını ve dahili status_code değerini kontrol eder. Sonrasında arama kayıtlarını iki yapıdan çıkarır, aweme_id değerine göre yinelenenleri kaldırır ve toplama zamanını içeren bir anlık görüntü kaydeder. Uygun kayıt bulunmasa bile dosya çalıştırmayla ilgili bilgileri içerir; böylece kaydedilmiş boş bir sonuç, hiç rapor olmamasından ayırt edilebilir.
Anlık görüntüleri ekip için bir sinyale dönüştürün
Betik için cron, CI veya iş akışı planlayıcısıyla düzenli bir zamanlama oluşturun. Her sorgunun anlık görüntülerini ayrı saklayın veya dosya adına anahtar kelimeyi ekleyin. Durum tablosunda çalıştırma zamanı, durum, çıkarılan ve benzersiz kayıt sayıları ile has_more bayrağını tutmak yeterlidir. İstek hata verdiğinde, yanıtın zorunlu bölümleri bulunmadığında veya çıkarılan kayıt sayısı kendi geçmişine kıyasla keskin biçimde değiştiğinde bildirim göndermek yararlıdır.
Bu karşılaştırma işlem hattındaki anormallikleri ortaya çıkarır, ancak nedenlerini tek başına açıklamaz. Daha az sonuç, API ya da ayrıştırıcı arızasından ziyade o anki sonuç kümesini yansıtıyor olabilir. Bu nedenle ham JSON'u saklamak, aynı parametreleri karşılaştırmak ve bulunan kimlikleri denetlemek yararlıdır. Bildirim eşiğini genel bir sayıya göre değil, kendi sorgunuza ilişkin gözlemlere dayanarak belirleyin.
Sayfalama için yanıttaki cursor değerini kullanın ve API başka sonuç olmadığını bildirdiğinde taramayı durdurun. Çalıştırmanın yeniden üretilebilmesi için kullanılan imleçleri ve istek parametrelerini saklayın. date_posted ve sort_by parametreleri zaman filtresi ve sıralama belirlemeye yarar; görev tekrarlanabilir karşılaştırmalar gerektiriyorsa bunları çalıştırmalar arasında sabit tutun.
Sonuç nasıl yorumlanır?
Bu uygulama devreye alındığında ekip üç pratik soruya doğrulanabilir yanıtlar alır: İstek tamamlandı mı, JSON'da sonuçlar nerede bulunuyor ve kaydedilen anlık görüntüye kaç benzersiz video girdi? Böylece boş bir tablodan tanılamaya geçiş kısalır: önce durumlar ve yapı, ardından parametreler, yinelenen kayıtlar ve kaynak yanıtın içeriği kontrol edilir.
Yanıt şeması ve kullanılabilir alanlar kayıttan kayda değişebilir. jsonscraper'ın 25 Ekim 2026 tarihli canlı kontrolünde arama; kimlik, açıklama, içerik üreticisi ve istatistik alanlarını döndürüyordu; belirli bir kayıttaki değerleri isteğe bağlı kabul etmek gerekir. İşlevsel bir rapor, gerçekte alınan verileri saklar ve eksik değerleri sıfırlarla değiştirmez.
Başlangıç için TikTok Scraper API sayfasını inceleyebilir, kesin uç noktaları ve parametreleri resmî API belgelerinden doğrulayabilirsiniz. Bu kontrol, izlemeyi başlatmadan önce yararlıdır: rapor, kalitesi tanılanabilen gözlemlenebilir bir çıktıya dönüşür.