لفرز فيديوهات TikTok العامة التي تذكر علامة تجارية وتتضمن صيغًا إعلانية واضحة، اجمع النتائج باستخدام عدة عبارات بحث، واستخرج الأوصاف، وارصد الكلمات الدالة. والنتيجة ملف CSV يضم الروابط والمؤشرات المتاحة، أي قائمة انتظار لمراجعتها بشريًا، لا استنتاجًا آليًا بشأن الامتثال للقواعد.
تفيد هذه العملية وكالةً تقارن حملةً بالموجز، أو فريقًا داخليًا يتابع قائمةً بالذكر العلني للعلامة التجارية. فهي تساعد على تنظيم نتائج البحث وتحفظ المؤشرات التي يستند إليها المحلل لتحديد المقاطع التي ينبغي فتحها ودراستها.
ما الذي ينبغي البحث عنه في الفيديو؟
في التحقق من الإعلانات، تهم صلة منشئ المحتوى بالعلامة التجارية وكيفية الإفصاح عنها إلى جانب التوصية. يوضح دليل FTC للمؤثرين أن العلاقة الجوهرية قد تكون مالية أو مهنية أو شخصية أو عائلية، وأن الإفصاح ينبغي أن يكون واضحًا ومفهومًا. وبالنسبة إلى التوصيات المصورة، تشير FTC إلى ضرورة وضع الإفصاح داخل الفيديو نفسه، لا في الوصف وحده. لذا يفيد الوصف في الفرز، لكنه لا يبيّن وحده ما شاهده الجمهور أو سمعه في المقطع.
مهمة هذا السكربت أضيق نطاقًا: العثور في نتائج البحث المُعادة على فيديوهات تتضمن أوصافها عبارات مرتبطة بالعلامة التجارية ومؤشرات محتملة مثل «إعلان» أو «راعٍ» أو «شراكة». وينبغي تكييف قاموس الكلمات مع لغة الحملة ومصطلحاتها. وإذا لم يظهر مؤشر في الوصف، فافتح المقطع وافحص محتواه؛ فالتطابق النصي لا يثبت وجود إفصاح داخل الفيديو نفسه.
كيف تحوّل نتائج البحث إلى قائمة انتظار للمراجعة؟
أعدّ قائمة قصيرة بعبارات البحث: اسم العلامة التجارية، واسم الحملة، والتهجئة الشائعة للمنتج. نفّذ كل استعلام على حدة، واحفظ نصه إلى جانب النتائج. وهكذا يستطيع الفريق معرفة الاستعلام الذي عُثر من خلاله على المقطع، وإعادة الجمع عند الحاجة.


يمكن استخدام TikTok Scraper API من jsonscraper لجمع البيانات. يقع المسار الموثق GET /searchVideo على العنوان https://tiktok.evelode.com، ويقبل المعلمات keyword وcount وdate_posted وsort_by وregion وcursor. وفي استجابة تمت ملاحظتها، تضمنت بيانات TikTok مقاطع الفيديو ضمن search_item_list[].aweme_info، بينما قد تكون aweme_list فارغة. ويتحقق المحلل أدناه من الموضعين.
يُمرر المفتاح في المعلمة license_key. احتفظ به في متغير بيئة، لا في السكربت أو المستودع. وتعرض وثائق مسارات TikTok أسماء معلمات البحث؛ ولجلب الصفحة التالية، استخدم قيمة cursor المُعادة. سجّل عدد العناصر التي عالجتها ونص استعلام البحث نفسه: تتيح الصفحات المتتابعة مواصلة النتائج، لكنها لا تثبت بمفردها اكتمال المجموعة.
مثال مختصر بلغة Python
ينفّذ السكربت استعلامًا واحدًا لكل عبارة، ويجمع صيغتي النتائج الموثقتين، ويحذف التكرارات استنادًا إلى معرّف الفيديو، ويرصد الكلمات في الوصف، ثم يكتب ملف CSV. ثبّت requests بالأمر python -m pip install requests، واضبط JSONSCRAPER_TIKTOK_LICENSE_KEY في البيئة، ثم شغّل الملف. المثال متوافق مع Python 3.8 والإصدارات الأحدث.
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")
قبل حفظ الرمز، تحقّق من حالة الاستجابة الخارجية، ثم من البيانات داخل tiktok. يقرأ المطبّع موضعي مقاطع الفيديو كليهما. ويمكن تمرير قيمة cursor المُعادة دون تحويلها في الطلب التالي؛ لكن هذا المثال المختصر يقتصر عمدًا على صفحة واحدة لكل استعلام.
ماذا سيعرض ملف CSV؟
يربط كل صف معرّف الفيديو ورابطه، ومعرّف المؤلف المتاح، والوصف، وعبارات البحث، والمؤشرات المطابقة. وإذا تضمنت الاستجابة أعداد المشاهدات والإعجابات والتعليقات، فستُحفظ بوصفها سياقًا للمساعدة في تحديد ترتيب المراجعة. وقد لا تتوفر هذه الحقول؛ وعندئذ يتركها السكربت فارغة بدلًا من إدراج أصفار.
بعد ذلك، افتح المقطع وتحقق من وجود الإفصاح ووضوحه داخل الفيديو، وسجّل النتيجة وفق فئات متفق عليها، مثل «عُثر عليه» أو «يتطلب مراجعة إضافية» أو «لم يُعثر عليه أثناء المشاهدة». يبحث الرمز نفسه عن مؤشرات نصية مطابقة تمامًا في الوصف؛ ولا يفحص الصورة أو الصوت، ولا يتخذ قرارًا بشأن الامتثال للقواعد.
لإجراء منتظم، شغّل الجمع وفق جدول زمني، وسجّل وقت الطلب، واحفظ JSON الأصلي مع ملف CSV. واقصر قائمة الاستعلامات على العبارات الضرورية، وحدد مدة الاحتفاظ بالبيانات المجموعة. وتتناول سياسة jsonscraper لجمع البيانات بمسؤولية وتيرة الطلبات المعقولة، وتقليل البيانات، والتحقق من مخرجات الذكاء الاصطناعي قبل اتخاذ إجراءات لاحقة.
والنتيجة قائمة انتظار قابلة لإعادة الإنشاء لفيديوهات عامة يُراد التحقق يدويًا من إفصاحاتها الإعلانية: تساعد مطابقات البحث والمقاييس المتاحة على تحديد ما ينبغي فتحه أولًا، بينما تظل مراجعة المقطع نفسه من مسؤولية المراجع. ويمكن مراجعة أسماء المعلمات في وثائق TikTok API، والاطلاع على معلومات المنتج في صفحة TikTok Scraper API.