แพ็คเกจนี้มีจุดมุ่งหมายเพื่อให้อินเทอร์เฟซที่สะอาดมีประสิทธิภาพและปราศจากสิ่งกีดขวางกับข้อมูลตารางเวลาของ Münchner Verkehrsgesellschaft (MVG) ซึ่งรับผิดชอบการขนส่งสาธารณะในมิวนิค มันส่งออก MvgApi คลาสเพื่อดึงสถานีสายและออกจาก JSON API ที่ไม่เป็นทางการที่ https://www.mvg.de
โครงการนี้ ไม่ใช่โครงการอย่างเป็นทางการจากMünchner Verkehrsgesellschaft (MVG) มันได้รับการพัฒนาเป็นโครงการส่วนตัวจากการขาด API ที่บันทึกไว้และเข้าถึงได้อย่างเปิดเผย มันเพียงแค่ทำซ้ำคำขอที่ทำโดย https://www.mvg.de เพื่อให้การเข้าถึงข้อมูลตารางเวลาท้องถิ่นปราศจากอุปสรรค
ดังนั้น ข้อ จำกัด การใช้งานดังต่อไปนี้จาก MVG Imprint ใช้กับผู้ใช้ทุกคนของแพ็คเกจนี้ :
ระบบของเราใช้สำหรับการโต้ตอบกับลูกค้าโดยตรง การประมวลผลเนื้อหาหรือข้อมูลของเราโดยบุคคลที่สามต้องได้รับความยินยอมจากเรา สำหรับ วัตถุประสงค์ส่วนตัวที่ไม่ใช่เชิงพาณิชย์การใช้งานปานกลางจะได้รับการยอมรับ โดยไม่ได้รับความยินยอมจากเราอย่างชัดเจน รูปแบบของ การขุดข้อมูลใด ๆ ไม่ได้เป็นการใช้งานในระดับปานกลาง เราขอสงวนสิทธิ์ในการเพิกถอนการอนุญาตนี้ในหลักการหรือในแต่ละกรณี กรุณาส่งคำถามใด ๆ ไปที่: [email protected]
(จาก https://www.mvg.de/impressum.html, เข้าถึงได้เมื่อวันที่ 04 ก.พ. 2023)
โครงการได้รับแรงบันดาลใจจากสองแพ็คเกจที่มีอยู่:
mvg-live.de ณ ปี 2022 เว็บไซต์ MVGLIVE ไม่มีอยู่อีกต่อไปและแพ็คเกจได้รับการเก็บถาวร แม้ว่า API เก่ายังคงใช้งานได้สำหรับบางสถานี แต่ก็ไม่ได้มีไว้สำหรับผู้อื่น - ส่วนใหญ่เกิดจากตัวระบุสถานีที่ได้รับการปรับปรุง ดังนั้นแพ็คเกจจึงถือว่าเลิกใช้แล้วและไม่สามารถใช้สำหรับการออกแบบใหม่ได้www.mvg.de/api/fahrinfo ซึ่งออฟไลน์ในปี 2567 พิจารณาตัวระบุสถานีที่ได้รับการปรับปรุงและให้พื้นฐานสำหรับโครงการอื่น ๆ เช่น MVG-CLIเหตุใดจึงทำไมแพ็คเกจ MVG API อื่น? ในท้ายที่สุดเหตุผลสามประการก็เด็ดขาด:
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 ())