CFR SA บริษัทบริหารจัดการโครงสร้างพื้นฐานทางรถไฟแห่งชาติของโรมาเนียนำเสนอบริการข้อมูลสดออนไลน์ (ตามแบบฟอร์ม ASPX พร้อมการส่งสถานะการดู postback และการตรวจสอบเหตุการณ์) เพื่อรับ ข้อมูลใกล้เคียง เรียลไทม์เกี่ยวกับเวลาออก เวลาถึง และชานชาลาที่รถไฟมาถึงสถานีและความล่าช้าของการเดินทาง และการอัปเดต ในขณะนี้ ระบบทั้งหมดนี้ยังขาด API หรือแม้แต่อินเทอร์เฟซที่เหมาะสม ใช้งานง่าย และค้นหาง่ายสำหรับผู้ใช้ปลายทาง
API ที่ใช้ Flask นี้แยกข้อมูลจากเว็บแอป CFR ตามที่ร้องขอใน URL API Endpoint และส่งออกข้อมูล JSON ที่นำมาใช้ซ้ำได้ โปรแกรมจะดึงข้อมูลทั้งหมดจากตัวแปร __VIEWSTATE ของ ASP.Net
คุณต้องติดตั้ง Python 3.6+ และ Pipenv บนระบบของคุณ
$ apt ติดตั้ง python3 python3-pip $ pip3 ติดตั้ง pipenv
โคลนที่เก็บและติดตั้งการขึ้นต่อกันของโมดูล:
$ git โคลน https://github.com/BodoMinea/cfr-iris-scraper.git $ cd cfr-iris-scraper ติดตั้ง $pipenv
รันเซิร์ฟเวอร์ API ตามที่ระบุไว้ในเอกสาร Flask
$ pipenv วิ่งขวดวิ่ง
คุณอาจต้องแก้ไข Pipfile เพื่อให้ตรงกับเวอร์ชัน Python ในเครื่องของคุณจึงจะติดตั้งได้สำเร็จ
python_version = "3.6.9"
Flask จะรับฟังคำขอในเครื่องตามค่าเริ่มต้นเท่านั้น ขอแนะนำให้คงไว้เช่นนี้และติดตั้ง Reverse Proxy เพื่อการปรับใช้ที่ใหญ่กว่า แต่หากต้องการเข้าถึงเครื่องทดสอบของคุณจาก LAN ให้รันด้วย:
$ pipenv run flask run --host 0.0.0.0
สิ่งนี้จะเชื่อมโยงกับอินเทอร์เฟซที่มีอยู่ทั้งหมด
ตอนนี้คุณสามารถชี้เบราว์เซอร์ของคุณไปที่ http://localhost:5000/station/ID เพื่อดูความมหัศจรรย์ ID คือรหัสหน่วยสถานีเฉพาะ รายการจัดทำโดย http://localhost:5000/get-stations/ endpoint
ตัวอย่างเช่น หากต้องการรับออบเจ็กต์ JSON พร้อมข้อมูลการออกเดินทาง/มาถึงปัจจุบัน และข้อมูลความล่าช้าสำหรับสถานีรถไฟบูคาเรสต์นอร์ท (สถานีหลักและใหญ่ที่สุดในประเทศของเรา) คุณจะต้องชี้เบราว์เซอร์หรือตัวแปร URL สำหรับแอปใดก็ตามที่คุณกำลังใช้งาน ข้อมูลด้วย: http://localhost:5000/station/10017
ในทำนองเดียวกัน คุณสามารถรับรถไฟปัจจุบันในสถานีรถไฟบางแห่งได้ คุณสามารถรับข้อมูลปัจจุบันของรถไฟบางขบวนได้ CFR ให้ข้อมูลต่างๆ เช่น ความล่าช้า สถานีสุดท้ายที่รถไฟผ่านไป (ล่าช้า 7 นาที) สถานีถัดไป และข้อมูลที่เป็นประโยชน์อื่นๆ
เพียงชี้เบราว์เซอร์ของคุณไปที่ http://localhost:5000/train/ID โดยที่ ID คือหมายเลขเฉพาะของรถไฟ คุณสามารถรับ ID เหล่านี้ได้จากฟีดข้อมูลสถานี ตัวอย่างเช่น คุณสามารถดึงข้อมูลสำหรับรถไฟ IR 1651 จากบูคาเรสต์เหนือไปยัง Suceava North (ใช้ได้เมื่อเดือนเมษายน 2017) โดยเข้าไปที่ http://localhost:5000/train/1651
นอกจากนี้ยังมีเว็บไคลเอ็นต์รวมอยู่ใน API ด้วย ไปที่ http://localhost:5000/static/station.html, http://localhost:5000/static/train.html หรือ http://localhost:5000/static/train.html?tren=9351 (รถไฟที่กำหนดไว้ล่วงหน้า หมายเลข) เพื่อดู
แม้ว่าแอปอย่างเป็นทางการจะใช้งานได้แต่อาจดูไม่ดีนัก แต่นักพัฒนาชาวโรมาเนียก็พยายามอย่างเต็มที่เพื่อสร้างโปรเจ็กต์โอเพ่นซอร์สและบริการออนไลน์ที่ยอดเยี่ยมที่เกี่ยวข้องกับการขนส่งและโครงสร้างพื้นฐาน ดูแผนที่สดนี้ ซึ่งเป็นกรรมสิทธิ์ของตัวแปลง GTFS ผู้วางแผนการเดินทางนี้ ฯลฯ
เมื่อใช้ API นี้และแหล่งข้อมูลสาธารณะอื่นๆ คุณสามารถสร้างรูปแบบตารางการออกเดินทางของสถานี บริการแจ้งเตือนความล่าช้า แอพมือถือสุดเก๋ ขณะเรียนรู้วิธีการเขียนโปรแกรมและทำงานกับข้อมูลที่มีโครงสร้างได้
นี่เป็นโครงการโอเพ่นซอร์สโดยสมบูรณ์ สร้างขึ้นบนโมดูลและไลบรารีโอเพ่นซอร์ส และได้รับใบอนุญาตภายใต้ Do What the Fuck You Want to Public License เวอร์ชัน 2
นอกจากนี้ คุณต้องรับผิดชอบอย่างเต็มที่ในสิ่งที่คุณทำกับซอฟต์แวร์ดังกล่าว โปรดจำไว้ว่า CFR SA และ InfoFer (บริษัทไอทีของรัฐ-การรถไฟซึ่งสร้างซอฟต์แวร์ของตน) ไม่ได้มีความโปร่งใสเป็นพิเศษหรือเป็นมิตรกับนักพัฒนาบุคคลที่สาม หากคุณทำการขูดข้อมูลจำนวนมากหรือพัฒนาบริการที่เข้าถึงได้แบบสาธารณะซึ่งสร้างปริมาณการรับส่งข้อมูลจากเซิร์ฟเวอร์เดียวกันไปยังพวกเขาหรือโคลนข้อมูลไปยังฐานข้อมูลด้วยเหตุผลหลายประการ คุณอาจประสบปัญหาบางอย่างเหมือนที่ผู้ที่ชื่นชอบคนอื่นๆ เคยทำในขณะที่สร้างเว็บ ผู้วางแผนการเดินทางโดยใช้ตารางเวลาของ CFR Calatori จากเว็บไซต์ของพวกเขา
แต่สำหรับการแก้ไข การเล่น และการทำงานกับข้อมูลแบบเรียลไทม์ที่ไม่ทำให้ใครสับสนอย่างชัดเจน หากข้อผิดพลาดไม่ได้มาจาก CFR เอง คุณควรจะสบายดีและอยู่ทางด้านขวาของกฎหมาย อย่างน้อยก็จากประสบการณ์ของฉัน บางทีพวกเขาอาจจะเสนอ API ของตัวเองพร้อมกฎและใบอนุญาตที่เหมาะสมในบางจุด
คำขอไม่ได้รับการตรวจสอบสิทธิ์และไม่มีการจำกัดอัตรา ดังนั้นจึงไม่พร้อมที่จะเปิดเผยบนเว็บ
ซึ่งไม่ได้รวดเร็วเป็นพิเศษ เนื่องจากเว็บเพจ CFR ก็ไม่เป็นเช่นนั้น คุณอาจต้องการคำขอพื้นหลังและแคช หลังจากส่งคำขอครั้งแรกแล้ว ระบบจะรอ 8 วินาทีก่อนที่จะแยกวิเคราะห์ข้อมูล หากข้อมูลไม่ปรากฏบนหน้าเว็บ ระบบจะรอเพิ่มอีก 20 วินาที หลังจากนี้ API จะส่งออบเจ็กต์ว่างเปล่า - นี่อาจหมายความว่าบริการเว็บที่คัดลอกมาหยุดทำงาน ตอบสนองช้ามาก หรือไม่มีการเดินทางในปัจจุบันหยุดที่สถานีนั้นโดยเฉพาะ (ในเวลากลางคืนหรือที่ป้ายเล็ก ๆ สำหรับ ตัวอย่าง). แก้ไขแล้ว: หาก API หยุดทำงาน คุณจะได้รับสถานะข้อผิดพลาด 5xx
นี่เป็นการคัดลอกและแยกวิเคราะห์ ดังนั้นการอัปเดตโครงสร้างใดๆ ในหน้าเว็บ CFR ในขณะที่ไม่น่าจะเป็นไปได้สูงในอนาคตอันใกล้นี้อาจทำให้สิ่งนี้เสียหาย
ฟีดข้อมูลรถไฟไม่ได้ให้รายละเอียดเกี่ยวกับความล่าช้าของรถไฟและข้อมูลที่เป็นประโยชน์อื่น ๆ ที่ Infofer นำเสนอในการให้บริการ นี้จะได้รับการปรับปรุงในอนาคต แก้ไขแล้ว: ข้อมูล IRIS สาธารณะทั้งหมดจะถูกส่งออกบน API นี้
บริการเว็บข้อมูลสาธารณะจัดทำโดย CFR SA ผ่าน Informatica Feroviara: http://appiris.infofer.ro/SosPlcRO.aspx, http://appiris.infofer.ro/MyTrainRO.aspx, http://appiris.infofer.ro /MersTrenRo.aspx นี่เป็นข้อมูลจากการบริหารโครงสร้างพื้นฐาน ไม่ใช่ผู้ให้บริการขนส่งผู้โดยสารรายใดรายหนึ่ง ดูตารางเวลาผู้โดยสารอย่างเป็นทางการได้ที่นี่: http://mersultrenurilor.infofer.ro และแหล่งข้อมูล XML แบบคงที่พร้อมตารางเวลาที่อัปเดตทุกสิ้นปี: http://data.gov.ro/organization/sc-informatica-feroviara- ซา