地下鉄の故障に関するアラートの方法





ずいぶん前、約1年前、モスクワの地下鉄がランダムな場所で故障し、驚くほど頻繁に故障したとき、私たち( dcoder_mmIrenica )は、故障について警告する何らかのサービスを提供するという考えを持っていました。



この考えは奇妙に思えるかもしれませんが、 dcoder_mmはそのような失敗の1つに当たるまでそうでした。 混雑したプラットフォームで電車を待つ10分間待っていると、不快に感じたので、将来はそのように捕まらないことにしました。



この事件の後、彼らはツイッターに目を通すことを決めた:彼らは地下鉄の事件について何かを書くか。 結局のところ、彼らは書きます。 そして、それに関する最初のつぶやきは、私が地下鉄に行く約10分前でした。



その後、ゆっくりとアイデアが浮上し始めました。Twitterから情報を収集し、地下鉄の障害への参照を探し、何かが見つかった場合はユーザーに通知します。



確かに、このアイデアは長い間放棄されていましたが、2014年の秋に再び思い出しました-メトロは再び定期的に故障し始めました。



通知方法としてSMSを使用することが決定されました。 もちろん、Twitterボットを使用して地下鉄に関するメッセージを収集することもできますが、SMSには1つの利点があります。通常のインターネット接続がない場合でも到達できるという利点があります。 そして、地下鉄では頻繁に発生しませんが、同時にGSMは正常にキャッチされます。 (サービスを開始したとき、まだメトロ全体にWifiはありませんでした)。



問題は小さいままでした-実際、ツイートの小包を作成し、SMSを送信します。



戦いを確認するために、シンプルな1行のスクリプトを作成しました。このスクリプトは、検索(curl search.twitter.com)を通じて#metroハッシュタグ付きの最新のツイートを受け取り、キーワードで必要なものをハイライトし、SMSを送信します。



curl -ssl "https://twitter.com/search?f=realtime&q=%23%D0%BC%D0%B5%D1%82%D1%80%D0%BE&src=typd" | grep -E -o "js-tweet-text tweet-text.*<\/p>" | sed -e 's;[><\"=-]; ;g;s;js tweet text tweet text lang ru data aria label part 0;;g;s;/a;;g;s;\/\(a\|p\); ;g;s;\(.span\|.strong\|class\|twitter\|timeline\|link\|js display url\|invisible|\tco ellipsis\|href\|nofollow\|dir\|ltr\|data\|expanded\|url\|invisible\|tco\|ellipsis\|google&\;utm_medium\|banner&\;utm_campaign\|business_news\|target\|_blank\|title\|atreply\|pretty\| \;\|rel\|s\|?utm_source\|draggable\|false\|alt\|aria\|label\|u\|hidden\|pre\|embedded|\true\|b\|a\|qery\|orce\|hahtag_click\|hahtag\|j\|nav\|emedded\|tre\|&qot\;\|emedded\|tre\|rc\|hh\|qery\|orce\|hhtg_click\|hhtg\|img\);;g;s; ; ;g;s; \; ;;g;s;&qot\;;;g;s;emedded;;g;s;tre;;g;s; \/ ;;g;s;hhtg_click hhtg;;g;s;hh;;g;s;qery oe;;g;s;\/tg\/[a-zA-Z]*;;g;s;tweet;;g;s;text;;g;s;lng;;g;s;nd;;g;s;prt;;g;s;http://intgrm.com\s\/[a-zA-Z]*\/;;g;s;[AZ%az]*;;g;s;[\/_\/:\/?\.@&;…]*;;g;s;^[0-9]*;;g;s;[0-9]\{3,\};;g;s;^\s*;;g;s; *; ;g;s;^[0-9] ;;g;s;# ;#;g;s;[0-9 #]*$;;g' | grep -E -i "||||  |||||||||||| ||||| ||||||||||||||| | | |" | grep -E -i "||||||||||||||||||||||||||||||||||||||||| ||||||||||||||||||||||||||||||||||||||||||||||||||||| |||||||||||||||||||||||||||  |||||||||||-||||1905|||[- ]|[]||||||||||||||||||||||||||||||||||||||||-|  | []|-|  |[][]||  |[][][]|-|  | [][]||  | [][]|[]|  |[][]||-|  | [][]||  |[][][]|[][]|||  ||" | grep -i -v -E " | | |||||||-||||||||||iphone|||||porn|pron|||follow|retweet||| |||| ||||| |||| |||||||||| || | || ||| ||| | |  ||||| || ||||||||||||| |||||||||" | sort | uniq
      
      







そして奇妙なことに、それは非常に正常に機能しました。 時々、誤ったアラームが出くわすこともありましたが、主なもの-アラートには、多少なりとも重要な故障が伴います。 そして、彼らはすぐに来ました-この情報がメディアや他の場所に登場するよりもずっと早く。



次に、誤検知を除外します。 最もmetro慢で明らかなスパム、たとえば地下鉄のハッシュタグ#を含む広告は、キーワード(「事故」や「内訳」など)が含まれていなかったため合格しませんでした。 しかし、これは、たとえば、他の都市での地下鉄の故障の報告からは救いませんでした(サンクトペテルブルクの地下鉄の故障についてのつぶやきでは、常に「ピーター」という言葉を書くでしょう)。 したがって、メッセージが送信されていない「ストップワード」のリストを入力する必要がありました。 他の都市の駅の名前、広告でよく見られるキーワードなどが含まれていました。



問題は、数十のツイートと同量のSMSを額で解決できることです。このメトロ回線に関するすべてのメッセージを一定時間ブロックするだけです。



ただし、誤検知には他の理由もあります:別の車両の故障に関するメッセージ(「メトロ」というタグ付き)、地下鉄の古い故障に関するメッセージ(2014年の夏の地下鉄の悲劇についてツイートされたアカウントがいくつかあります。 )



やっと安定して動作するようになったとき、電話番号で登録できるWebインターフェイスを作成しました。 徐々に多くの人々が追いつき始め、当然、意地悪の法則に完全に準拠して、さらにいくつかの誤検知が発生しました。 これが再び起こらないようにするため、事前調整を行いました。つまり、最初にメッセージが届き、数分以内に送信を禁止しない場合、他のすべてのユーザーに送信されます。



また、統計もあります。 既にデータを収集している場合、それらの統計を取得しないのは罪です。 私たちの場合、それはまだ一定期間のブランチの内訳の数の単なる表示です。 そして、各内訳の簡単な説明。 将来的には、さらにデータを収集する必要があるため、おそらく何か他のものを追加するでしょう。



一般的に、誰が気にします: msk-metro.ruここにあります。 プロジェクトはまだベータテストの段階にあると想定できるため、誤って左のSMSを受け取ったとしても、落胆しないでください。 私たちはそれを修正しますが、次回は同じSMSは絶対に来ません。



そして、それはすべてdebianのRaspberry Piにあります。



All Articles