إنتقل إلى المحتوى الرئيسي

مرجع مطوّري Sweepy

يعمل Sweepy كمشروع Python صغير بمحرك مسطّح. تربط هذه الصفحة كل مرحلة من خط المعالجة بالوحدة التي تشغّلها، لتعرف أين تجري التغيير.

الجمهور​

اقرأ هذه الصفحة إذا كنت تخطط لتغيير شيفرة Sweepy أو إضافة مصدر وظائف. ويستطيع المراجعون استخدامها لتوجيه طلب دمج. وتغطي الداخليات فقط: الوحدات والتبعيات وإصدارات Python.

تلميح

تجاوز هذه الصفحة إذا كنت تريد تشغيل عمليات المسح. ابدأ بـ التثبيت.

مراحل خط المعالجة والوحدات​

يشغّل swee.py خمس مراحل بالترتيب. وتطبع الطرفية كل مرحلة بالصيغة [1/5] حتى [5/5].

المرحلةالوحدةما تفعله
1. تحميل الملف التعريفيengine/config.pyيحمّل ملفك التعريفي بصيغة YAML ويتحقق منه. ويكتب المعالج في الوحدة نفسها ملفًا تعريفيًا.
2. اكتشاف الوظائفengine/discovery.pyيستعلم من تغذيات المجمّعات عبر python-jobspy ويصنّف كل منصة.
2. اكتشاف الوظائفengine/sources/يجلب منصات Greenhouse وAshby وLever وWorkable وBuilt In NYC من نقاط نهاية عامة.
2. إزالة التكرارswee.pyيدمج نتائج المجمّعات والمصادر في بطاقة واحدة لكل رابط وظيفة.
3. التحقق من الروابطengine/validator.pyيفحص كل رابط بطلب HTTP HEAD مع GET كبديل. ويحذف الإعلانات الميتة.
4. احتساب التطابق مقابل السيرة الذاتيةengine/scorer.pyيستخرج مصطلحات الإعلان والسيرة الذاتية، ثم يحتسب التداخل في المتطلبات والكلمات المفتاحية. ويوسم الإعلانات التي تطلب إجابات كتابية.
5. توجيه مسارات السيرة الذاتيةengine/enrich.pyيختار المسار ذا أعلى تداخل مصطلحات ويسند لون الشارة المطابق.
5. إثراء البطاقاتengine/enrich.pyيبني ملخصات البطاقات وسطور الراتب ونص النصيحة المخصص.
5. PDF البطاقات الافتراضيengine/report.pyيعرض تخطيط البطاقات، ست بطاقات في الصفحة افتراضيًا، ويعيد عدد الصفحات.
5. PDF الجدول القديمengine/pdf_builder.pyيعرض تخطيط الجدول عندما يضبط ملفك التعريفي report.style: legacy.
5. تصدير البياناتengine/exporter.pyيكتب ملفات CSV وJSON. ويحوّل صور صفحات PNG عند الطلب.
5. تتبع الوظائفengine/tracking.pyيضيف أعمدة التتبع ويقرأ التصديرات السابقة لتعود القيم التي تدخلها.

تحمل engine/session.py مخزن البطاقات للتدفق الحافي الحالة عبر بروتوكول سياق النموذج (MCP). ويحفظ البطاقات في خريطة آمنة للخيوط مفهرسة بتجزئة ثابتة لكل رابط وظيفة.

أين تجري التغيير​

ما تريد تغييرهابدأ في
مصدر وظائف أو نقطة نهايتهengine/sources/، مع قائمة بذور في data/sources/
طريقة احتساب التطابقاتengine/scorer.py
ما تعرضه البطاقةengine/enrich.py، ثم engine/report.py
طريقة فحص الروابطengine/validator.py
مفتاح سطر أوامرswee.py
أداة MCPserver.py
تلميح

تستورد server.py الوحدات نفسها التي تستوردها أداة سطر الأوامر. فاختبر مسار MCP بعد أي تغيير في المحرك، لأن إصلاحًا واحدًا يؤثر في نقطتي الدخول.

مرجع الوحدات​

نقاط الدخول​

الوحدةالغرض
swee.pyالمنسّق الأساسي ونقطة دخول سطر الأوامر عبر argparse لخط المعالجة المكوّن من خمس مراحل.
server.pyخادم بروتوكول سياق النموذج (stdio) الذي يعرض أدوات المحرك لمساعدي الذكاء الاصطناعي.

وحدات المحرك​

