تم النشر بواسطة ميخائيل أكسينوف ، مطور .NET ، DataArtكيف بدأ كل شيء
في خريف عام 2014 ، كانت هناك أخبار جيدة عن إطلاق Yandex.Transport في فورونيج ، مما يدل على حركة الحافلات وحافلات الترولي. كان من الرائع جدًا في محطة الحافلات أن تفتح جدولًا زمنيًا وتكتشف أن الحافلة ستعمل في غضون 5 دقائق.
ولكن بعد شهرين ، سار كل شيء وفقًا لسيناريو متوقع تمامًا. نظرًا لأن جميع وسائل النقل في فورونيج من العربة إلى الحافلة الصغيرة تعمل نقدًا ، فإن كل سائق مهتم بنقل أكبر عدد ممكن من الركاب. ونتيجة لذلك ، يرتبون السباقات فيما بينهم.
استخدم السائقون الخدمة الجديدة لمتابعة بعضهم البعض على الخريطة ، وتجاوز وخفض المنافسين على الطريق. بدأ البعض في الانخفاض في الإيرادات ، وبدأوا في تقديم شكوى لأصحاب الطرق ، وذهبوا إلى الأشخاص الذين يبيعون المعدات باستخدام GLONASS و GPS ويرسلون بيانات حول تحركات السيارات إلى Yandex. بناء على طلب أصحاب الأساطيل ، توقفوا عن إرسال المعلومات ، وبدأت الحافلات تختفي على الفور من الخريطة. الآن هناك المزيد منهم ، ولكن هذا لا يزال أقل بكثير مما هو عليه في الواقع.

بالنسبة لأولئك الذين كسالى جدا لقراءة المزيد ، أقترح تقرير فيديو حول هذا الموضوع:
بالنسبة للبقية - سأصف المشروع في شكل نص.
من أين تحصل على البيانات؟
في الوقت نفسه ، في فورونيج ، يوجد مكان يتم فيه جمع جميع البيانات -
مركز تنظيم حركة المرور على الطرق (DPC). لديهم تطبيق ويب كبير وثقيل على موقعهم مع جافا سكريبت غير قابل للتحمل وغيرها من القطع الأثرية ، في حين أن كل شيء فيه يأتي مع طلبات POST ولا يتم تخزين أي شيء مؤقتًا. باستخدام هذا الموقع نفسه ، يمكنك بسهولة وضع خدمة تجمع البيانات عن حركة الحافلات.
كان هناك خيار يسمح لك بالوخز على الخريطة ومعرفة متى ستأتي الحافلة وما ستكون عليه. شريطة أن تتوقف تقريبًا (± 50 مترًا). في القائمة ، يمكنك فتح قائمة بالطرق ورؤية أين تذهب الحافلات بالضبط ، ولكن كانت هناك مشكلة - لقد قادوا السيارة بغرابة. على سبيل المثال ، على طول كولتسوفسكايا ، وهو شارع في المركز لا يمكنك تسريعه بشكل خاص ، تحركت الحافلة للأمام والخلف بسرعة حوالي 200 كم / ساعة.
لماذا بيثون؟
لقد اخترت Python لأنها رائعة ، والبطاريات مجمعة ، وما إلى ذلك. و 3.6 لأن هناك تنسيقًا للحروف الوترية ، والكتابة ، هذا كل شيء. دعونا نلقي نظرة على ما استخدمته بشكل أساسي:
- اشتكى الكثير من أن قيادة الاسم الصحيح للتوقف مع جميع أنواع علامات الترقيم أمر صعب للغاية. ثم أدركت إمكانية البحث الغامض وأنشأت أول اختبار للوحدة.
- يتم استضافة النظام بأكمله على Heroku. إنه مجاني ، لأنني لا أملك قاعدة بيانات - آمل أن أتجاوز قاعدة بيانات مركز البيانات. وافقت على استخدامه مع المركز عندما أدركت أن البيانات التي أجمعها من خلال واجهة الويب ليست كافية.
- في الواقع ، يمر الاستضافة من خلال خادم الويب تورنادو. أعتقد أنه مألوف لأي شخص وصل عبر طلبات الويب في Python.
- كنت بحاجة إلى حزمة Pytz لأن خادم Heroku في منطقة زمنية مختلفة ، وتأتي البيانات لي دون تحديد منطقة زمنية. لذلك ، اهتمت بنفسي بالتوطين.
- لإنشاء البوت ، استخدمت مكتبة Python-telegram-bot الموصى بها. التوثيق هنا مناسب تمامًا ، وبشكل عام تلبي المكتبة الحد الأدنى من متطلبات المنتج القابلة للتطبيق. في البداية ، كان المشروع بأكمله عبارة عن روبوت Telegram ، والذي أرسل ردًا على جدول الحافلات استجابةً لإرسال موقعك.
- Firebird ، Interbase السابق ، هي قاعدة بيانات مفتوحة المصدر أعتقد أن الكثير منكم قد عمل معها. بالطبع ، ليس الأمر رائعًا مثل PostgreSQL نفسه ، ولكن يكفي لعدد كبير جدًا من الاستفسارات. في حالتنا ، ليس هناك حاجة إلى المزيد.
- Cachetools هي وحدة بسيطة للغاية تسمح لك بتخزين الحسابات. هذا ، بطبيعة الحال ، لا يتعلق بالذاكرة المؤقتة أو التخزين المؤقت لصفحات الويب ، ولكن حول تلك الحالات التي تحتاج فيها إلى مذكرة للاستعلامات الطويلة. فقط خذها ، أضف الديكور المناسب - وكل شيء يعمل. تحتوي ذاكرة التخزين المؤقت على خيارات مختلفة ، أستخدم إصدار TTL ، الذي يحفظ البيانات للوقت المحدد ، لأنني أعلم أنه لن يتم تحديث البيانات أكثر من فترات زمنية معينة (في حالتي - 30 ثانية).
وظائف الروبوت
- / next stop stop name - وقت الوصول المتوقع ؛
- / أرقام المسار الأخير مفصولة بمسافات - محطات التوقف الأخيرة ؛
- إرسال الموقع - وقت الوصول المتوقع للمحطات الثلاث التالية ؛
- دخول مجاني - أرقام الطريق والمسافة للحافلات (عند إرسال الموقع).
حاولت أن أوصف الأوامر بشكل كافٍ حتى لا يسأل الناس عن كيفية استخدامها. هناك أمرين أساسيين: nextbus ، عندما تكتب اسم المحطة ، وترسل الموقع.
وظائف الموقع
لقد جعلت
الموقع أضيق الحدود ممكن. من مكتبات الجهات الخارجية ، استخدمت اثنين فقط لدعم الجلب والوعد ، لأن الإصدارات القديمة من المتصفحات المثبتة مسبقًا في الهواتف لا يمكن الاستغناء عنها. إذا كنت لا تدعم هذه الأساليب ، فسوف تحصل على شعرية مكثفة لطلبات الاتصال نفسها. مع الجلب ، يبدو كل شيء أكثر أناقة.

