تهدف هذه الحزمة إلى توفير واجهة نظيفة وأداء وخالية من العوائق لمعلومات الجدول الزمني لـ Münchner Verkehrsgesellschaft (MVG) ، المسؤولة عن وسائل النقل العام في ميونيخ. يقوم بتصدير الفئة MvgApi لاسترداد المحطات والخطوط والمغادرة من API JSON غير الرسمية على https://www.mvg.de.
هذا المشروع ليس مشروعًا رسميًا من Münchner Verkehrsgesellschaft (MVG) . تم تطويره كمشروع خاص من عدم وجود واجهة برمجة تطبيقات موثقة ويمكن الوصول إليها علانية. إنه ببساطة يعيد إنتاج الطلبات المقدمة من https://www.mvg.de لتوفير وصول خالي من الحاجز إلى معلومات الجدول الزمني المحلي.
لذلك ، فإن قيود الاستخدام التالية من بصمة MVG تنطبق على جميع مستخدمي هذه الحزمة :
تستخدم أنظمتنا لتفاعل العملاء المباشر. تتطلب معالجة المحتوى أو البيانات الخاصة بنا من قبل أطراف ثالثة موافقتنا الصريحة. لأغراض خاصة غير تجارية ، يتم التسامح مع الاستخدام المعتدل دون موافقتنا الصريحة. أي شكل من أشكال استخراج البيانات لا يشكل استخدامًا معتدلًا . نحن نحتفظ بالحق في إلغاء هذا الإذن من حيث المبدأ أو في الحالات الفردية. يرجى توجيه أي أسئلة إلى: [email protected]
(من https://www.mvg.de/impressum.html ، تم الوصول إليه في 04. فبراير 2023)
كان المشروع مستوحى من حزمتين حاليتين:
mvg-live.de . اعتبارًا من عام 2022 ، لم يعد موقع MVGlive موجودًا وتم أرشفة الحزمة. على الرغم من أن واجهة برمجة التطبيقات القديمة لا تزال تعمل في بعض المحطات ، إلا أنها لا تعمل للآخرين - ويرجع ذلك أساسًا إلى معرفات المحطة المحدثة. لذلك ، تعتبر الحزمة مستهلكة ولا يمكن استخدامها للتصميمات الجديدة.www.mvg.de/api/fahrinfo ، والتي أصبحت دون اتصال في عام 2024. نظرت في معرفات المحطة المحدثة وقدمت الأساس لمشاريع أخرى مثل MVG-CLI.فلماذا حزمة واجهة برمجة تطبيقات أخرى MVG؟ في النهاية كانت ثلاثة أسباب حاسمة:
www.mvg.de/api/bgw-pt/v3 ، والتي يبدو أنها أكثر أداءً من السابق. التثبيت من فهرس حزمة Python (PYPI) باستخدام pip :
pip install mvg
تم تصميم الواجهة لتكون بسيطة وبديهية. الاستخدام الأساسي يتبع هذه الخطوات:
MvgApi.station(station) باسمها ومكانها (على سبيل المثال "Universität, München" ) أو معرف المحطة العالمي (على سبيل المثال "de:09162:70" ).MvgApi.nearby(latitude, longitude) أقرب محطة.MvgApi(station) بواسطة معرفه العالمي..departures() لاسترداد المعلومات من API.مثال أساسي يبدو هكذا:
from mvg import MvgApi
station = MvgApi . station ( 'Universität, München' )
if station :
mvgapi = MvgApi ( station [ 'id' ])
departures = mvgapi . departures ()
print ( station , departures ) الأساليب الثابتة MvgApi.stations() و MvgApi.lines() تعرض قائمة بجميع المحطات المتاحة وقائمة جميع الخطوط المتاحة من نقاط نهاية API المحددة. على الرغم من أن هذه المكالمات رائعة للرجوع إليها ، إلا أنها أيضًا واسعة النطاق ويجب عدم استخدامها ضمن حلقة استعلام متكررة.
يمكن ترشيح نتائج .departures(limit, offset, transport_types) باستخدام الوسائط التالية:
limit من الحد من الإخراج إلى العدد المحدد من المغادرة ، والافتراضيات إلى 10offset إزاحة (على سبيل المثال مسافة قريبة إلى المحطة) في دقائق ، تتخلف إلى 0transport_types نتيجة قائمة أنواع النقل (على سبيل المثال [TransportType.UBAHN] )مثال مرشح يبدو هكذا:
from mvg import MvgApi , TransportType
station = MvgApi . station ( 'Universität, München' )
if station :
mvgapi = MvgApi ( station [ 'id' ])
departures = mvgapi . departures (
limit = 3 ,
offset = 5 ,
transport_types = [ TransportType . UBAHN ])
print ( station , departures ) station() أو nearby() تؤدي إلى dict :
{
'id': 'de:09162:70',
'name': 'Universität',
'place': 'München'
'latitude': 48.15007,
'longitude': 11.581
}
departures() ينتج عنه list dict :
[{
'time': 1668524580,
'planned': 1668524460,
'line': 'U3',
'destination': 'Fürstenried West',
'type': 'U-Bahn',
'icon': 'mdi:subway',
'cancelled': False,
'messages': []
}, ... ]
يستدعي الفئة MvgApi الطرق غير المتزامنة داخليًا باستخدام asyncio و aiohttp لتنفيذ طلبات الويب بكفاءة. تتميز هذه الأساليب غير المتزامنة باللاحقة _async ويمكن استخدامها من قبل المستخدمين في المشاريع ذات التعليمات البرمجية المتزامنة.
المثال الأساسي ولكن مع المكالمات غير المتزامنة يبدو هكذا:
import asyncio
from mvg import MvgApi
async def demo () -> None :
station = await MvgApi . station_async ( 'Universität, München' )
if station :
departures = MvgApi . departures_async ( station [ 'id' ])
print ( station , await departures )
loop = asyncio . get_event_loop ()
loop . run_until_complete ( demo ())