الوحدةالغرض
engine/config.pyالمعالج التفاعلي مع تحميل YAML والتحقق منه.
engine/discovery.pyتنسيق أدوات الاستخراج لـ python-jobspy والمصادر الحتمية، وكشف أنظمة تتبع المتقدمين (ATS)، وإزالة التكرار.
engine/validator.pyفحوص استمرار الروابط مع كشف soft-404. وتبقى الروابط غير القابلة للتحقق في التشغيل.
engine/scorer.pyاستخراج مصطلحات السيرة الذاتية، ومطابقة النسبة، والوسم، والاحتساب لكل مسار.
engine/enrich.pyإثراء البطاقات بالملخصات والراتب وتوجيه المسار والنصائح المخصصة.
engine/session.pyمخزن بطاقات آمن للخيوط بمعرّفات ثابتة للتدفق الحافي الحالة عبر MCP.
engine/report.pyPDF تخطيط البطاقات الافتراضي.
engine/pdf_builder.pyPDF تخطيط الجدول القديم لـ report.style: legacy.
engine/exporter.pyتصديرات CSV وJSON، مع تحويل تقارير PDF إلى صور PNG.
engine/tracking.pyأعمدة التتبع وقراءة الترحيل من التصديرات السابقة.
engine/docx.pyتحويل DOCX إلى PDF بـ python-docx وreportlab، مع بديل Microsoft Word.
engine/documents.pyتوجيه المستندات لـ --convert ومحوّل MCP، ويغطي DOCX وDOC والنص وMarkdown وPDF.
engine/logging.pyسجلات تصحيح اختيارية تحت logs/.
engine/cache.pyذاكرة استخراج مؤقتة في SQLite مفهرسة بالاستعلام ومجموعة المحركات، بعمر ساعة واحدة.
engine/circuit_breaker.pyيعدّ أخطاء المصدر المتتالية ويوقف الطلبات أثناء فترة تهدئة.
engine/engine_defaults.pyقوائم مواقع افتراضية مشتركة وإعدادات محركات، بلا استيرادات لتجنب الدورات.
engine/engines.pyسجل المحوّلات ومثبّت المحركات الاختيارية hirehunt وopenroles وapify وjobdrop.
engine/history.pyسجل دائم للإعلانات التي سبق الإبلاغ عنها. فالمسح اليومي يبلّغ عن الوظائف الجديدة فقط.
engine/normalize.pyيوحّد صفوف المحركات الخام في أعمدة الإعلان المشتركة.
engine/salary.pyاستخراج الأجر من نص الإعلان عندما تهمل المنصة الأجر المهيكل.
engine/sweep_config.pyيطبّق القيم الافتراضية المشتركة للمحرك على إعدادات الملف التعريفي.
engine/updater.pyفحص تحديث قائم على Git وإعادة تثبيت التبعيات للنسخة المستنسخة.

المصادر الحتمية​

الوحدةالغرض
engine/sources/__init__.pyتصديرات أدوات الجلب وتحميل قوائم البذور من data/sources/.
engine/sources/_common.pyأدوات مساعدة مشتركة لترويسات HTTP والترشيح المسبق للعناوين وتحويل HTML إلى نص.
engine/sources/greenhouse.pyأداة جلب منصة وظائف Greenhouse.
engine/sources/ashby.pyأداة جلب منصة وظائف Ashby.
engine/sources/lever.pyأداة جلب إعلانات Lever.
engine/sources/workable.pyأداة جلب واجهة برمجة ودجت Workable.
engine/sources/builtinnyc.pyأداة استخراج فئات Built In NYC.

محوّلات المحركات​

الوحدةالغرض
engine/adapters/__init__.pyسجل يربط كل اسم محرك بمحوّله.
engine/adapters/base.pyالصنف الأساسي ScraperAdapter، وترويسة User-Agent المشتركة، وأدوات مساعدة لشكل النتائج.
engine/adapters/jobspy_adapter.pyمحوّل مجمّع python-jobspy لـ LinkedIn وIndeed وGlassdoor وZipRecruiter.
engine/adapters/ats_adapter.pyمحوّل فوق أدوات جلب ATS الحتمية في engine/sources/.
engine/adapters/hirehunt_adapter.pyمحوّل محرك hirehunt الاختياري.
engine/adapters/openroles_adapter.pyمحوّل محرك openroles الاختياري.
engine/adapters/apify_adapter.pyمحوّل ممثل Apify الاختياري.
engine/adapters/jobdrop_adapter.pyمحوّل محرك jobdrop الاختياري.

البيانات والنصوص البرمجية والاختبارات​