في الواقع ، تتكون الوظيفة هنا من 4 نقاط:
- الوصول يمكنك فقط مشاهدة المحطة. من خلال النقر على الزر (بالمناسبة ، قد يكون من المفيد القيام بالمزيد - سأفكر في ذلك!) ، فأنت ترسل موقعك ، ويبحث النظام عن المحطات الثلاث الأقرب إليك ويعرض معلومات عنها. يمكنك إدخال اسم المحطة والحصول على معلومات عنها. نظرًا لأنك بالكاد تحتاج إلى جميع الحافلات التي يتراوح عددها من 20 إلى 30 حافلة يمكنها الوصول إلى موقف الحافلات ، يمكنك تصفيتها حسب المسار.
- الحافلات تحتوي الصفحة الثانية على معلومات عن الحافلات. هذا بسبب قصة أخرى دفعتني إلى هذا المشروع. في أحد الأيام الجميلة ، نسيت القبعة في الحافلة ، اتصلت بغرفة التحكم ، وأوضحت مكان حدوثها. اقترح المرسل أن أركب حافلي في المركز ، حيث سيعود ، ويستدير في المحطة. تذكرت أن لدي تسجيل دخول وكلمة مرور من نظام مركز إدارة المرور ، ولكن اتضح أنني ما زلت لا أستطيع تتبع موقع السيارة التي أحتاجها من خلال واجهة الويب. لقد أرجعت القبعة ، ولكن بصعوبة كبيرة.
اعتقدت أن العثور على حافلة يمكن أن يكون أسهل بكثير. لقد كتبت رقم المسار ، ويظهر لك النظام السيارات على الخط ، وموقعها الحالي والوقت الذي يمر فيه توقف على طول الطريق. وحتى إذا كنت تعرف رقم المسار ، ولكنك تعرف رقم الحافلة (يحدث هذا أيضًا) ، فلا يزال بإمكانك العثور عليه. - الخريطة. خريطة على الموقع بدون رسوم متحركة. هنا يمكنك تحديد الحافلات من القائمة أو إدخال الأرقام يدويًا ، يمكنك تصفيتها. يمكن عرض ما يصل إلى 600 حافلة على الخريطة ، على الرغم من أنه بعد 20 يصعب العثور على شيء ما في المركز ، ببساطة لأن المسارات كلها مركزة هنا. لذلك ، من الأفضل قصر البحث على معلمات أكثر صرامة.
- عن المشروع. الآن المشروع لديه موقع على شبكة الإنترنت ، هناك بوت Telegram ، مجموعات في الشبكات الاجتماعية.
***
لحسن الحظ ، Python هي لغة بها بطاريات خارج الصندوق. بالنسبة إلى الأشياء البسيطة ، لا تحتاج إلى تنزيل أي شيء ، فما عليك سوى قراءة الوثائق بعناية.
بالطبع ، يمكن القيام بهذه الخدمات لمدن أخرى ، علاوة على ذلك ، في بعض أنها تعمل بالفعل. يعتمد الكثير على مركز البيانات المحلي ، في بعض الأماكن ، على سبيل المثال ، في سان بطرسبرغ هناك حتى API للمطورين. لكن الشيء الأكثر أهمية هو سكان المدينة الذين يرغبون في تغيير مدينتهم للأفضل.