אם היישום זקוק לפרטים על סרטון TikTok מסוים, נוח להתחיל בבקשה אחת ולבדוק אילו נתונים היא מחזירה. לאחר מכן אפשר לאמת את התשובה ולהכין אותה לאחסון או לניתוח.
בדף TikTok Scraper API של jsonscraper מפורטים נתיבים לסרטונים, משתמשים, חיפוש, האשטגים, מוזיקה וסוגי נתונים נוספים. להלן נבחן את הבקשה המתועדת getVideoByID ואת הדרכים לעבד את התשובה שלה בבטחה. הדוגמאות מבוססות על חומרי הספק; לפני השימוש יש לבדוק אותן עם מפתח פעיל ועם התיעוד העדכני.
הבקשה הראשונה: קבלת פרטים על סרטון
בתיעוד getVideoByID ב-Postman מצוינים שיטת GET והפרמטר video_id. בדוגמה מוצגים גם region ו-cache_timeout. כתובת הבסיס שפורסמה בדף השירות היא https://tiktok.evelode.com.
דוגמת בקשה באמצעות cURL:
export JSONSCRAPER_LICENSE_KEY="המפתח_שלכם"
curl --get "https://tiktok.evelode.com/getVideoByID" \
--data-urlencode "video_id=7106855913906081070" \
--data-urlencode "license_key=$JSONSCRAPER_LICENSE_KEY" \
--data-urlencode "region=US"
המזהה שבדוגמה נלקח מהבקשה שפורסמה. החליפו אותו במזהה הסרטון שברצונכם לבדוק. שמרו את המפתח במשתנה סביבה או במנהל סודות: אל תוסיפו אותו למאגר ציבורי, ל-JavaScript בצד הלקוח או ליומנים.
Postman מתאר את region כקוד אזור ומציין שברירת המחדל היא US. עבור cache_timeout, התיעוד מציין חלון מטמון של 3600 שניות כברירת מחדל; הערך 0 משבית את המטמון. אם הפרמטר נחוץ לתרחיש שלכם, אפשר להעביר אותו במפורש:
curl --get "https://tiktok.evelode.com/getVideoByID" \
--data-urlencode "video_id=7106855913906081070" \
--data-urlencode "license_key=$JSONSCRAPER_LICENSE_KEY" \
--data-urlencode "region=US" \
--data-urlencode "cache_timeout=0"
זוהי התאמה של הפרמטרים שפורסמו עבור הנתיב, ולא הבטחה שלכל התשובות תהיה אותה מבנה או שהשבתת המטמון מתאימה לכל משימה. לפני ההטמעה, בדקו את האימות ואת הפרמטרים מול האוסף העדכני: Postman עשוי להעביר את המפתח באמצעות API Key שהוגדר, ואילו דוגמת cURL שלמעלה מציגה אותו כפרמטר URL.
אותה בקשה ב-Python
להלן גרסה המבוססת על הספרייה הסטנדרטית של Python. היא יוצרת בקשת GET, מעבירה פרמטרים ומטפלת בשגיאת רשת, בשגיאת HTTP וב-JSON לא תקין.
import json
import os
from urllib.error import HTTPError, URLError
from urllib.parse import urlencode
from urllib.request import Request, urlopen
base_url = "https://tiktok.evelode.com/getVideoByID"
license_key = os.environ.get("JSONSCRAPER_LICENSE_KEY")
if not license_key:
raise RuntimeError("הגדירו את משתנה הסביבה JSONSCRAPER_LICENSE_KEY")
params = {
"video_id": "7106855913906081070",
"license_key": license_key,
"region": "US",
}
url = f"{base_url}?{urlencode(params)}"
request = Request(url, method="GET")
try:
with urlopen(request, timeout=30) as response:
status_code = response.status
payload = json.loads(response.read().decode("utf-8"))
except HTTPError as error:
print(f"שגיאת HTTP: {error.code}")
raise
except URLError as error:
print(f"שגיאת רשת: {error.reason}")
raise
except json.JSONDecodeError:
raise RuntimeError("לא ניתן לנתח את תשובת השירות כ-JSON")
print("סטטוס HTTP:", status_code)
print("מפתחות ברמה העליונה:", list(payload.keys()))
זוהי התאמה של הבקשה המתועדת, ולא דוגמה שהספק בדק בנפרד עבור Python. היא גם אינה מתארת את כל התשובות האפשריות של השירות. מכיוון שהמפתח מועבר בכתובת URL, אל תדפיסו את כתובת ה-URL המלאה ליומנים: היא עלולה להכיל סוד.
איך לבדוק את תשובת ה-JSON
בתשובה שפורסמה ב-Postman יש שדה status ואובייקט מקונן tiktok.aweme_detail שמכיל נתוני סרטון ויוצר. זוהי דוגמה למבנה של תשובה אחת, ולא ערובה לכך שהסכמה לא תשתנה. אפשר לעיין בה בדוגמת התשובה של getVideoByID.
בעת קריאת שדות מקוננים, בדקו כל רמה:
def get_video_details(payload):
tiktok = payload.get("tiktok")
if not isinstance(tiktok, dict):
return None
details = tiktok.get("aweme_detail")
if not isinstance(details, dict):
return None
return details
details = get_video_details(payload)
if details is None:
print("בתשובה אין אובייקט נתוני סרטון צפוי")
else:
video_id = details.get("id")
description = details.get("desc")
author = details.get("author")
print("מזהה:", video_id)
print("תיאור:", description)
print("יוצר:", author)
שמות השדות נלקחו מהדוגמה שפורסמה. בדיקה באמצעות .get() אינה אומרת שהשדות חובה: היא מאפשרת לעבד תשובה שבה הערכים הצפויים חסרים. אם לוגיקת היישום תלויה בשדה מסוים, בדקו שהוא קיים בתשובות עבור התרחיש שלכם והגדירו התנהגות למקרה שהוא חסר.
כדאי להפריד בין שלוש בדיקות:
- תעבורה: האם התקבלה תשובת HTTP ומה הסטטוס שלה.
- פורמט: האם ניתן לנתח את גוף התשובה כ-JSON.
- תוכן: האם הנתונים שהיישום זקוק להם קיימים.
ניתוח JSON מוצלח עדיין אינו אומר שהאובייקט הדרוש נמצא בתשובה. לצורכי אבחון, רשמו שגיאות טכניות ותוצאות בדיקות, תוך הסתרת מפתחות.
מבקשה אחת לצינור עיבוד מעשי
לצורך אבטיפוס, די לשלוח בקשה ולהציג כמה ערכים. לעיבוד קבוע, הפרידו את העבודה לשלבים:
בקשה → בדיקה → נרמול → הסרת כפילויות → אחסון.
- בקשה. קבלו תשובה דרך הנתיב המתועד ושמרו בנפרד את הסטטוס הטכני.
- בדיקה. ודאו שאפשר לנתח את הגוף כ-JSON ושהוא מכיל את הנתונים הדרושים למשימה המסוימת.
- נרמול. העבירו את הערכים הדרושים למודל נתונים משלכם. אל תעבירו את כל המבנה המקונן למסד הנתונים אם היישום זקוק רק לשדות מסוימים.
- הסרת כפילויות. בחרו מזהה לאחר שבדקתם שהוא קיים ומתאים למשימה שלכם. אל תניחו שהוא תמיד יהיה זמין בכל התשובות.
- אחסון. אם נדרש, שמרו את מועד הבקשה ואת התשובה המקורית בנפרד מהרשומה המנורמלת. כך יהיה קל להבין אילו שינויים ביצע היישום.
אלה המלצות לארכיטקטורת היישום, ולא יכולות שיש לייחס לשירות. הפרדה בין התשובה החיצונית למודל הפנימי גם מקלה על טיפול בשינויים: אפשר לאתר בעיות בשלב הבדיקה או הנרמול, במקום לחפש אותן בכל הקוד.
לבקשות חוזרות, הגדירו מראש מתי לרענן נתונים ואילו שגיאות כדאי לנסות שוב. הגבילו את מספר הניסיונות החוזרים: לולאה אינסופית לא תתקן פרמטר שגוי או בעיית אימות.
מטמון ואזור
בתיאור הנתיב getVideoByID, הפרמטר cache_timeout מגדיר את משך השמירה במטמון בשניות: מצוין ערך ברירת מחדל של 3600 שניות, והערך 0 משבית את המטמון. הפרמטר region מתואר כקוד מדינה; בתיעוד מופיעה הדוגמה US. לפני ההטמעה, בדקו את הפרטים האלה מול תיעוד הבקשה העדכני ב-Postman.
עצם קיומה של הגדרת מטמון אינו מעיד על עדכניותה של תשובה מסוימת. אם עדכניות חשובה, בדקו את תוצאות הבקשות החוזרות בנתונים של התרחיש שלכם ובחרו את ההתנהגות המתאימה.
אילו משימות אפשר לבחון בהמשך
בדף המוצר מפורטים נתיבים לחיפוש סרטונים ומשתמשים, האשטגים, מיקומים, מוזיקה וטרנדים. בין הדוגמאות: searchVideo, searchHashtag, getUserFeed ו-getTrendingFeed. זוהי מפת נתיבים שפרסם הספק, ולא בדיקה עצמאית של כל אחד מהם. עיינו בפרמטרים ובמבנה התשובה בתיעוד של כל נתיב בנפרד: אי אפשר להחיל עליהם אוטומטית את הדוגמה של getVideoByID.
jsonscraper מציעה להשתמש באוסף Postman להגדרת המפתח ולהפעלת בקשות. זו עשויה להיות דרך נוחה לבדוק נתיב יחיד לפני כתיבת אינטגרציה. השירות מפרט גם תרחישי אוטומציה, אך יש לבדוק בנפרד את התאימות של תהליך מסוים בתצורה שלכם. בעת ייצוא האוסף או שיתופו, ודאו שלא נשאר בו מפתח פעיל.
מה לבדוק לפני השימוש ביישום
לפני שילוב הבקשה בתהליך קבוע, בדקו אותה עם הסרטונים והפרמטרים שהפרויקט זקוק להם:
- האם הבקשה מתבצעת עם מפתח פעיל ומזהה תקין.
- איך היישום מטפל בפרמטר שגוי או חסר.
- מה קורה כאשר ה-JSON תקין, אבל השדה הדרוש חסר.
- איך מטפלים בשגיאת HTTP, בתקלה ברשת ובחריגה מזמן ההמתנה.
- אילו שדות מתאימים לזיהוי ולהסרת כפילויות דווקא במשימה שלכם.
- איך משתנה התוצאה של בקשה חוזרת עם ערכים שונים של
cache_timeout, אם אתם משתמשים בפרמטר הזה.
תעדו את מועד הבדיקה, פרמטרים ללא סוד ודוגמת תשובה שעברה הסרת פרטים מזהים. בקשה מוצלחת אחת מאשרת רק את פעולתו של תרחיש מסוים בתנאים מסוימים; היא אינה מוכיחה את יציבותם של כל הנתיבים והתשובות.
התחילו בתרחיש אחד שניתן לשחזר
בדקו את getVideoByID עבור הסרטון הדרוש, בחנו את ה-JSON בפועל וכתבו מטפל שמתחשב בשדות חסרים ובשגיאות. לאחר מכן, אם נדרש, הרחיבו את התהליך באמצעות נרמול, הסרת כפילויות ואחסון.
תיעוד jsonscraper מספק נקודת התחלה — כתובת בסיס ומפת נתיבים. בקוד ייצור עדיין צריך לבדוק את התשובה הספציפית, להגן על המפתח ולהיערך למקרים שבהם הנתונים שונים מהמבנה הצפוי.