CFR SA, perusahaan administrasi infrastruktur perkeretaapian nasional Rumania menawarkan layanan informasi langsung online (berdasarkan formulir ASPX dengan pengiriman status tampilan pasca balik dan validasi acara) untuk mendapatkan data hampir real-time tentang keberangkatan, kedatangan, dan platform tempat kereta tiba di stasiun dan penundaan perjalanan dan pembaruan. Pada saat itu, keseluruhan sistem ini tidak memiliki API atau bahkan antarmuka yang layak, mudah digunakan dan mudah ditemukan bagi pengguna akhir.
API berbasis Flask ini mengekstrak data dari aplikasi web CFR seperti yang diminta di Titik Akhir API URL dan menghasilkan data JSON yang dapat digunakan kembali. Program ini mengambil semua informasinya dari variabel __VIEWSTATE ASP.Net.
Anda perlu menginstal Python 3.6+ dan Pipenv di sistem Anda.
$ tepat pasang python3 python3-pip $ pip3 instal pipenv
Kloning repositori dan instal dependensi modul:
$ git klon https://github.com/BodoMinea/cfr-iris-scraper.git $ cd cfr-pengikis-iris $pipenv instal
Jalankan server API seperti yang ditentukan dalam Dokumentasi Flask.
$ pipenv jalankan labu jalankan
Anda mungkin perlu mengedit Pipfile agar sesuai dengan versi Python lokal Anda agar instalasi berhasil
python_version = "3.6.9"
Flask mendengarkan secara default hanya permintaan lokal. Dianjurkan untuk tetap seperti ini dan menginstal proxy terbalik untuk penerapan yang lebih besar, tetapi untuk mengakses mesin pengujian Anda dari LAN, jalankan dengan:
$ pipenv jalankan labu jalankan --host 0.0.0.0
Ini akan mengikat semua antarmuka yang tersedia.
Sekarang Anda dapat mengarahkan browser Anda ke http://localhost:5000/station/ID untuk melihat keajaibannya. ID adalah kode unit stasiun yang unik; daftar disediakan oleh titik akhir http://localhost:5000/get-stations/.
Misalnya, untuk mendapatkan objek JSON dengan papan keberangkatan/kedatangan saat ini & informasi penundaan untuk stasiun kereta Bucharest North (yang utama & terbesar di negara kita), Anda akan mengarahkan browser Anda atau variabel URL untuk aplikasi apa pun yang Anda gunakan. datanya ke: http://localhost:5000/station/10017.
Dengan cara yang sama Anda bisa mendapatkan kereta terkini di stasiun kereta tertentu, Anda juga bisa mendapatkan informasi terkini untuk kereta tertentu. CFR memberikan informasi seperti penundaan, stasiun terakhir yang dilalui kereta (dengan penundaan 7 menit), stasiun berikutnya dan informasi berguna lainnya.
Cukup arahkan browser Anda ke http://localhost:5000/train/ID, dimana ID adalah nomor unik kereta. Anda bisa mendapatkan ID ini dari feed informasi stasiun. Misalnya, Anda dapat mengambil informasi kereta IR 1651 dari Bucharest North ke Suceava North (berlaku per April 2017) dengan mengakses http://localhost:5000/train/1651.
Ada juga klien web yang disertakan dengan API. Kunjungi http://localhost:5000/static/station.html, http://localhost:5000/static/train.html atau http://localhost:5000/static/train.html?tren=9351 (kereta standar nomor) untuk melihatnya.
Meskipun aplikasi resminya berfungsi tetapi mungkin tidak terlihat bagus, pengembang Rumania melakukan yang terbaik untuk membuat beberapa proyek sumber terbuka dan layanan online yang sangat keren terkait dengan transportasi dan infrastruktur. Lihat peta langsung ini, konverter GTFS milik ini, perencana perjalanan ini, dll.
Dengan menggunakan API ini dan sumber daya publik lainnya, Anda dapat membuat papan keberangkatan stasiun gaya Anda sendiri, layanan pemberitahuan penundaan, aplikasi seluler yang tampak keren, sambil mempelajari cara memprogram dan bekerja dengan data terstruktur?
Ini adalah proyek sumber terbuka sepenuhnya, dibangun di atas modul dan perpustakaan sumber terbuka dan dilisensikan di bawah Do What the Fuck You Want to Public License Versi 2.
Selain itu, Anda sepenuhnya bertanggung jawab atas apa yang Anda lakukan dengannya - perlu diingat bahwa CFR SA dan InfoFer (perusahaan IT milik negara yang membuat perangkat lunak mereka) tidak terlalu transparan atau ramah terhadap pengembang pihak ketiga. Jika Anda melakukan pengikisan massal atau mengembangkan layanan yang dapat diakses publik yang menghasilkan banyak lalu lintas dari server yang sama ke mereka atau mengkloning data mereka ke database karena berbagai alasan, Anda mungkin mengalami beberapa masalah, seperti yang dialami rekan penggila ini saat membuat web perencana perjalanan menggunakan jadwal CFR Calatori dari situs web mereka.
Namun untuk mengutak-atik, bermain-main dan bekerja dengan data real-time yang jelas tidak akan membingungkan siapa pun jika kesalahannya bukan dari CFR itu sendiri, Anda harusnya baik-baik saja dan berada di sisi hukum yang benar, setidaknya dari pengalaman saya. Mungkin suatu saat mereka akan menawarkan API mereka sendiri dengan aturan dan lisensi yang tepat.
Permintaan tidak diautentikasi dan tidak ada batasan tarif yang diterapkan, sehingga sama sekali tidak siap untuk diekspos di web.
Ini tidak terlalu cepat, karena Halaman Web CFR juga tidak cepat. Anda mungkin menginginkan permintaan latar belakang dan cache. Setelah permintaan awal dibuat, ia akan menunggu 8 detik sebelum mengurai data. Jika data belum ditampilkan di halaman web, maka akan menunggu tambahan 20 detik. Setelah ini, API akan mengeluarkan objek kosong - ini mungkin berarti bahwa layanan web yang tergores sedang tidak aktif, responsnya sangat lambat, atau sebenarnya tidak ada perjalanan yang berhenti di stasiun tertentu (di malam hari atau di perhentian kecil, misalnya contoh). Memperbaiki: jika API tidak aktif, Anda akan mendapatkan status kesalahan 5xx.
Ini adalah pengikisan dan penguraian, jadi pembaruan struktural apa pun pada halaman web CFR, meskipun sangat kecil kemungkinannya dalam waktu dekat, dapat merusaknya.
Umpan informasi kereta tidak memberikan rincian mengenai penundaan kereta dan informasi berguna lainnya yang ditawarkan Infofer dengan layanan mereka. Ini akan diperbarui di masa depan. Memperbaiki: semua informasi IRIS publik dikeluarkan pada API ini.
Layanan web informasi publik yang disediakan oleh CFR SA melalui Informatica Feroviara: http://appiris.infofer.ro/SosPlcRO.aspx, http://appiris.infofer.ro/MyTrainRO.aspx, http://appiris.infofer.ro /MersTrenRo.aspx. Ini adalah informasi dari administrasi infrastruktur dan bukan dari maskapai penumpang tertentu. Jadwal penumpang resmi dapat ditemukan di sini: http://mersultrenurilor.infofer.ro, dan sumber data XML statis dengan jadwal yang diperbarui setiap akhir tahun: http://data.gov.ro/organization/sc-informatica-feroviara- sa