كل المقالات

كيف قامت KORENA ببناء مؤشر لأسعار الأخشاب على منصة FourA

قامت KORENA ببناء مؤشر يومي لأسعار الأخشاب الأوروبية بالاعتماد على بوابات الغابات، وملفات PDF الخاصة بالمزادات، وعشر عملات مختلفة. وتُمثل FourA طبقة الـ request التي تقف وراء ذلك.

تُعد بيانات أسعار الأخشاب الأوروبية عامة من الناحية التقنية، ولكنها غير صالحة للاستخدام عملياً. إذ تدرج إحدى الدول أسعار خشب البلوط باليورو لكل متر مكعب، باستثناء الضرائب. بينما تشارك دولة مجاورة أسعار خشب الزان بالعملة المحلية، شاملة الضرائب، مدفونة داخل ملف PDF ممسوح ضوئياً ولا يحتوي على طبقة نصوص قابلة للبحث. وما يزيد الأمر سوءاً هو أن الأشجار القائمة، وجذوع الأشجار على جوانب الطرق، وحصص المزادات المختارة غالباً ما تُسعّر جنباً إلى جنب وكأنها منتجات متطابقة.

البيانات الخام موجودة. لكن تحليلات السوق غائبة.

أطلقت KORENA مؤشر KORENA Timber Index لحل هذه المشكلة. والنتيجة هي مرجع يومي ومتاح مجاناً لأسعار الأخشاب الصلبة، والأخشاب الإنشائية، وألواح الخشب الأوروبية. اعتباراً من منتصف عام 2026، يتتبع المؤشر ما يقرب من أربعة وعشرين نوعاً و170 صفاً للأسعار الإقليمية عبر عشر دول (رومانيا، ألمانيا، بلغاريا، بولندا، فرنسا، النمسا، إيطاليا، فنلندا، النرويج، السويد)، بالإضافة إلى مستوى سوق موحد للاتحاد الأوروبي.

لتغطية كل هذه المساحة بواسطة فريق هندسي مكون من شخصين فقط، كان على KORENA حسم قرار واحد أولاً: من سيتولى التعامل مع الويب. لقد اختاروا FourA، وقاموا بتوجيه كل شيء من خلالها.

بوابة واحدة إلى الويب

اتخذت KORENA خياراً معمارياً في وقت مبكر: كل web request خارجي يمر عبر FourA. لقد تخلصوا من أدوات الكشط العشوائية، والسكربتات التي تُستخدم لمرة واحدة، والأوامر المخصصة المخفية داخل قاعدة الكود البرمجي.

لم يكن الأمر يتعلق بالراحة. بل بالاتساق. تتصرف بوابات الغابات بشكل غير متوقع. بعضها عبارة عن صفحات HTML ثابتة. والبعض الآخر عبارة عن منصات مزادات حديثة لا تعرض البيانات إلا بعد أن يقوم المتصفح بعملية rendering لها. وغالباً ما تكون المواقع الحكومية بطيئة، أو قديمة، أو محمية بشكل مكثف.

من خلال توجيه جميع حركات المرور عبر البنية التحتية للـ request الخاصة بـ FourA، تتعامل KORENA مع عمليات إعادة المحاولة (retries)، والـ backoff، وتسجيل السجلات (logging)، والتنبيهات (alerting) بنفس الطريقة عبر كل مصدر. ويمكن عمل hash لكل مستند يتم استرداده، وتخزينه، وتتبع مصدره وصولاً إلى سعره النهائي لتدقيق الحسابات.

اختيار استراتيجية الـ Fetch المناسبة لكل مصدر

