
تجمیع آگهیهای شغلی از منابع مختلف در Supabase و Google Shee…
8 دقیقه مطالعه · منتشر شده ۱۴۰۵/۴/۲۷
دانلود workflow
فایل JSON آماده import در n8n — credentialها باید در n8n شما تنظیم شوند.
- فایل JSON را دانلود کنید.
- در n8n: Workflows → Import from File.
- Credentialهای هر node را متصل کنید.
- workflow را فعال کنید.
شناسه workflow: 14806 · منبع: کاتالوگ Axeto
تجمیع تابلوهای شغلی چند منبعی در Supabase و Google Sheets
این Workflow به صورت خودکار جمعآوری، نرمالسازی و همگامسازی آگهیهای شغلی را از سیستمهای مختلف ردیابی متقاضی (ATS) و تابلوهای شغلی جهانی به یک پایگاه داده متمرکز (Supabase) و یک صفحه گسترده ردیابی (Google Sheets) انجام میدهد.
این سیستم برای مدیریت ساختارهای دادهای بسیار ناسازگار در پلتفرمهای مختلف طراحی شده است و از یک موتور نرمالسازی سفارشی برای اطمینان از اینکه تمام دادههای خروجی از یک طرحواره واحد و سختگیرانه پیروی میکنند، استفاده میکند.
نمای کلی Workflow
این Workflow به سه بلوک منطقی تقسیم شده است:
1. کشف منبع و راهانداز (Trigger): اجرای زمانبندی شده را آغاز میکند و لیستی از شرکتهای هدف و پلتفرمهای ATS مربوطه را تعریف میکند.
2. درخواست و نرمالسازی: نقاط پایانی API را میسازد، صفحهبندی را مدیریت میکند، دادههای خام را واکشی میکند و محمولههای JSON متنوع را به یک فرمت استاندارد تبدیل میکند.
3. ذخیرهسازی و خروجی: عملیات "upsert" (بهروزرسانی یا درج) را برای جلوگیری از تکرار در Supabase و Google Sheets انجام میدهد.
---
تحلیل دقیق Workflow
۱. کشف منبع و راهانداز
این بلوک Workflow را بر اساس یک برنامه زمانبندی شده آغاز میکند و آرایه پیکربندی تابلوهای شغلی هدف را فراهم میکند.
- گرههای (Nodes) درگیر:
⏰ Daily 8AM IST،📋 Company List،🔄 Loop Batches (5) - جزئیات گرهها:
* ⏰ Daily 8AM IST (راهانداز زمانبندی): Workflow را روزانه در ساعت ۰۸:۰۰ IST راهاندازی میکند.
* 📋 Company List (Code): یک گره JavaScript که به عنوان یک رجیستری پیکربندی عمل میکند. این گره آرایهای از اشیاء حاوی ats (نوع پلتفرم)، slug (شناسه شرکت) و company (نام نمایشی) را برمیگرداند. این گره منابع را به تابلوهای جهانی، Greenhouse، SmartRecruiters، Ashby، Workable، Lever و RemoteOK دستهبندی میکند.
* 🔄 Loop Batches (5) (Split In Batches): جریان پیکربندیهای منبع را در دستههای ۵ تایی مدیریت میکند تا از محدودیت نرخ API یا timeout در مرحله درخواست HTTP جلوگیری شود.
۲. درخواست و نرمالسازی
این بلوک پیکربندیهای شرکت را به فراخوانیهای API واقعی ترجمه کرده و دادههای خام حاصل را تجزیه میکند.
- گرههای (Nodes) درگیر:
🔧 Prepare Request،🌐 HTTP Request،🔍 Parse + Enrich + Filter1 - جزئیات گرهها:
* 🔧 Prepare Request (Code):
* نقش فنی: سازنده URL و Header.
منطق: نوع ats را به یک نقطه پایانی API خاص نگاشت میکند. منطق صفحهبندی را برای SmartRecruiters (مبتنی بر offset) و Himalayas* (مبتنی بر page) پیادهسازی میکند.
* خروجیها: لیستی از URLها و هدرهای HTTP مربوطه (User-Agent، Accept) که برای هر منبع لازم است.
* 🌐 HTTP Request (HTTP Request):
* پیکربندی: از عبارات پویا برای URL و هدرها استفاده میکند. برای اطمینان از اینکه یک API آفلاین کل فرآیند تجمیع را متوقف نمیکند، روی "Continue on Fail" تنظیم شده است.
* دستهبندی: برای پایداری با اندازه دسته ۵ تنظیم شده است.
* 🔍 Parse + Enrich + Filter1 (Code):
* نقش فنی: "موتور نرمالسازی".
* منطق کلیدی:
* تجزیه حقوق و دستمزد: فرمتهای مختلف (عددی، رشتهای، اشیاء تودرتو) را به یک رشته قابل خواندن توسط انسان تبدیل میکند (مانند "$100k–$120k/yr USD").
* نگاشت مکان: از نقشههای کشور ISO و لیست شهرها (مانند INDIA_CITIES) برای استانداردسازی "Bengaluru" به "India" یا "Remote" به "Global" استفاده میکند.
* فیلتر دامنه: فقط مشاغلی را که با ALLOWED_DOMAINS مطابقت دارند (مانند Product Manager، Full Stack Engineer، Data Analyst) نگه میدارد.
* حذف موارد تکراری: یک job_hash بر اساس ATS، شرکت، عنوان و مکان برای شناسایی آگهیهای شغلی منحصر به فرد تولید میکند.
* تجزیه HTML/JSON-LD: به طور خاص دادههای @type: JobPosting را از صفحات HTML خام استخراج میکند.
۳. ذخیرهسازی و خروجی
این بلوک دادههای پاکسازی شده را در سیستمهای ذخیرهسازی خارجی ذخیره میکند.
- گرههای (Nodes) درگیر:
💾 Upsert to Supabase،📊 Write to Google Sheet - جزئیات گرهها:
* 💾 Upsert to Supabase (Postgres):
* عملیات: Upsert.
* ستون تطبیق: job_hash. این تضمین میکند که اگر شغلی در ATS بهروزرسانی شود، به جای تکراری شدن، در پایگاه داده بهروزرسانی میشود.
* دادههای نگاشت شده: عنوان، شرکت، مکان، کشور، حالت کار، حقوق و دستمزد و غیره.
* 📊 Write to Google Sheet (Google Sheets):
* عملیات: Append or Update.
* ستون تطبیق: job_hash.
* اتصال: همان فیلدهای استاندارد شده گره Supabase را همگامسازی میکند.
---
جدول خلاصه
| نام گره (Node Name) | نوع گره (Node Type) | نقش عملکردی (Functional Role) | گره(های) ورودی (Input Node(s)) | گره(های) خروجی (Output Node(s)) | یادداشت چسبان (Sticky Note) |
|---|---|---|---|---|---|
⏰ Daily 8AM IST | Schedule Trigger | راهانداز اجرا (Execution Trigger) | - | 📋 Company List | کشف منبع و راهانداز (Source Discovery & Trigger) |
📋 Company List | Code | پیکربندی منبع (Source Configuration) | ⏰ Daily 8AM IST | 🔄 Loop Batches (5) | کشف منبع و راهانداز (Source Discovery & Trigger) |
🔄 Loop Batches (5) | Split In Batches | کنترل جریان/دستهبندی (Flow Control/Batching) | 📋 Company List, 📊 Write to Google Sheet | 🔧 Prepare Request | کشف منبع و راهانداز (Source Discovery & Trigger) |
🔧 Prepare Request | Code | تولیدکننده URL/Header (URL/Header Generator) | 🔄 Loop Batches (5) | 🌐 HTTP Request | درخواست و نرمالسازی (Request & Normalization) |
🌐 HTTP Request | HTTP Request | کسب داده (Data Acquisition) | 🔧 Prepare Request | 🔍 Parse + Enrich + Filter1 | درخواست و نرمالسازی (Request & Normalization) |
🔍 Parse + Enrich + Filter1 | Code | نرمالسازی و فیلتر (Normalization & Filtering) | 🌐 HTTP Request | 💾 Upsert to Supabase | درخواست و نرمالسازی (Request & Normalization) |
💾 Upsert to Supabase | Postgres | همگامسازی پایگاه داده (DB Synchronization) | 🔍 Parse + Enrich + Filter1 | 📊 Write to Google Sheet | ذخیرهسازی و خروجی (Storage & Output) |
📊 Write to Google Sheet | Google Sheets | همگامسازی صفحه گسترده (Sheet Synchronization) | 💾 Upsert to Supabase | 🔄 Loop Batches (5) | ذخیرهسازی و خروجی (Storage & Output) |
---
بازسازی Workflow از ابتدا
مرحله ۱: راهانداز و پیکربندی
1. یک گره Schedule Trigger اضافه کرده و آن را روی ۸ صبح روزانه تنظیم کنید.
2. یک Code Node (📋 Company List) اضافه کنید. آرایه JavaScript حاوی پیکربندیهای منبع (ATS، Slug، Company) را در آن قرار دهید.
3. یک گره Split In Batches اضافه کنید. Batch Size را روی ۵ تنظیم کنید. گره Code را به این گره متصل کنید.
مرحله ۲: خط لوله درخواست
4. یک Code Node (🔧 Prepare Request) اضافه کنید. منطق نگاشت انواع ats به URLها (مانند Greenhouse API، Lever API) را پیادهسازی کنید. حلقههای صفحهبندی را برای SmartRecruiters و Himalayas بگنجانید.
5. یک گره HTTP Request اضافه کنید.
* URL: {{ $json._url }}.
* Headers: روی "JSON" تنظیم کنید و از {{ JSON.stringify($json._headers) }} استفاده کنید.
* "Error Handling" را روی Continue (Regular Output) تنظیم کنید.
مرحله ۳: موتور نرمالسازی
6. یک Code Node (🔍 Parse + Enrich + Filter1) اضافه کنید. منطق JS زیر را پیادهسازی کنید:
* یک تابع parseSalary برای مدیریت انواع ترکیبی ارز و عددی ایجاد کنید.
* یک تابع makeHash برای تولید یک شناسه منحصر به فرد بر اساس ats|company|title|location ایجاد کنید.
* یک آرایه ALLOWED_DOMAINS برای فیلتر کردن عناوین شغلی تعریف کنید.
* فیلدهای پاسخ خام (مانند j.absolute_url برای Greenhouse) را به فیلدهای استاندارد (apply_url) نگاشت کنید.
مرحله ۴: راهاندازی مقصد
7. یک گره Postgres (Supabase) اضافه کنید.
* عملیات: Upsert.
* تطبیق ستون: job_hash.
* تمام فیلدهای استاندارد شده از گره Code قبلی را نگاشت کنید.
اعتبارنامه (Credential):* جزئیات اتصال Supabase را ارائه دهید.
8. یک گره Google Sheets اضافه کنید.
* عملیات: Append or Update.
* تطبیق ستون: job_hash.
* Document ID: شناسه Sheet هدف خود را ارائه دهید.
اعتبارنامه (Credential):* اعتبارنامه Google OAuth2 را ارائه دهید.
9. گره Google Sheets را به گره Split In Batches برگردانید تا حلقه کامل شود.
---
یادداشتها و منابع عمومی
| محتوای یادداشت (Note Content) | زمینه یا پیوند (Context or Link) |
|---|---|
| استراتژی حذف موارد تکراری | job_hash حیاتی است. این امر از پر شدن پایگاه داده با ورودیهای تکراری هنگام یافتن همان شغل در صفحات متعدد یا اجراهای روزانه بعدی جلوگیری میکند. |
| فیلتر دامنه | برای تغییر انواع مشاغل جمعآوری شده، آرایه ALLOWED_DOMAINS را در داخل گره Parse + Enrich + Filter1 تغییر دهید. |
| محدودیت نرخ | اندازه دسته برای جلوگیری از خطاهای 429 Too Many Requests از APIهای سختگیرانه ATS روی ۵ تنظیم شده است. |
| کاتالوگ n8n در Axeto.ai | Workflowهای بیشتر n8n را در Axeto.ai کاوش کنید |
Nodeهای استفادهشده
سوالات متداول
این Workflow چه کاری انجام میدهد؟▾
این Workflow آگهیهای شغلی را از منابع مختلف مانند ATS و تابلوهای شغلی به طور خودکار جمعآوری، دادههای ناسازگار را نرمالسازی کرده و سپس آنها را در Supabase و Google Sheets ذخیره میکند.
چگونه دادههای ناسازگار نرمالسازی میشوند؟▾
این Workflow از یک موتور نرمالسازی سفارشی استفاده میکند که فرمتهای مختلف حقوق و دستمزد، مکانها و سایر جزئیات را به یک طرحواره استاندارد و قابل خواندن تبدیل میکند.
چگونه از تکرار آگهیهای شغلی جلوگیری میشود؟▾
با تولید یک "job_hash" منحصر به فرد بر اساس اطلاعات کلیدی آگهی شغلی (مانند ATS، شرکت، عنوان و مکان)، Workflow میتواند موارد تکراری را شناسایی و از درج مجدد آنها در Supabase و Google Sheets جلوگیری کند.
چه منابعی پشتیبانی میشوند؟▾
این Workflow از منابع مختلفی مانند تابلوهای شغلی جهانی، Greenhouse، SmartRecruiters، Ashby، Workable، Lever و RemoteOK پشتیبانی میکند.
workflowهای مرتبط
- تحلیل خودکار Google Analytics با هوش مصنوعی Gemini و اعلانه…Market Research
- ممیزی خودکار سئو با Decodo، GPT-4 و Google SheetsMarket Research
- خودکارسازی ممیزی CRO با GPT-4o-mini و Google SheetsMarket Research
- گزارش حسابرسی ادغامهای n8n با هوش مصنوعی: قیمتگذاری و محدود…Market Research
- ردیابی تغییرات کاتالوگ رقبا در Etsy با n8nMarket Research
- ممیزی خودکار سئو با هوش مصنوعی و PageSpeed Insights در n8nMarket Research