المسارالغرض
data/sources/*.txtقوائم بذور للمنصات والشركات والمؤسسات والفئات.
scripts/make_sample.pyأداة بناء التقرير النموذجي المحفوظ في docs/.
tests/مجموعة اختبارات pytest بملف لكل مجال: المحوّلات والتهيئة والمستندات وdocx والمحركات والإثراء والسجل والتسجيل والتقرير. وتغطي ملفات أخرى الأجر ومحتسب التطابق والخادم والجلسة والمصادر وswee والتتبع والمحدّث والمدقق.
ملاحظة

أضف ملف اختبار مخصصًا عندما تغيّر discovery.py أو exporter.py أو pdf_builder.py. وضع الملف في tests/.

التبعيات​

تأتي حزم التشغيل من requirements.txt. وتطابق الإصدارات أدناه ذلك الملف.

الحزمةالإصدارما تفعله لـ Sweepy
reportlab5.0.1يبني تقرير PDF المنسّق مع روابط قابلة للنقر.
pymupdf1.28.2يستخرج النص من سير PDF ويحوّل تصديرات PNG إلى صور نقطية.
python-docx1.2.0يقرأ السير بصيغة .docx ويعيد بناء نص DOCX كـ PDF دون Word.
requests2.32.5يصل إلى نقاط نهاية ATS ويفحص كل رابط وظيفة بحثًا عن استجابة حية.
beautifulsoup44.15.0يحلل HTML من مصادر Greenhouse وLever وWorkable وBuilt In NYC.
pyyaml6.0.3يقرأ الملفات التعريفية بصيغة YAML ويكتبها.
questionary2.1.1يدير أسئلة المعالج التفاعلي.
prompt-toolkit3.0.53يدير إدخال النص التفاعلي في المعالج.
python-jobspy1.2.0يستخرج من LinkedIn وIndeed وGlassdoor وZipRecruiter دون بيانات اعتماد API.
pandas2.2.3ينظّم الإعلانات ويبني تصديرات CSV وJSON.
mcp1.30.0يشغّل خادم بروتوكول سياق النموذج.
anyio4.12.1يشغّل ناقل MCP غير المتزامن.

يسرد requirements.txt حزمة اختيارية واحدة أيضًا. أزل التعليق عن docx2pdf عندما يجب أن يبني Word ملف PDF.

  • docx2pdf (0.5.2، اختيارية) تعرض DOCX إلى PDF عبر Microsoft Word على Windows. ويستدعيها Sweepy كلما وُجد Microsoft Word على الجهاز.
ملاحظة

يبقى mcp على الإصدار 1.x بقصد. فحزمة SDK بالإصدار 2.x تخدم عصر بروتوكول 2026-07-28 فقط. وعميل يستكشف server/discover ثم يعود إلى مصافحة initialize يتلقى خطأ -32022. ويتبع VS Code Copilot ذلك البديل.

تلميح

يبقى pandas على الإصدار 2.x بقصد. فـ Pandas 3.x يتطلب Python 3.11 أو أحدث، ولا تزال مصفوفة CI تختبر Python 3.10.

حزم التطوير (requirements-dev.txt)​

الحزمةالإصدارما تفعله
pytest9.1.1يشغّل مجموعة الاختبارات في tests/.
pytest-cov7.1.0يبلّغ عن التغطية في swee.py وserver.py وengine/scorer.py.
ruff0.17.0يفحص الشيفرة ويرتب الاستيرادات.
tomli2.2.1يوفّر tomllib لتشغيلات اختبار Python 3.10.
الطرفية
pip install -r requirements.txt
pip install -r requirements-dev.txt
ruff check .
pytest -q

المتطلبات وإصدارات Python المدعومة​

العنصرالتفصيل
الحد الأدنى لـ Pythonيتطلب Sweepy الإصدار Python 3.10 أو أحدث ويستهدف صياغة 3.10 في كل وحدة.
النطاق المختبَريشغّل سير عمل CI في .github/workflows/ci.yml الإصدارات Python 3.10 و3.11 و3.12 على Ubuntu.
هدف الفحصيضبط pyproject.toml القيمة target-version = "py310" في ruff. وأي تركيب خاص بإصدار أحدث يفشل مهمة الفحص.
طول السطريفرض Ruff حدًا بـ 100 حرف ويتجاهل E501.
خطوات CIتثبّت المهمة ملفَي المتطلبات وتنفّذ ruff check . قبل pytest.
ملاحظة

يعلن pyproject.toml القيمة requires-python = ">=3.10"، فيرفض pip أي مفسّر أقدم عند التثبيت. وتحدد مصفوفة CI وهدف ruff النطاق المختبَر. ويعمل Python 3.13 عمليًا لكنه يبقى خارج ذلك النطاق.

Python 3.13

قد تُجمَّع حزمة pymupdf من المصدر عندما لا تتوفر حزمة جاهزة. ثبّت Microsoft C++ Build Tools واختر حمل العمل "Desktop development with C++" قبل تثبيت التبعيات.

تخطيط المستودع​

بنية المستودع
swee.py نقطة دخول سطر الأوامر ومنسّق المسح
server.py خادم MCP عبر stdio
engine/ وحدات خط المعالجة
engine/sources/ أدوات جلب حتمية لأنظمة ATS
engine/adapters/ محوّلات المجمّعات والمحركات الاختيارية
data/sources/ قوائم أولية لكل أداة جلب
profiles/ ملفات تعريف بحث بصيغة YAML
results/ ملفات PDF وCSV وJSON وPNG مُنشأة
logs/ سجلات تصحيح اختيارية
styles/ قواعد أسلوب Vale للتوثيق
tests/ مجموعة اختبارات pytest

عندما تغيّر توقيع أداة في server.py، حدّث مرجع أدوات MCP في الالتزام نفسه.