כל הפרויקטים

צינור HireMyVisa לסקירת סיפוני ויזה בבריטניה

אוגר משרות בסיפון UK מ-HireMyVisa, מעשיר סטטוס ב-batches, ומפרסם חוברת Excel מוכנה למכירות.

המטרה

אגירת משרות בבריטניה מ-HireMyVisa, אימות אלו מעסיקים DEFINITELY/LIKELY SPONSORS, העשרה, ופרסום חוברת Excel נקייה לצוות המכירות.

הפתרון

Pipeline ב-Python שמתחבר ל-HireMyVisa, עוטף ה-API של המשרות עם stop-when-empty, מבצע dedup לפי job_id, מעשיר סיפון דרך POST בב-25 ל-/api/sponsor/batch-check, שומר JSON ביניים, ומייצר חוברת Excel עם pandas/openpyxl מחולקת ל-≤5,000 שורות עם פורמטים ותאריכים.

עיקרי הדברים

  • Pagination stop-when-zero מסתגל לכל גודל
  • מינימום קריאות סיפון בעזרת batched dedupe
  • פלט Excel בחוברות של 5K שורות
  • Re-runnable הודות לcache JSON ביניים

האתגר

API המשרות לא מחזיר ספירה כוללת או סמן סוף — pagination עיוור שורף זמן.

מילון collected לפי job_id, ספירת new לכל דף, שבירה על new == 0 כך שה-collector מסתגל לכל גודל.

סטטוס הסיפון ב-API נפרד עם batches של 25 ו-Bearer.

דדופ שמות מעסיקים, chunks של 25, קריאה פר chunk, ומיפוי חזרה — ממזער קריאות גם ב-1000+ משרות.

Excel חוסם תווי בקרה וחוברות גדולות איטיות לפתיחה.

Regex מנקה תווי בקרה ברמת השורה; MAX_ROWS_PER_FILE=5000 מחלק ל-jobs_part_{index}.xlsx.

תאריכי פרסום מגיעים כ-ISO עם Z, אבל המשתמשים רוצים לסנן כתאריך אמיתי.

parse_posted_date + format_posted_date ממירים ל-datetime, כך ש-pandas → openpyxl כותב תא Excel תאריך.

מה נמסר

  • collector.py, api.py, enrich_sponsors.py, excel_builder.py, auth.py
  • requirements.txt + venv מצורף
  • Cache JSON ביניים (data/jobs.json, data/jobs_enriched.json)
  • פלט Excel מחולק (data/jobs_part_<n>.xlsx)
  • אישורי .env

תוצאות

GB (UK)

מדינה

25/call

Batch סיפון

≤5K rows

פיצול קבצים

2 (jobs + sponsor)

APIs

מה זה לימד אותי

  • 'Stop when new == 0' זה ה-pagination הכי אמין ל-APIs בלי total
  • ניקוי תווים ל-Excel חייב לקרות ברמת השורה, לא אחר כך
  • Cache JSON בין שלבים עושה את הפייפליין ניתן-לדיבוג ולהרצה חוזרת