루마니아 국영 철도 인프라 관리 회사인 CFR SA는 기차가 역에 도착하는 출발, 도착 및 플랫폼과 여행 지연에 대한 거의 실시간 데이터를 얻기 위해 온라인 실시간 정보 서비스(포스트백 뷰 상태 전송 및 이벤트 검증이 포함된 ASPX 양식 기반)를 제공합니다. 그리고 업데이트. 당시 이 전체 시스템에는 최종 사용자를 위한 적절하고 사용하기 쉽고 찾기 쉬운 인터페이스나 API가 부족했습니다.
이 Flask 기반 API는 URL API 엔드포인트에서 요청한 대로 CFR 웹앱에서 데이터를 추출하고 재사용 가능한 JSON 데이터를 출력합니다. 프로그램은 ASP.Net의 __VIEWSTATE 변수에서 모든 정보를 긁어냅니다.
시스템에 Python 3.6+ 및 Pipenv가 설치되어 있어야 합니다.
$ 적절한 python3 python3-pip 설치 $ pip3 설치 Pipenv
저장소를 복제하고 모듈 종속 항목을 설치합니다.
$ 자식 클론 https://github.com/BodoMinea/cfr-iris-scraper.git $ cd cfr-홍채-스크레이퍼 $ 파이프nv 설치
Flask 문서에 지정된 대로 API 서버를 실행합니다.
$ Pipenv 실행 플라스크 실행
성공적으로 설치하려면 로컬 Python 버전과 일치하도록 Pipfile을 편집해야 할 수도 있습니다.
python_version = "3.6.9"
Flask는 기본적으로 로컬 요청만 수신합니다. 이와 같이 유지하고 대규모 배포를 위해 역방향 프록시를 설치하는 것이 좋지만 LAN에서 테스트 시스템에 액세스하려면 다음을 실행하십시오.
$ Pipenv 실행 플라스크 실행 --host 0.0.0.0
이는 사용 가능한 모든 인터페이스에 바인딩됩니다.
이제 브라우저에서 http://localhost:5000/station/ID를 가리켜 마법을 볼 수 있습니다. ID는 스테이션 단위의 고유 코드입니다. 목록은 http://localhost:5000/get-stations/ 엔드포인트에서 제공됩니다.
예를 들어, 부쿠레슈티 북부 기차역(우리나라에서 가장 큰 역)의 현재 출발/도착 게시판 및 지연 정보가 포함된 JSON 개체를 얻으려면 브라우저나 사용 중인 앱에 대한 URL 변수를 가리킵니다. 데이터: http://localhost:5000/station/10017.
같은 방법으로 특정 기차역의 현재 열차를 얻을 수 있고, 특정 열차의 현재 정보를 얻을 수 있습니다. CFR은 지연 시간, 열차가 통과한 마지막 역(7분 지연), 다음 역 및 기타 유용한 정보와 같은 정보를 제공합니다.
브라우저에서 http://localhost:5000/train/ID로 이동하세요. 여기서 ID는 열차의 고유 번호입니다. 역 정보 피드에서 이러한 ID를 얻을 수 있습니다. 예를 들어, http://localhost:5000/train/1651에 액세스하여 Bucharest North에서 Suceava North까지(2017년 4월 현재 유효) 열차 IR 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(소프트웨어를 구축하는 국영 철도 소유 IT 회사)는 특별히 투명하지 않거나 제3자 개발자 친화적이지 않다는 점을 명심하십시오. 대량 스크래핑을 수행하거나 동일한 서버에서 많은 트래픽을 생성하거나 다양한 이유로 데이터를 데이터베이스에 복제하는 공개적으로 액세스 가능한 서비스를 개발하는 경우 이 동료가 웹을 만드는 동안 겪었던 것처럼 문제에 봉착할 수 있습니다. 웹사이트에서 CFR Calatori의 시간표를 사용하는 여행 계획사입니다.
그러나 오류가 CFR 자체에서 발생한 것이 아니라면 누구도 혼동할 수 없는 실시간 데이터를 조작하고, 가지고 놀고, 작업하는 경우 적어도 내 경험으로는 괜찮고 법의 올바른 편에 있어야 합니다. 어쩌면 어느 시점에서는 적절한 규칙과 라이선스를 갖춘 자체 API를 제공할 수도 있습니다.
요청은 인증되지 않고 속도 제한도 구현되지 않으므로 웹에 노출될 준비가 되어 있지 않습니다.
CFR 웹페이지도 빠르지 않기 때문에 특별히 빠르지는 않습니다. 아마도 백그라운드 요청과 캐싱이 필요할 것입니다. 초기 요청이 이루어진 후 데이터를 구문 분석하기 전에 8초를 기다립니다. 웹페이지에 데이터가 표시되지 않은 경우 추가로 20초를 기다립니다. 그 후, API는 빈 개체를 출력합니다. 이는 스크랩된 웹 서비스가 다운되었거나, 응답이 매우 느리거나, 현재 특정 역(야간 또는 작은 정류장에서 정차하는 운행)이 실제로 없음을 의미할 수 있습니다. 예). 수정됨: API가 다운되면 5xx 오류 상태가 발생합니다.
이는 스크래핑 및 구문 분석이므로 CFR 웹 페이지의 구조적 업데이트로 인해 가까운 시일 내에 이를 깨뜨릴 가능성이 거의 없습니다.
열차 정보 피드는 열차 지연에 관한 세부 정보 및 Infofer가 해당 서비스와 함께 제공하는 기타 유용한 정보를 제공하지 않습니다. 이는 향후 업데이트될 예정입니다. 수정됨: 모든 공개 IRIS 정보가 이 API에 출력됩니다.
Informatica Feroviara를 통해 CFR SA에서 제공하는 공공 정보 웹 서비스: 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- 사