Alıcılar TikTok videolarında aynı soruyu tekrar tekrar soruyorsa destek ekibinin, incelenebilecek özgün videoların ve ifadelerin listesini alması yararlı olur. Birkaç sorgu için arama sonuçlarını toplayıp video kimliklerine göre birleştirerek ve örneklemi manuel etiketleme için ileterek işe başlayabilirsiniz.
Aşağıda, döndürülen sonuçları toplayan ve video bağlantıları, açıklamalar ve her videonun hangi arama ifadeleriyle bulunduğunu içeren bir CSV oluşturan bir Python betiği yer alıyor. Bu betik aramalar arasındaki kesişimleri görmenize yardımcı olur; ancak anlamsal olarak benzer soruları kendi başına belirlemez. Bu kararı bir uzman veya sonrasında doğrulama yapılan ayrı bir sınıflandırıcı verir.
Veri toplama hangi soruya yanıt vermeli?
Bir termos bardak satan bir ekibin herkese açık videolarda nelerin sorulduğunu anlamak istediğini düşünelim. “Termos bardak sızdırıyor” sorgusu şikâyet, inceleme ve kullanım talimatı videoları döndürebilir. “Termos bardak nasıl yıkanır” sorgusu ise farklı bir örneklem sağlar. Birkaç ifade, destek incelemesi ve içerik planı için gözden geçirilebilecek bir örnek kümesi oluşturur.

Betik, her kayıtta yayın kimliği, açıklama, bağlantı ve videonun hangi arama ifadelerinde bulunduğunu gösteren bir liste içeren bir tablo oluşturur. Bir videonun birden fazla sonuç kümesinde yer alması, arama sonuçlarının kesiştiğini gösterir; ancak videoda tekrarlanan bir soru sorulduğunu kanıtlamaz. Soru kuyruğu oluşturmak için bağlantıları açın, bağlamı kontrol edin ve doğrulanmış ifadeleri bir konuya atayın.
Bu iş akışı, veri toplamayı otomatikleştiren geliştiriciler ve inceleme için tekrarlanabilir bir kümeye ihtiyaç duyan analistler için yararlıdır. Özgün videoya geri dönebilmek, talimatları değiştirmeden veya yeni içerik hazırlamadan önce bulguyu doğrulamayı sağlar.
Arama hangi verileri döndürür?
\/searchVideo yolu ve parametreleri TikTok API başvuru kılavuzunda listelenmiştir. keyword zorunludur; ek parametreler arasında count, cursor, region, date_posted, sort_by ve cache_timeout bulunur. İstek, license_key parametresiyle kimlik doğrulamasından geçer. Aşağıdaki örnekte bir arama ifadesi ve sayfa boyutu kullanılıyor.
Yanıtın doğrulanmış biçiminde üst düzey bir status ve bir tiktok nesnesi bulunur. Öğelerde kimlik, açıklama, bağlantı, yazar bilgileri ve görüntülenme ile yorum sayısı dâhil istatistikler yer alabilir. Bazı alanlar bulunmayabileceğinden, CSV’de bu değerler sıfıra dönüştürülmek yerine boş bırakılır.
Arama yanıtında iki öğe yapısı desteklenir: öğeler aweme_list içinde veya search_item_list[].aweme_info içinde bulunabilir. Normalleştirici her iki biçimi de işler. Kod ayrıca tiktok nesnesinin varlığını kontrol ederek beklenmedik bir yanıt biçimini başarılı ama boş bir sonuç kümesi sanmayı önler.
Python ile hazır veri toplama betiği
Örnek, Python 3.8+ ve requests kitaplığıyla uyumludur. Her ifade için bir istek gönderir, HTTP yanıtını ve API durumunu denetler, kayıtları kimliğe göre birleştirir, eşleşen arama ifadelerini saklar ve CSV yazar. Anahtar ortam değişkeninden okunur ve ekrana yazdırılmaz.

