ルーマニアの国営鉄道インフラ管理会社である CFR SA は、出発、到着、列車が駅に到着するプラットフォームと運行遅延に関するほぼリアルタイムのデータを取得するためのオンライン ライブ情報サービス (ポストバック ビューステート送信とイベント検証を備えた ASPX フォームに基づく) を提供しています。そしてアップデート。現時点では、このシステム全体には API が不足しており、エンド ユーザーにとって使いやすく、見つけやすい適切なインターフェイスさえもありませんでした。
この Flask ベースの API は、URL API エンドポイントでの要求に応じて CFR Web アプリからデータを抽出し、再利用可能な JSON データを出力します。プログラムは、ASP.Net の __VIEWSTATE 変数からすべての情報を収集します。
Python 3.6 以降と Pipenv がシステムにインストールされている必要があります。
$ apt install python3 python3-pip $ pip3 Pipenv をインストールします
リポジトリのクローンを作成し、モジュールの依存関係をインストールします。
$ git clone https://github.com/BodoMinea/cfr-iris-scraper.git $ cd cfr-iris-scraper $pipenvインストール
Flask ドキュメントの指定に従って API サーバーを実行します。
$ Pipenv 実行フラスコ実行
正常にインストールするには、ローカルの Python バージョンと一致するように Pipfile を編集する必要がある場合があります。
python_version = "3.6.9"
Flask はデフォルトでローカルリクエストのみをリッスンします。大規模な展開の場合は、このままにしてリバース プロキシをインストールすることをお勧めしますが、LAN からテスト マシンにアクセスするには、次のように実行します。
$ Pipenv run flask run --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 にアクセスすると、ブカレスト北からスチャヴァ北までの IR 1651 列車の情報 (2017 年 4 月現在有効) を取得できます。
API には Web クライアントも含まれています。 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 Sex You Want to Public License バージョン 2 に基づいてライセンスされています。
また、それを使用して行うことについては完全にあなたが責任を負います。CFR SA と InfoFer (ソフトウェアを構築する国鉄所有の IT 会社) は、特に透明性が高くなく、サードパーティ開発者に優しいわけでもないことに留意してください。大量のスクレイピングを行ったり、同じサーバーから大量のトラフィックを生成したり、さまざまな理由でデータをデータベースにクローンしたりする、公的にアクセス可能なサービスを開発した場合、この仲間の愛好家が Web を作成中にやったように、何らかの問題に遭遇する可能性があります。ウェブサイトから CFR Calatori の時刻表を使用して旅行プランナーを作成します。
しかし、エラーが CFR 自身によるものでない限り、明らかに誰も混乱させないリアルタイム データをいじったり、いじったり、操作したりする場合には、少なくとも私の経験から言えば、問題なく、法律の正しい側にあるはずです。おそらく、いつか適切なルールとライセンスを備えた独自の API を提供するでしょう。
リクエストは認証されず、レート制限も実装されていないため、Web 上に公開する準備ができていません。
CFR Web ページも高速ではないため、これは特に高速ではありません。おそらくバックグラウンドでのリクエストとキャッシュが必要になるでしょう。最初のリクエストが行われた後、データを解析するまで 8 秒待機します。 Web ページにデータが表示されていない場合は、さらに 20 秒待機します。この後、API は空のオブジェクトを出力します。これは、スクレイピングされた Web サービスがダウンしているか、応答が非常に遅いか、現在その特定の駅に停車する旅行が実際には存在しないことを意味する可能性があります (夜間または小さな停留所)。例)。修正: API がダウンしている場合、5xx エラー ステータスが表示されます。
これはスクレイピングと解析を行っているため、CFR Web ページの構造を更新すると、近い将来、可能性は非常に低いですが、これが壊れる可能性があります。
列車情報フィードには、列車の遅延に関する詳細や、Infofer がサービスで提供するその他の有用な情報は含まれていません。これは今後更新される予定です。修正: すべての公開 IRIS 情報はこの API で出力されます。
CFR SA が Informatica Feroviara を通じて提供する公開情報 Web サービス: 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- です。さ