Marka anmaları ve açık reklam ifadeleri içeren herkese açık TikTok videolarını belirlemek için birkaç arama sorgusunun sonuçlarını toplayın, açıklamaları çıkarın ve işaret sözcüklerini belirleyin. Sonuç, bağlantılar ve mevcut göstergeleri içeren bir CSV’dir; bu, kurallara uyum hakkında otomatik bir karar değil, insan incelemesi için bir kuyruktur.
Bu süreç, kampanyayı brief ile karşılaştıran bir ajansın veya herkese açık marka anmalarının listesini tutan kurum içi ekibin işine yarar. Arama sonuçlarını düzenlemeye yardımcı olur ve analistin hangi videoyu açıp inceleyeceğine karar verirken kullanacağı işaretleri korur.
Videolarda tam olarak ne aranmalı?
Reklam incelemesinde, içerik üreticisinin markayla ilişkisi ve bu ilişkinin önerinin yanında nasıl açıklandığı önemlidir. FTC’nin içerik üreticilerine yönelik rehberi, önemli bir ilişkinin finansal, iş, kişisel veya ailevi olabileceğini; açıklamanın ise belirgin ve anlaşılır olması gerektiğini belirtir. Video önerileri için FTC, açıklamanın yalnızca açıklama metninde değil, videonun içinde yer alması gerektiğini söyler. Bu nedenle açıklama metni sıralama için yararlıdır, ancak izleyicinin görüntüde ne gördüğünü veya seste ne duyduğunu tek başına göstermez.
Bu betiğin amacı daha sınırlıdır: döndürülen arama sonuçları içinde açıklamalarında marka ifadeleri ve “reklam”, “sponsor” veya “iş birliği” gibi olası işaretler bulunan videoları bulmak. Sözlüğü kampanyanın diline ve terminolojisine göre uyarlayın. Açıklamada bir işaret bulunmazsa videoyu açıp içeriğini kontrol edin: metin eşleşmesi, açıklamanın videonun içinde yer alıp almadığını belirlemez.
Arama sonuçları inceleme kuyruğuna nasıl dönüştürülür?
Küçük bir sorgu listesi hazırlayın: marka adı, kampanya ve ürünün yaygın yazımı. Sorguları ayrı ayrı çalıştırın ve kullandığınız ifadeleri sonuçlarla birlikte kaydedin. Böylece ekip videonun hangi sorguyla bulunduğunu görebilir ve gerektiğinde toplama işlemini tekrarlayabilir.


