هو عن طريق السكك الحديدية في الوقت المحدد؟

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

لسوء الحظ، يتعين على السكك الحديدية المسافر أن ينتج إلى السكك الحديدية الصناعية في كندا مما يؤدي عادة إلى التأخير. بعد ملاحظة أن بعض القطارات تأخير منتظم للغاية، يبدو أنه سيكون مفيدا لفهم الأداء النموذجي لكل سبل قطار. عن طريق عدم توفير هذه البيانات علنا.

ومع ذلك، فإنهم يقومون بتوفير بعض البيانات حول الوصول وكذلك أوقات المغادرة. حفر إلى البيانات المقدمة مع أي نوع من متصفح التحقق من موقع السكك الحديدية من خلال وسائل السكك الحديدية، كان من الممكن الاستفسار عن بيانات وصول الماضي المجدولة / الفعلية. والنتيجة هي trainstats.ca، وشاشة من Via’s في أداء في الوقت المناسب. انضم إلي بعد الانهيار الذي أذهب إليه بالضبط كيف يعمل هذا كل شيء، وكذلك بالضبط كيفية اختيار بطل عند الحصول على تذكرة القطار التالية.

الحصول على البيانات

VIA يقوم بتزويد البيانات الروتينية في اليوم السابق، وكذلك في اليوم التالي على صفحة حالتها. وهذا من شأنه أن يسمح لنا بتطوير مجموعة من بيانات الرحلة، ولكن في يوم من الأيام فقط في وقت واحد. لحسن الحظ، يمكننا إنهاء مفتش Chrome بالإضافة إلى اكتشاف طلب الحصول على هذا:

http://reservia.viarail.ca/tsi/gettrainstatus.aspx؟l=en&tsiccode=via&tsitrainnumber=87&departuredate=2015-12-01&arrivaldate=2015-12-01&traininstancedate=2015-12-01&t=1449033500354.

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

تتكون هذه البيانات من نص Unicode ثنائي الاتجاه يمكن تفسيرها أو تجميعها بطريقة مختلفة مما يظهر أدناه. مراجعة، افتح البيانات في محرر تحريض أحرف Unicode المخفية.
اكتشف الكثير عن أحرف Unicode ثنائية الاتجاه

إظهار الأحرف المخفية

الحمولة = {‘l’: ‘en’،

“Tsiccode”: ‘عبر’،

‘tsitrainnumber’: train_number،

“المغادرة”: Trip_Date،

“arrivaldate”: trip_date،

“Traininstactectionate”: Trip_Date}

R = request.get (‘http://reservia.viarail.ca/tsi/gettrainstatus.aspx&#39؛

Params = الحمولة)

عرض الخام

طلببي

عقدت مع جيثب

يتيح لنا هذا الرمز إحضار البيانات لأي نوع من رقم القطار في أي نوع من التاريخ. بعد بعض الاختبارات، اكتشفنا أن بيانات Via تعود إلى أبريل 2015، والتي توفر لنا أكثر من 6 أشهر من البيانات. لكل رحلة، نحصل على وصولها الفعلي بالإضافة إلى أوقات المغادرة لكل محطة. الحفاظ على هذه المعلومات، يمكننا أن نحدد بسرعة بالضبط مدى تأخر القطارات.

من خلال بيانات الصفحة التي يتم إجراؤها كأملاء HTML، تم اختراق البرنامج النصي معا باستخدام مجموعة جميلة لاستخراج جميع القيم. ثم ينتج البرنامج النصي هذا كائنات لبيانات الرحلة بالإضافة إلى تخزينها في قاعدة بيانات PostgresQL باستخدام SQLAlchemy. هذا يجعلها بسيطة وكذلك فعالة للوصول إلى البيانات لاحقا.

كانت الخطوة الأخيرة هي تكرار جميع أرقام القطار وكذلك أيام لسحب البيانات. يستخدم هذا البرنامج النصي للتو بعض الحلقات المتداخلة للحصول على البيانات وكذلك تخزينها. ينتظر البرنامج النصي آخر بيانات اليوم السابق وكذلك تخزينه في قاعدة البيانات. تم إعداد هذا على وظيفة Cron، لذلك تبقى قاعدة البيانات طازجة.

بناء موقع (رخيص)

trainstats.ca الموقع
في هذه المرحلة، لدينا بيانات الوصول إلى أكثر من 12000 رحلة. في حين أننا نستطيع تشغيل الاستعلامات يدويا وكذلك إنشاء البرامج النصية لإنتاج المؤامرات، فهي أكثر متعة بكثير لوضع البيانات عبر الإنترنت. يشير إلى أنه حان الوقت لتطوير موقع على شبكة الإنترنت. إن جعل الأمور تبدو رائعة على الويب ليست فورتي، لذلك قفزت [فيل إيفرسون] للقيام ببعض تطوير الويب.

لإضافة قيود، كنا نرغب في جعل الموقع بأسعار معقولة قدر الإمكان. منصة كعورات خدمة مثل هيروكو ران حوالي 20 دولارا شهريا. خادم شخصي عبر الإنترنت من DigitaloCean سيكون على حساب 5 دولارات على الأقل. كان الاختيار الأقل تكلفة هو جعل موقع ثابت.

صفحة ويب ثابتة هي رحلة العودة إلى أيام الجبن. يمكنك الاحتفاظ بالملفات، ومع ذلك، لا يمكن القيام بأي نوع من المعالجة على الخادم. لحسن الحظ، هذا عمل جيدا لنوع البيانات التي نقدمها. قد يتم تصدير جميع بيانات الرحلة المجمعة إلى ملفات JSON، وكذلك JavaScript على جانب العميل، يمكن للبيانات بالإضافة إلى قطع الشاشة.

يتكون موقع TrainStats من بعض HTML، CSS، بالإضافة إلى جافا سكريبت يعمل في متصفحك، بالإضافة إلى مجموعة من بيانات JSON مع البيانات. يتم إنشاؤها DataSet يوميامن خلال وظيفة واحدة أخرى، تتيح جميع المعالجة تحدث في واحدة على جهاز كمبيوتر إقليمي. ثم يتم استخدام واجهة سطر الأوامر على خدمات Amazon لخدمات الويب لدفع البيانات إلى S3، حيث يمكن استرجاعها من قبل المستخدمين. نظرا لأن مجموعات البيانات صغيرة، فضلا عن S3 رخيص، فهذا يجعل التكاليف أقل من الاستضافة العادية.

النتائج

تم تطوير هذا الاختراق بشكل أساسي للمتعة، ومع ذلك، فإنه يحتوي على بعض النتائج الرائعة. على طريق Ottawa العادي إلى طريق تورونتو، أنا أكثر عرضة لتحديد القطار الذي في الوقت المناسب 84٪ من الوقت، مقابل واحد فقط يتصل فقط في المحطة دون تأخير في 28٪ من الرحلات. قد يكتشف بعض المسافرين الآخرين الإحصائيات مفيدة أيضا. في كلتا الحالتين، كان تمرينا رائعا في إزالة مجموعة بيانات بالإضافة إلى توفير خدمة ويب على الرخيص.

إذا كنت تفكر في المصدر، فكل شيء على جيثب لأخذها. نطلب منك أن لا تفعل DDOS عن طريق السكك الحديدية معها.

Leave a Reply

Your email address will not be published. Required fields are marked *