אנונימי #7: סנכרון אוטומטי של מלונות מ-Booking לאתר וורדפרס
לקוח שמפעיל אתר השוואת מלונות בשיתוף עם מערכת בוקינג ביקש מערכת שתיקח URL של חיפוש מלונות, תסרוק את כל הדפים, תמשוך את המלונות עם הפרטים הזמינים, תשלים מידע חסר באמצעות AI, ותעלה הכל לאתר וורדפרס שלו כפוסטים מובנים. השלמה גם של תרגום הקופי לעברית.
הסיפור: מאות מלונות, מקור אחד, אתר וורדפרס מאוכלס
בעלי האתר עובד בשיתוף פעולה עם מערכת בוקינג. הוא רוצה להציג מלונות באתר שלו עם פרטים עשירים, אבל איסוף ידני של 500 מלונות הוא בלתי אפשרי. כל מלון דורש שם, דירוג, תמונות, מתקנים, מיקום, מחיר התחלתי, ועוד שדות. הוא ביקש מערכת שתעשה את כל העבודה אוטומטית.
בנינו לו pipeline שלוקח URL של חיפוש בבוקינג, סורק את הדפים אחד אחרי השני באמצעות Playwright, ומשם שואב את כל המידע הזמין. אחרי הסריקה, AI משלים שדות חסרים: תרגום לעברית, תיאור מורחב על המיקום, יחסים בין המלון לבין אזורי תיירות מוכרים. כל זה נשמר במסד נתונים פנימי לפני העלאה.
שלב הפרסום הוא לחיצה אחת. המערכת ממירה את הדאטה למבנה של פוסט וורדפרס עם custom fields, מעלה תמונות לספריית המדיה, ומקצה את הקטגוריות הנכונות. הלקוח יכול לבחור להעלות הכל בבת אחת, או רק חלק (למשל, מלונות בלבן ביילט). היצוא ל-CSV/XLSX משמש אותו ל-QA לפני העלאה.
תהליך העבודה המלא, משבעה שלבים
איך ההזמנה של הלקוח הפכה למערכת חיה. כל שלב יושב על השלב שלפניו, ובכל שלב הלקוח אישר את הפלט לפני שעברנו הלאה.
אפיון השדות שצריך לכל מלון
עברנו עם הלקוח על מבנה הפוסט הרצוי באתר: שם המלון בעברית, שם באנגלית, דירוג כוכבים, ציון משתמשים, מתקנים (5-10 פריטים), מיקום, מחיר התחלתי, גלריית תמונות, תיאור עברי. סך הכול 15 שדות שצריך למלא לכל מלון.
בניית סורק Playwright לבוקינג
מימשנו סורק שעובד עם דפדפן headless, נכנס ל-URL של חיפוש, גולש עם infinite scroll עד שכל המלונות נטענו. כל מלון נפתח בכרטיסיה צדדית, השדות הזמינים נשלפים, וזה מאפשר לעקוב גם על נתונים שמופיעים רק ברחיפה.
התמודדות עם הגנות אנטי-בוט
בוקינג מזהה דפוסי בוט. הוספנו backoff בין בקשות, רוטציה של user-agents, ו-mouse movement סימולטיבי. גם פיצול הסריקה לסבבים קטנים (50 מלונות בכל סבב) עם הפסקה בין סבב לסבב.
השלמת מידע חסר באמצעות AI
חלק מהמלונות לא מציגים תיאור עשיר בבוקינג. ה-AI מקבל את הנתונים הזמינים ומייצר תיאור עברי שמתחבר למיקום, לכוכבים, ולמתקנים. אם הלקוח רוצה, הוא יכול לערוך את התיאור לפני העלאה.
תרגום לעברית של שמות וטקסטים
בוקינג מחזיר חלק מהשמות באנגלית. ה-AI מתרגם את שם המלון, את העיר, ואת המתקנים. השמות נשמרים בשתי שפות, כדי לאפשר חיפוש פנימי באתר גם באנגלית.
יצוא לבדיקה לפני פרסום
אחרי הסריקה, הלקוח מקבל קובץ CSV או XLSX עם כל המלונות וכל השדות. הוא עובר עליו, מסמן מלונות שהוא לא רוצה לפרסם או שדות שהוא רוצה לתקן ידנית. רק אחרי האישור עוברים לפרסום.
דחיפה ל-WordPress עם custom fields
הפרסום מבוסס על WP REST API עם custom post type. כל שדה מהמסד הפנימי ממופה לשדה מותאם בוורדפרס. תמונות מועלות אחת אחת ומקושרות ל-Media Library. הקטגוריה נקבעת לפי המיקום של המלון.
מה בוצע לבקשת הלקוח, פיצ'ר אחרי פיצ'ר
כל שורה ברשימה עלתה בפגישת אפיון ספציפית עם הלקוח, נכנסה ל-roadmap, נבנתה ועברה QA לפני שעלתה לפרודקשן.
סריקת URL של חיפוש בוקינג
הלקוח מזין URL כמו "מלונות בדובאי" והמערכת סורקת אוטומטית. תומך בכל ה-filters שבוקינג מציע (כוכבים, מחיר, אזור).
שאיבת 15 שדות פר מלון
שם, דירוג, ציון, מתקנים, מיקום, מחיר, תמונות, סוג חדרים, ביטול חינם, פרטי קונטקט. כל מה שזמין בדף הציבורי של בוקינג.
גלריית תמונות מלאה
כל התמונות שבוקינג מציג למלון. נטענות במקביל, מומרות ל-WebP, ועולות לספריית המדיה של וורדפרס עם alt text אוטומטי.
תרגום אוטומטי לעברית
שם המלון, העיר, המתקנים, תיאור הרקע, פרטי המבצעים. הכל מתורגם דרך AI עם שמירת השמות באנגלית במקביל.
השלמת תיאורים חסרים
מלון בלי תיאור מקבל תיאור עשיר שמייצר ה-AI על בסיס הנתונים הקיימים, נראה אנושי ומותאם לקהל היעד.
יצוא CSV ו-XLSX
אחרי כל סריקה, יצוא לקובץ עם כל הנתונים. משמש ל-QA, לעריכה ידנית, או לארכוב.
פרסום אוטומטי לוורדפרס
לחיצה אחת מעלה את כל המלונות שעברו את ה-QA כפוסטים בוורדפרס, עם custom fields, תמונות, וקטגוריות.
ניהול duplicates חכם
אם מלון כבר קיים באתר (לפי שם או לפי URL ייחודי), המערכת מעדכנת את השדות במקום ליצור פוסט חדש.
תור עיבוד backoff שמתחשב
בקשות לבוקינג מועברות עם backoff בין 30 ל-120 שניות. הסריקה מפוצלת לסבבים של 50 מלונות עם הפסקה בין סבב.
אכיפת מבנה פוסט אחיד
כל מלון בוורדפרס מקבל את אותם 15 שדות, באותו סדר. מקל על תבנית התצוגה באתר וגם על SEO.
עדכון מחירים תקופתי
אפשר להגדיר ש-cron יריץ סריקה של מלונות קיימים פעם בשבוע, ויעדכן רק את המחיר ההתחלתי. כך המחירים באתר תמיד עדכניים.
שמירת היסטוריית סריקות
כל סריקה נשמרת עם timestamp ו-URL מקור. אפשר לחזור אחורה, לראות איזה מלונות התווספו מתי, ולהשוות גרסאות.
איך נראית המערכת
אילוסטרציות שמציגות את הצנרת המרכזית. הממשק המלא חסוי כי הלקוח עובד בשיתוף פעולה עם בוקינג.
אשף הסנכרון
אשף בן חמישה שלבים: הגדרת סריקה, התקדמות, תוצאות, חיבור וורדפרס, העלאה. הלקוח מנווט בקצב שלו עם אפשרות לחזור אחורה.
מסך חיבור וורדפרס
בשלב הרביעי באשף הלקוח מזין URL של אתר היעד, app password, ומיפוי שדות. המערכת בודקת את החיבור ומאשרת לפני שמתחילה להעלות.
שלוש יכולות שעושות את ההבדל
תרגום מובנה לעברית
בוקינג מחזיר חלק מהמידע באנגלית. המערכת מתרגמת אוטומטית עם שמירת השמות המקוריים, כך שגם חיפוש פנימי באתר עובד.
עדכוני מחירים אוטומטיים
cron שבועי שמעדכן רק את המחירים ההתחלתיים של המלונות הקיימים. האתר תמיד תואם למציאות, בלי התערבות.
התמודדות עם anti-bot
backoff שמתחשב, רוטציה של user-agents, פיצול לסבבים קטנים. הסריקה רצה ללא דרמה, גם כשבוקינג משנה הגנות.
בנייה בשיתוף Claude Code
לאורך כל הפרויקט עבדנו ב-Claude Code עם סקילים ייעודיים שמסדרים את שיטת העבודה: brainstorming לאפיון, writing-plans לתוכנית, TDD לפיתוח, debugging שיטתי לאיתור בעיות, ו-verification לפני סיום משימות.
סקילים פעילים בפרויקט
שישה סקילים מסדרים את התהליך: brainstorming לתכנון schema אחיד, writing-plans ל-gateway אחד בין סקרייפר לצינור, TDD על דגימות מהאתר, debugging שיטתי ל-retry ולתמונות, audit לתאימות מלאה ל-REST של וורדפרס, ו-verification של דגימות לפני release.
מבנה הפרויקט, חלוקת אחריות נקייה
סקרייפר על Playwright עם מודולי parser, image downloader ו-retry handler. שכבת transform שמנרמלת ומשלימה מידע חסר באמצעות AI ובתרגום לעברית. שכבת WP נפרדת שמדברת עם REST API. כל שכבה ניתנת להחלפה.
סיכום הקייס סטאדי
בעלי אתר השוואת מלונות הביא צורך ברור: לפרסם 500 מלונות באתר הוורדפרס שלו, עם פרטים עשירים, בלי לעבוד עליהם ידנית. בנינו לו pipeline שמעלה כל מלון אוטומטית, מתחיל מ-URL של בוקינג ומסיים בפוסט מוכן עם תמונות, תיאורים ומחירים.
היום הוא מריץ סריקה חודשית של אזורים חדשים, מקבל קובץ XLSX לבדיקה, ומעלה לאתר במצב מאושר. עומס עבודה ירד מאלפי שעות לעשרות שעות, וההיקף של האתר גדל פי שבעה תוך חצי שנה.
הלקח: סקרייפינג חוקי + AI להשלמה הם קומבינציה חזקה כשהיעד הוא תוכן בנפח גדול שלא יכול להיווצר ידנית. חוקי הוא חשוב, מבוקר הוא חשוב, אבל בלי הם הצוות לא יכול לעמוד בהיקף.
שאלות ותשובות
האם סקרייפינג של בוקינג חוקי?
אנחנו סורקים רק תוכן ציבורי שמופיע בדף ללא login. בוקינג מציגה את התוכן לכל גולש. אנחנו לא חושפים API מוגן, לא עוקפים paywall, ולא מציגים את הנתונים בלי קרדיט.
מה קורה אם בוקינג משנה structure?
הסלקטורים נמצאים בקובץ קונפיגורציה אחד. שינוי structure מצריך עדכון של 2-3 סלקטורים, ולא של כל הסורק. בממוצע זה לוקח שעה.
כמה מלונות אפשר לסרוק בסבב אחד?
תכנון מקובל הוא 100-200 מלונות בסבב, עם 30-90 שניות בין כל מלון. בוקינג מקבלת את הקצב הזה בלי לחסום.
האם מתבצעת סריקה ארצית או רק מטרים?
תלוי בלקוח. אצלנו הוא הגדיר אזורים גיאוגרפיים מרכזיים. אבל אפשר להריץ סריקה כללית גם, פשוט לוקחת יותר זמן.
מה קורה אם תמונה נופלת?
יש retry של 3 פעמים. אם נכשלה לגמרי, המלון נשמר עם רשימת תמונות חלקית, ויש flag שמסמן לבעל האתר לבדוק ידנית.
איך מטפלים במלונות עם שמות זהים?
יש index של מלונות לפי URL ייחודי בבוקינג. שני מלונות עם אותו שם אבל URL שונה מטופלים כשני entities שונים, עם שינוי קל בשם להבדיל.
האם המערכת תומכת באתרים נוספים מלבד בוקינג?
הארכיטקטורה גנרית. שכבת ה-scraper מבודלת. הוספת אתר נוסף (Trivago, Hotels.com) דורשת כתיבת gateway חדש בלבד, ללא שינוי בצינור.
מה עם זכויות תמונות?
התמונות בבוקינג הן מהמלונות עצמם, שמספקים אותן לבוקינג עם רישיון לתצוגה. שימוש שלהם באתר השוואה בעצם מקובל בענף, אבל מומלץ לבדוק עם עו"ד לכל לקוח ספציפי.
כמה לוקח להעלות 500 מלונות לוורדפרס?
תלוי במספר התמונות. בממוצע, 30-60 שניות פר מלון (כולל העלאת תמונות). 500 מלונות זה בסביבות 6-8 שעות. רץ ברקע בלי התערבות.
רוצים סנכרון מלונות או מוצרים אוטומטי לאתר?
השאירו פרטים ונחזור אליכם לפגישת אפיון. נבנה מערכת שעוברת על המקור (בוקינג, שופיפיי, אתר ספק) ומעלה את הנתונים לאתר שלכם בלי עבודה ידנית.