import csv
import os
import sys
import requests
BASE_URL = "https:\/\/tiktok.evelode.com\/searchVideo"
KEY = os.environ.get("JSONSCRAPER_TIKTOK_LICENSE_KEY")
QUERIES = [
"термокружка протекает",
"как мыть термокружку",
"термокружка не держит тепло",
]
if not KEY:
sys.exit("Задайте JSONSCRAPER_TIKTOK_LICENSE_KEY")
def extract_items(payload):
data = payload.get("tiktok")
if not isinstance(data, dict):
raise RuntimeError("В ответе отсутствует объект tiktok")
items = list(data.get("aweme_list") or [])
for entry in data.get("search_item_list") or []:
video = entry.get("aweme_info") if isinstance(entry, dict) else None
if isinstance(video, dict):
items.append(video)
return items
rows = {}
for query in QUERIES:
response = requests.get(
BASE_URL,
params={"license_key": KEY, "keyword": query, "count": 20},
timeout=30,
)
response.raise_for_status()
payload = response.json()
if payload.get("status") != "ok":
raise RuntimeError("API вернул статус, отличный от ok")
for item in extract_items(payload):
video_id = item.get("aweme_id")
if not video_id:
continue
stats = item.get("statistics") or {}
author = item.get("author") or {}
row = rows.setdefault(video_id, {
"video_id": video_id,
"description": item.get("desc"),
"share_url": item.get("share_url"),
"author": author.get("nickname"),
"play_count": stats.get("play_count"),
"comment_count": stats.get("comment_count"),
"matched_queries": set(),
})
row["matched_queries"].add(query)
fields = ["video_id", "description", "share_url", "author",
"play_count", "comment_count", "matched_queries"]
with open("tiktok_questions.csv", "w", newline="", encoding="utf-8-sig") as file:
writer = csv.DictWriter(file, fieldnames=fields)
writer.writeheader()
for row in rows.values():
output = dict(row)
output["matched_queries"] = " | ".join(sorted(row["matched_queries"]))
writer.writerow(output)
python -m pip install requests komutuyla bağımlılığı kurun, işlem ortamında JSONSCRAPER_TIKTOK_LICENSE_KEY değişkenini tanımlayın ve dosyayı çalıştırın. Anahtarı kaynak koda, CSV’ye veya günlüklere koymayın. Zamanlanmış çalıştırmalar için betiği, değişkene görevin erişebildiği güvenli bir ortamda yürütün.
CSV’yi soru kuyruğuna dönüştürme
Veri topladıktan sonra videoları açın, gerçek soruları elle belirleyin ve doğrulanmış ifadeleri “sızdırmazlık”, “bakım” veya “ısıyı koruma” gibi konulara göre gruplandırın. Arama ifadesi yayını bulmaya yardımcı olur; ancak video açıklaması ve sorguların eşleşmesi, bağlamı incelemenin yerini tutmaz.
Bir dil modeli kullanıyorsanız, açıklamayı modele verip kısa bir konu etiketi ve olası bir soru önermesini isteyin. Bir uzmanın sınıflandırmanın dayanağını kontrol edebilmesi için özgün metni, bağlantıyı ve modelin sonucunu birlikte saklayın. Açıklamada bulunmayan, modelin önerdiği bir ifadeyi videoda kelimesi kelimesine sorulmuş gibi sunmayın.
Bulunan kayıt sayısı yalnızca belirli sorgular için döndürülen sonuçları ifade eder. Tartışmaların veya talebin toplam hacmini ölçmez. İç rapor için çalıştırma tarihini, özgün ifadeyi, kimliği ve API’nin işlenmemiş yanıtını saklayın. Böylece sonraki çalıştırmaların sonuçlarını karşılaştırabilir ve yeni kimlikleri ayrıca belirtebilirsiniz.
Örnekte otomatik sayfalama özellikle yer almıyor. Sonraki sayfalar için belgelerde cursor parametresi belirtiliyor; bu parametrenin değeri önceki yanıttan alınarak değiştirilmeden sonraki isteğe aktarılır. Tek bir sayfa, tüm sonuçları değil, yalnızca alınan sonuç grubunu temsil eder.
Ekip ne görecek?
tiktok_questions.csv dosyası, belirtilen ifadelerle bulunan her benzersiz kimlik için bir satır içerir. matched_queries sütunu, videonun hangi sorgularla bulunduğunu gösterir. Bu, sonuç kümelerinin kesişimlerini belirlemek ve incelenecek örnekleri seçmek için kullanışlıdır; soruları sınıflandırma işlemi ayrıca yapılmalıdır.
CSV daha sonra haftalık otomasyona dâhil edilebilir: zamanlayıcı veri toplamayı başlatır, depolama alanı bir anlık görüntüyü saklar ve günlükte henüz bulunmayan bir kimlik ortaya çıktığında bildirim gönderilir. Bu, arama endpoint’inin işlevi değil, harici bir orkestrasyon mantığıdır. Ekip, alıcı davranışının nedenlerine ilişkin hazır bir sonuç değil, analiz edilecek bağlantılardan oluşan bir kuyruk elde eder.
Yol parametrelerine API belgelerinden ulaşabilirsiniz; isteği TikTok API deneme ortamında da deneyebilirsiniz. Düzenli veri toplamaya başlamadan önce gerçek yanıt biçimini doğrulayın ve özetten belirli bir videoya geçmek için gereken değerleri saklayın. Ürün açıklaması TikTok Scraper API sayfasında yer alıyor.
İşe yarar bir sonuç, belirli arama ifadeleriyle ilişkilendirilmiş ve doğrulanabilir bir video kümesidir. Bu küme, manuel inceleme için içerik seçmeye ve içerik planına alınan her konunun kaynaklarını saklamaya yardımcı olur.