今日、次のターンは銀行からの電子メールアラートで、次のようなものです。
ポクプカ、シェルAZS OLGINO 1133、カルタ* 347788、07.23.11 12:09、300.25摩擦。 Dostupno = 421.61こするかそこら
1000.00 RURがアカウントから引き落とされました** 77876。 店頭:蔵王ガムメクスパー 日付:2011年7月12日 利用可能な残高:12344.11 RUR
個人向け財務会計サービスでこのような通知を美しく処理するように見えるべきだと思いますか?
王は死んだ
話から始めましょう。 1年以上前にメール処理がZen maniに登場しました。 しかし、その後、彼女には多くの欠陥がありました。
- 1つの銀行のみがサポートされていました。
- Zen-maniの各アカウントには独自のメールアドレスがあり、1つの銀行に複数のアカウントがある場合、アカウントの支払いは共有されませんでした。
- 銀行が通知を送信した場合、サービスはすべての手紙を傍受したため、通知は届きませんでした。
メールアラートを処理することの不便さと外国人兄弟Mintの成功(これを使用するために費用と収入を入力する必要はありません(クレジットカードからすべてのデータを受け取り、食品、ガス、エンターテイメントなどのカテゴリに親切に分類します...)メールアラート。
小規模に始めて、VTB24、Citibank、Bank Saint Petersburg、Bank24.ruの4つの銀行サポートを増やしましょう。 これは、スマートな正規表現とハードテストによって行われます:)
次に、最初の興味深い解決策として、1つの電子メールアドレス(ドロップボックス)を残します。 一般に、すべての口座とすべての銀行に1つ(1人のユーザー用)。 アカウントの違いは、最後の4桁で発生します。 ユーザーは、アカウントを作成する段階でそれらを入力します。
情報レターの紛失による最後の不便さは、すべてのメッセージをユーザーの個人メールに送信することで決定しました。 そして、それは私たちにとって非常に難しい決断でした。 この機能の前は、個人の財務などの機密情報のプライバシーを最大化するために、電子メールを要求しませんでした。 これで、メールを示すかどうかを選択できます。
これら3つの改善は、_美しい_ソリューションには不十分です。 ユーザーは、各トランザクションがガソリン、トレーニング、またはその他に費やされたものを決定する必要があります。 私たちが思いついたものを解明することをお勧めします :)「ハイライト」という見出しの下の推測ですが、今のところは少しのコードです。
パーサーエンジン
メッセージパーサーは2段階で機能します。
- レター形式の定義。
- 直接解析します。
この手紙を解析します。
親愛なる顧客、 1000.00 RURがアカウントから引き落とされました** 77876。 店頭:蔵王ガムメクスパート 日付:2011年7月12日 利用可能な残高:12344.11 RUR 現在のルーブル口座で利用可能な残高には、与信限度が含まれていることに注意してください。 受け取った情報に同意できない場合は、(495)775 75 75(モスクワ)、(812)336 75 75(サンクトペテルブルク)、8(800)700 38 38(その他)のCitiPhone従業員にお問い合わせください。 。ロシア連邦の都市)8日以内。 当社のサービスの詳細については、インターネットのWebサイトwww.citibank.ruをご覧ください。
手紙がどの銀行からのもので、内部で何を期待するかを決定するために、次のプレートを使用します。
id foreign_format check_order marker_location marker_patternデータ型 43 33 0 10 /www\.citibank\.ru/ mail 44 33 1 2 / ^ \ d /メール
各文字について、check_orderの順序で各形式を順番にチェックし、行でmarker_patternを探します。 上記のシティバンクからの手紙を確認するのがどれほど簡単かは、33形式です。
2番目のプレートから、33形式のフィールドパーサーを選択します。
id column_name value_offset foreign_format 49結果2 / ^([\ d \。] +)/ "33 50 datedmy 4#(\ d {2} / \ d {2} / \ d {4})$#33 51受取人3 /(^ :: ++:(。*)$ / "33
正規表現の前の数字は、文字の行番号を意味します。 もう一度手紙を読み、必要なデータを取得します。
Zest:カテゴリーの自動検出
それで、最も興味深い部分に到達しました-マップでの支出のカテゴリの自動マッチングの実装です。
まず、別の例:
2011年7月21日11時12分5秒に、VTB24 ... 7780銀行カードでRUR 1959.00の金額の支払い取引が行われたことをお知らせします。 使用可能:2274.35 RUR。 支払いの詳細:HITZONA。 認証コード222635
支払いごとに店舗コードがあります。
- SHELL AZS OLGINO-ガソリン。
- HITZONA-エンターテイメント(音楽、映画、ゲーム)。
つまり、店舗コードをカテゴリに一致させるだけで十分です。 しかし、このデータはどこで入手できますか? クラウドソーシングが助けになります。
カテゴリのいずれかのカード支払いを比較する各Zen-manユーザーは、共通の原因に貢献します。 そして、このようなものが得られます(ユーザーは自分でカテゴリ名を入力します)。
10シェルAZSガソリン 3シェルAZS車 1シェルAZSお菓子
ユーザーがSHELL AZSで支払い通知を受信すると、ベースとそのカテゴリの共通部分を探し、最も人気のあるものを選択します。 「ガソリン」のカテゴリがあります-そうでない場合は「車」を選択します。
言い換えれば、Zen Maniでは、家計簿を簡単にするためにできる限りのことをしています。 現在、Alfa-Bank、Raiffeisenbank、VTB24、Citibank、Bank Saint Petersburg、Bank24.ru、Yandex.Moneyシステムの6つの銀行からデータを受信しています。
今日それを試してみてください:)