بدلاً من كتابة منطق الكشط (scraping logic) بشكل ثابت لكل موقع، تقوم KORENA بربط كل مصدر بيانات بـ endpoint معين في FourA مباشرة في قاعدة بياناتهم (انظر choosing the right task type للاطلاع على التفاصيل الكاملة). ويمكنهم تبديل الاستراتيجيات دون المساس بكود التحليل (parsing code) الأساسي لديهم:

  • Single (/single/): صفحات HTML الثابتة، وخلاصات XML، وتنزيلات PDF المباشرة. التقارير الإحصائية الألمانية، وتحديثات الغابات الحكومية البلغارية، وجداول الأسعار الرومانية. سريعة، وخفيفة الوزن، وهي الخيار الافتراضي المناسب لمعظم المواقع.

  • Browser (/browser/): تطبيقات الويب التفاعلية التي تتطلب بيئة متصفح حقيقية. تتطلب منصة المزادات البولندية e-Drewno إجراء rendering قبل ظهور الأرقام. إذ لا يحتوي كود HTML الأولي على أي شيء مفيد.

  • Proxy Finder (/proxy/): الحل البديل للأهداف الأكثر صعوبة. تدوير أقوى، بالإضافة إلى unblocker: true لتجاوز جدران الحماية ضد البوتات على مستوى المصافحة (handshake-level anti-bot walls).

نظراً لأن هذا الإعداد يتم لكل مصدر وليس سكربت مكتوباً بشكل ثابت، يمكن لـ KORENA نقل المصدر من Single إلى Browser إلى Proxy Finder عندما يغير الموقع دفاعاته. ولا تشعر طبقة التحليل (parsing layer) بذلك أبداً.

ملفات PDF الممسوحة ضوئياً: الجزء الأصعب

تُعد واجهات برمجة التطبيقات (APIs) الحديثة للويب واضحة ومباشرة. أما الحالة الأصعب للأتمتة فهي ملفات PDF التي تحتوي على صور فقط. قوائم الأسعار ونتائج المزادات المنشورة كمسوحات ضوئية، دون أي طبقة نصية على الإطلاق. بالنسبة للإنسان، هذا أمر مزعج. أما بالنسبة لمؤشر يومي، فإن هذا يعطل سير العمل (pipeline).

يتعامل سير عمل KORENA مع هذه الملفات من خلال تقسيم واضح للمهام:

  • الاسترداد (Retrieval): تقوم FourA بتنزيل البايتات الخام لملف PDF يومياً وبشكل موثوق.

  • تقييم النص (Text evaluation): تتحقق KORENA من الملف للبحث عن طبقة نصية أصلية قابلة للاستخدام.

  • المعالجة والاستخراج (Processing and extraction): إذا كان ملف PDF عبارة عن صورة مسطحة، تقوم KORENA بتحويل الصفحات إلى صور نقطية (rasterises) وتمريرها عبر تقنيات OCR واستخراج المستندات بالذكاء الاصطناعي، مع تطبيق تلميحات لغوية مخصصة وقواميس لأنواع الأخشاب لالتقاط مصطلحات الغابات المحلية.

  • التحقق من المخطط (Schema validation): يتم التحقق من صحة المخرجات مقابل نفس المخطط (schema) المستخدم لكل المصادر الأخرى.

لا يمكن لأي من هذا أن يعمل إذا لم تتمكن من جلب (fetch) المستند بشكل موثوق كل يوم. وهذه هي الخطوة التي تتكفل بها FourA.

الجلب مقابل الفهم: فصل واضح للمهام

تتمثل مهمة FourA في تقديم البايتات الخام بشكل موثوق. وهي لا تحتاج إلى معرفة أي شيء عن الأخشاب. يتيح ذلك لـ KORENA تركيز 100% من طاقتها على ما تعرفه بالفعل: تحويل البيانات الفوضوية إلى مؤشر موحد. كل ما هو خاص بمجال العمل يظل لدى KORENA. يتم تحليل HTML محلياً، وتُقرأ ملفات PDF الرقمية باستخدام pdfjs-dist، وتُعالج ملفات PDF الممسوحة ضوئياً عبر OCR.