Veri toplamak için jsonscraper TikTok Scraper API kullanılabilir. Belgelenmiş GET yolu /searchVideo, https://tiktok.evelode.com adresinde bulunur ve keyword, count, date_posted, sort_by, region ve cursor parametrelerini kabul eder. Gözlemlenen yanıtta TikTok verileri search_item_list[].aweme_info içinde yer alıyordu; aweme_list boş olabiliyordu. Aşağıdaki ayrıştırıcı her iki konumu da kontrol eder.
Anahtar, license_key parametresiyle gönderilir. Anahtarı betik veya depo yerine bir ortam değişkeninde saklayın. TikTok uç noktaları belgeleri arama parametrelerinin adlarını içerir; sonraki sayfa için döndürülen cursor değerini kullanın. İşlenen nesne sayısını ve arama sorgusunu kaydedin: sayfalama sonuçları sürdürmenizi sağlar, ancak tek başına veri kümesinin eksiksiz olduğunu göstermez.
Python ile temel bir örnek
Betik her ifade için bir sorgu gönderir, belgelenmiş sonuç biçimlerinin ikisini de toplar, video kimliğine göre tekrarları kaldırır, açıklamadaki sözcükleri işaretler ve bir CSV dosyasına yazar. requests paketini python -m pip install requests komutuyla yükleyin, JSONSCRAPER_TIKTOK_LICENSE_KEY değişkenini ortamda ayarlayın ve dosyayı çalıştırın. Örnek Python 3.8 ve sonraki sürümlerle uyumludur.
import csv
import os
import sys
import requests
BASE_URL = "https://tiktok.evelode.com/searchVideo"
KEY = os.environ.get("JSONSCRAPER_TIKTOK_LICENSE_KEY")
if not KEY:
raise SystemExit("Set JSONSCRAPER_TIKTOK_LICENSE_KEY first")
QUERIES = ["Example Brand", "Example Product", "Example Campaign"]
MARKERS = ("#реклама", "реклама", "спонсор", "партнерство", "партнёрство", "#ad", "sponsored")
def videos_from(payload):
data = payload.get("tiktok") or {}
videos = data.get("aweme_list") or []
if not videos:
videos = [
item.get("aweme_info")
for item in (data.get("search_item_list") or [])
if isinstance(item, dict) and isinstance(item.get("aweme_info"), dict)
]
return [video for video in videos if isinstance(video, dict)]
rows = {}
for query in QUERIES:
response = requests.get(
BASE_URL,
params={"keyword": query, "count": 20, "date_posted": "this-month", "license_key": KEY},
timeout=30,
)
response.raise_for_status()
payload = response.json()
if payload.get("status") != "ok":
print("Unexpected API status for query:", query, file=sys.stderr)
continue
for video in videos_from(payload):
video_id = video.get("aweme_id")
if not video_id:
continue
author = video.get("author") or {}
stats = video.get("statistics") or {}
caption = video.get("desc") or ""
matched = [word for word in MARKERS if word in caption.casefold()]
row = rows.setdefault(str(video_id), {
"video_id": str(video_id),
"url": video.get("share_url") or "",
"author": author.get("unique_id") or author.get("nickname") or "",
"caption": caption,
"queries": set(),
"disclosure_markers": set(),
"play_count": stats.get("play_count"),
"digg_count": stats.get("digg_count"),
"comment_count": stats.get("comment_count"),
"review_status": "manual_review",
})
row["queries"].add(query)
row["disclosure_markers"].update(matched)
with open("tiktok_disclosure_review.csv", "w", newline="", encoding="utf-8-sig") as file:
fields = ["video_id", "url", "author", "caption", "queries", "disclosure_markers",
"play_count", "digg_count", "comment_count", "review_status"]
writer = csv.DictWriter(file, fieldnames=fields)
writer.writeheader()
for row in rows.values():
row["queries"] = " | ".join(sorted(row["queries"]))
row["disclosure_markers"] = " | ".join(sorted(row["disclosure_markers"]))
writer.writerow(row)
print("Saved", len(rows), "unique returned videos")
Kodu kaydetmeden önce dış yanıtın durumunu, ardından tiktok içindeki verileri kontrol edin. Normalleştirici video sonuçlarının her iki konumunu da okur. Sonraki sayfa için alınan cursor değerini dönüştürmeden bir sonraki isteğe aktarabilirsiniz; bu temel örnek bilerek her sorgu için tek bir sayfayla sınırlıdır.
CSV’de neler yer alır?
Her satır; video kimliğini ve bağlantısını, mevcut yazar tanımlayıcısını, açıklamayı, arama ifadelerini ve eşleşen işaretleri bir araya getirir. Yanıtta izlenme, beğeni ve yorum sayıları varsa, inceleme sırasını belirlemeye yardımcı olacak bağlam olarak kaydedilir. Bu alanlar yanıtta bulunmayabilir; betik sıfır değerini varsaymak yerine boş bırakır.
Ardından videoyu açın, açıklamanın video içinde bulunup bulunmadığını ve ne kadar görünür olduğunu kontrol edin ve sonucu “bulundu”, “ek inceleme gerekiyor” veya “izleme sırasında bulunmadı” gibi üzerinde uzlaşılmış kategorilerle kaydedin. Kod yalnızca açıklamadaki tam metin işaretlerini arar; görüntüyü ve sesi incelemez ve kurallara uyum hakkında karar vermez.
Düzenli bir süreç için veri toplamayı bir programa göre çalıştırın, istek zamanını kaydedin ve özgün JSON’u CSV ile birlikte saklayın. Sorgu listesini gerekli ifadelerle ve toplanan verilerin saklama süresini sınırlayın. jsonscraper’ın sorumlu veri toplama politikası, makul istek sıklığına, veri minimizasyonuna ve sonraki adımlardan önce yapay zekâ sonuçlarının kontrol edilmesine değinir.
Sonuç, reklam açıklamalarının manuel olarak incelenmesi için herkese açık videolardan oluşan, tekrarlanabilir bir kuyruktur: arama eşleşmeleri ve mevcut metrikler önce hangi videonun açılacağını belirlemeye yardımcı olur; videonun kendisine ilişkin değerlendirme ise incelemeyi yapan kişiye kalır. Parametre adlarını TikTok API belgelerinden, ürün bilgilerini ise TikTok Scraper API sayfasından kontrol edebilirsiniz.