تقدم CFR SA، الشركة الوطنية الرومانية لإدارة البنية التحتية للسكك الحديدية، خدمة معلومات حية عبر الإنترنت (استنادًا إلى نماذج ASPX مع إرسال حالة عرض إعادة النشر والتحقق من صحة الحدث) للحصول على بيانات قريبة من الوقت الفعلي حول رحلات المغادرة والقادمين والمنصات التي تصل فيها القطارات إلى المحطات وتأخير الرحلات والتحديثات. في ذلك الوقت، كان هذا النظام بأكمله يفتقر إلى واجهة برمجة التطبيقات (API) أو حتى واجهة لائقة وسهلة الاستخدام ويسهل العثور عليها للمستخدمين النهائيين.
تقوم واجهة برمجة التطبيقات المستندة إلى Flask باستخراج البيانات من تطبيق ويب CFR كما هو مطلوب في نقطة نهاية واجهة برمجة تطبيقات URL وإخراج بيانات JSON القابلة لإعادة الاستخدام. يقوم البرنامج باستخلاص كافة المعلومات الخاصة به من متغير __VIEWSTATE الخاص بـ ASP.Net.
أنت بحاجة إلى تثبيت Python 3.6+ وPipenv على نظامك.
$ apt تثبيت python3 python3-pip $ pip3 تثبيت Pipenv
استنساخ المستودع وتثبيت تبعيات الوحدة:
استنساخ بوابة $ https://github.com/BodoMinea/cfr-iris-scraper.git $ cd cfr-iris-scraper تثبيت $pipenv
قم بتشغيل خادم API كما هو محدد في وثائق Flask.
تشغيل قارورة $ Pipenv
قد تحتاج إلى تعديل ملف Pipfile ليتوافق مع إصدار Python المحلي الخاص بك حتى يتم التثبيت بنجاح
python_version = "3.6.9"
يستمع Flask بشكل افتراضي للطلبات المحلية فقط. يُنصح بإبقائه على هذا النحو وتثبيت وكيل عكسي لعمليات نشر أكبر، ولكن للوصول إلى جهاز الاختبار الخاص بك من شبكة LAN، قم بتشغيله باستخدام:
$ Pipenv Run flask run --host 0.0.0.0
سيتم ربط هذا بجميع الواجهات المتاحة.
يمكنك الآن توجيه متصفحك إلى http://localhost:5000/station/ID لرؤية السحر. المعرف هو رمز وحدة المحطة الفريد؛ يتم توفير القائمة بواسطة نقطة النهاية http://localhost:5000/get-stations/.
على سبيل المثال، للحصول على كائن JSON مع لوحة المغادرة/الوصول الحالية ومعلومات التأخير لمحطة السكك الحديدية الشمالية في بوخارست (المحطة الرئيسية والأكبر في بلدنا)، يمكنك توجيه متصفحك أو متغير عنوان URL لأي تطبيق تستخدمه البيانات إلى: http://localhost:5000/station/10017.
بنفس الطريقة التي يمكنك بها الحصول على القطارات الحالية في محطة سكة حديد معينة، يمكنك الحصول على المعلومات الحالية لقطار معين. يوفر CFR معلومات مثل التأخير، وآخر محطة مر بها القطار (مع تأخير لمدة 7 دقائق)، والمحطة التالية وغيرها من المعلومات المفيدة.
ما عليك سوى توجيه متصفحك إلى http://localhost:5000/train/ID، حيث المعرف هو الرقم الفريد للقطار. يمكنك الحصول على هذه المعرفات من موجز معلومات المحطة. على سبيل المثال، يمكنك استرداد المعلومات الخاصة بالقطار IR 1651 من شمال بوخارست إلى شمال سوسيفا (صالح اعتبارًا من أبريل 2017) عن طريق الوصول إلى http://localhost:5000/train/1651.
يوجد أيضًا عميل ويب مضمن في واجهة برمجة التطبيقات (API). توجه إلى http://localhost:5000/static/station.html أو http://localhost:5000/static/train.html أو http://localhost:5000/static/train.html?tren=9351 (القطار المحدد مسبقًا رقم) لمشاهدته.
في حين أن التطبيقات الرسمية نفسها تعمل ولكنها قد لا تبدو رائعة، فقد بذل المطورون الرومانيون قصارى جهدهم لإنشاء بعض المشاريع الرائعة مفتوحة المصدر والخدمات عبر الإنترنت المتعلقة بالنقل والبنية التحتية. شاهد هذه الخريطة الحية، وهذا المحول الخاص إلى GTFS، ومخطط الرحلة هذا، وما إلى ذلك.
باستخدام واجهة برمجة التطبيقات هذه والموارد العامة الأخرى، يمكنك إنشاء نمطك الخاص من لوحة مغادرة المحطة، وخدمة إشعار التأخير، وتطبيق جوال رائع المظهر، بينما تتعلم كيفية البرمجة والتعامل مع البيانات المنظمة؟
هذا مشروع مفتوح المصدر بالكامل، مبني على وحدات ومكتبات مفتوحة المصدر ومرخص بموجب Do What the Fuck You Want to Public License الإصدار 2.
كما أنك مسؤول مسؤولية كاملة عما تفعله به - ضع في اعتبارك أن CFR SA وInfoFer (شركة تكنولوجيا المعلومات المملوكة للسكك الحديدية الحكومية والتي تبني برامجها) ليستا شفافتين بشكل خاص أو غير صديقتين لمطوري الطرف الثالث. إذا قمت بإجراء عملية استخراج جماعي أو تطوير بعض الخدمات العامة التي تولد الكثير من حركة المرور من نفس الخادم إليهم أو تستنسخ بياناتهم إلى قاعدة بيانات لأسباب مختلفة، فقد تواجه بعض المشاكل، كما حدث مع هذا الزميل المتحمس أثناء إنشاء شبكة ويب مخطط الرحلة باستخدام الجدول الزمني لـ CFR Calatori من موقعه على الإنترنت.
ولكن بالنسبة للترقيع والتلاعب والعمل مع البيانات في الوقت الفعلي التي من الواضح أنها لا يمكن أن تربك أي شخص إذا لم يكن الخطأ من CFR أنفسهم، فيجب أن تكون على ما يرام وعلى الجانب الصحيح من القانون، على الأقل من تجربتي. ربما سيقدمون واجهة برمجة التطبيقات الخاصة بهم مع القواعد والترخيص المناسبين في مرحلة ما.
لا تتم مصادقة الطلبات ولا يتم تطبيق أي قيود على المعدل، لذا فهي ليست جاهزة بأي حال من الأحوال للعرض على الويب.
وهذا ليس سريعًا بشكل خاص، لأن صفحة ويب CFR ليست كذلك. ربما ستحتاج إلى طلبات الخلفية والتخزين المؤقت. بعد تقديم الطلب الأولي، سينتظر 8 ثوانٍ قبل تحليل البيانات. إذا لم يتم عرض البيانات على صفحة الويب، فسوف تنتظر 20 ثانية إضافية. بعد ذلك، ستخرج واجهة برمجة التطبيقات (API) كائنًا فارغًا - قد يعني هذا أن خدمة الويب المسروقة معطلة، أو أنها بطيئة جدًا في الاستجابة أو لا توجد رحلات حالية تتوقف في تلك المحطة المحددة (في الليل أو عند محطة صغيرة، مثال). تم الإصلاح: إذا كانت واجهة برمجة التطبيقات (API) معطلة، فستحصل على حالة خطأ 5xx.
يعد هذا بمثابة تجريف وتحليل، لذا فإن أي تحديث هيكلي لصفحة ويب CFR، على الرغم من أنه من غير المحتمل جدًا في المستقبل القريب، قد يؤدي إلى كسر هذا.
لا يوفر موجز معلومات القطار التفاصيل المتعلقة بتأخيرات القطار والمعلومات المفيدة الأخرى التي تقدمها Infofer مع خدمتهم. سيتم تحديث هذا في المستقبل. تم إصلاح: يتم إخراج جميع معلومات IRIS العامة على واجهة برمجة التطبيقات (API) هذه.
خدمة المعلومات العامة على شبكة الإنترنت التي تقدمها CFR SA من خلال Informatica Feroviara: http://appiris.infofer.ro/SosPlcRO.aspx، http://appiris.infofer.ro/MyTrainRO.aspx، http://appiris.infofer.ro /ميرسترينرو.aspx. هذه معلومات من إدارة البنية التحتية وليست شركة نقل ركاب محددة. يمكن العثور على الجداول الزمنية الرسمية للركاب هنا: http://mersultrenurilor.infofer.ro، ومصدر بيانات XML الثابت مع تحديث الجداول الزمنية في نهاية كل عام: http://data.gov.ro/organization/sc-informatica-feroviara- سا