خطوة المعايرة (normalisation) هي المرحلة التي تتحول فيها الأرقام الخام إلى مؤشر. فسعر الشجرة القائمة ليس هو نفسه سعر جذوع الأشجار المعدة للنشر، ونتائج المزادات المحلية الشاملة لضريبة القيمة المضافة لا يمكن مقارنتها مباشرة بعروض التصدير المستثنى منها ضريبة القيمة المضافة. لتحويل الأرقام الخام إلى تحليلات سوق قابلة للمقارنة، تقوم KORENA بتحويل جميع البيانات إلى معيار واحد: اليورو لكل متر مكعب، باستثناء ضريبة القيمة المضافة (ex-VAT)، وما يعادل سعر التسليم (delivered-equivalent).

وللقيام بذلك بدقة، يأخذ النظام في الاعتبار:

  • أسعار الصرف اليومية من البنك المركزي الأوروبي.
  • قواعد ضريبة القيمة المضافة المحلية لكل دولة.
  • عوامل النقل بناءً على مرحلة تصنيع الخشب.

كما يحافظ المؤشر على فصل مستويات السوق المختلفة. إذ تظهر الأخشاب المستديرة السائبة، ومزادات الأخشاب القيمة، وقوائم التجزئة كفئات منفصلة ولا يتم خلطها معاً أبداً. فلا يُسمح لحصة مزاد ممتازة بتشويه الخط المرجعي للأسعار.

هذا الفصل هو جوهر الأمر: FourA تحل مشكلة الوصول إلى الويب، وKORENA تحل مشكلة الأخشاب. ولا يصبح أي منهما صندوقاً أسود يعتمد عليه الآخر.

لماذا أصبحت شفافية أسعار الأخشاب أمراً ملحاً فجأة

تدفع اللوائح الأوروبية الأكثر صرامة، بما في ذلك قانون الاتحاد الأوروبي لمكافحة إزالة الغابات (EUDR)، سوق الأخشاب نحو إمكانية التتبع الكامل وتوثيق مصادر أكثر وضوحاً. وتُعد شفافية الأسعار هي النصف الآخر من هذه المعادلة. فمزارعو الأخشاب الذين يقارنون القيم الإقليمية، والمشترون الذين يتحققون من عروض الأسعار، والأسواق الرقمية التي تحدد الأسعار المرجعية، يحتاجون جميعاً إلى بيانات يومية، محلية، وقابلة للمقارنة. وليس إلى متوسطات سنوية قديمة أو أرقام محلية تُنشر لمرة واحدة.

بالنسبة لفريق هندسي صغير مكون من شخصين يغطي عشر دول ومئات من تنسيقات الويب غير المتوقعة، لم يكن بمقدورهم تضييع الوقت في إدارة البنية التحتية للـ proxy، وأساطيل المتصفحات (browser fleets)، وحلول تجاوز أنظمة مكافحة البوتات (انظر the hidden cost of maintaining your own scrapers لمعرفة الحسابات الكاملة). تتولى FourA إدارة طبقة الـ request. بينما تستعيد KORENA الوقت للتركيز على معايرة الأنواع، وضبط الـ OCR، ومنطق التسعير، ومسارات التدقيق، وهو العمل الذي لا يمكن لأحد غيرهم القيام به.

كانت أسعار الأخشاب اليومية تعني في السابق إجراء مكالمة هاتفية مع وسيطك الإقليمي. أما الآن، فيمكن لأي شخص رسم منحنى الأسعار بنفسه على timber-index.korena.eu. لن تملك المنتجات العشرة القادمة الشبيهة بهذا المؤشر الوقت لبناء طبقة الـ fetch من الصفر. وهذا هو الرهان الذي نضعه.


هل تبني منتجاً يعتمد على بيانات الويب العامة وتعبت من صيانة أدوات الكشط الخاصة بك والبنية التحتية للـ proxy؟ ابدأ مع FourA.