繰り返しになりますが、モバイルインターネット用の多数のMegafon SIMカードのバランスをチェックする問題に遭遇しました-車、夏の住居、iPad、モバイルルーターなど。 問題は、これらのSIMカードがモデムやその他のガジェットで動作し、常に手元にあるとは限らないことです。 さらに、リモートデバイスを含むさまざまなデバイスのバランス状態を絶えず監視する時間と要望はありません。 そして、インターネットは通常、最も不適切な瞬間に「終わり」を迎えます。
これまで、PPSOには残高を確認するための次のオプションがあります。
1. SMSを短い番号に送信する
2.個人のオンラインアカウント
3. USSDチーム
4.短い番号に電話する
オペレーターが個人アカウントにモジュールを追加できない理由はわかりません-xxxルーブルの残高のしきい値に達したときに、サブスクライバーにメールで通知します。
実際、これはbashスクリプトを使用して実装しようとしています。
「行き止まり」の方法-個人アカウントのページを解析します。 トゥピコフ。OPSOはページのコード内の何かを絶えず変更し、すぐにスクリプトが動作を停止します。たとえば、 このスクリプトは動作を停止します。 近い将来、USSDに基づいて、またはSMSを送信してスクリプトを作成する予定ですが、そのような場合は、モデムをコンピューターまたはルーター(mikrotikなど)に接続して、スクリプトを作成する必要があります。
これは、個人アカウントページを解析するための既製のスクリプトです。
簡単にメカニズム:
1. KurilによるセッションIDとCookieの保存(LCページに入ると、IDがスクリプトによって生成され、現在のセッションに添付されるため、1回のKuril呼び出しでログインすることはありません)。
2.保存されたCookieとセッションIDを使用してユーザーアカウントにログインします。
3.ページを解析し、残高を取得します。
#!/bin/bash cookies=./cookies.txt sessionID_url='https://lk.megafon.ru/login/' login_url='https://lk.megafon.ru/login/dologin/' logout_url='https://lk.megafon.ru/logout/' useragent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" balance="" i=0 attempts=5 timeout=20 username='phone_number' # 10- 8- 7- password='password' # while [[ "$balance" == "" && "$i" -le "$attempts" ]]; do let "i+=1" # ---------- CSRF / SessionID --------------- CSRF=`curl -A "$useragent" -c "$cookies" "$sessionID_url" | grep "CSRF_PARAM" | grep -o -E "([Aa]|[0-9])\S+-\S+-\S+-\S+-\S+([Aa]|[0-9])"` userdata="CSRF=$CSRF&j_username=$username&j_password=$password" balance=`curl -A "$useragent" -b "$cookies" -dump -L -X POST "$login_url" -d "$userdata" | grep -E -o "\s\S+\s[0-9]{1,},[0-9]{1,}" | grep -E -o "[0-9]{1,},[0-9]{1,}"` if [ "$balance" == "" ]; then sleep "$timeout" fi done if [ "$balance" != "" ]; then echo " = $balance ." else echo " , ." fi # ------ LOGOUT --------------------------------- sleep 5 curl -b "$cookies" -L "$logout_url" > /dev/null 2>&1 if [ -f "$cookies" ]; then rm "$cookies" fi exit 0
「ジャム」とは何ですか:
1.時々、メガサーバーが「サービスが一時的に利用できない」と吐き出すので、タイムアウトでバランスを取るために何度か試みました。
2.ログインエラー(不正なパスワードまたは電話番号)の場合-captchaがポップアップし、captcha入力でWeb経由でログインするまでスクリプトが機能しません。
3. 2つのパスgrep'omで解析するのは好きではありません。 1回のパスでセドムできることはわかっていますが、まだうまくいきません。
4.最初にページのコード全体を一時ファイルに保存し、それを解析します(次のように )。これにより、さまざまなログインエラーまたはサービスエラーを解析できます。
5.ログインとパスワードをスクリプトに渡されるパラメーターに入れて、より汎用的にすることをお勧めします。
次に、作成中の小さな制御スクリプトを作成します。このスクリプトは、さまざまなログインとパスワードで上記を呼び出し、soapで通知を送信して残高が所定のしきい値を下回っているかどうかを確認します。
次に、たとえば1日1回起動するWebサーバーで、それを冠に押し込みます。
そのようなもの。
アイデアや批判を歓迎します。
Z.Y. プライベートクライアントの場合、LKではなくIR(インターネットキャビネット)ページを解析する方がより簡単で便利です。
ログインせずにIRで起動し、SIMカードメガ経由でuser.megafonmoscow.ruページに移動します。
そして、すぐに解析でき、バランスと残りのトラフィックも非常に重要です。
今日は新しいスクリプトを作成しています。
バランスチェックスクリプトの2番目のバージョン。
個人所有者の関税に対してのみ機能します。 トラフィックのバランスとバランスのチェックは、スクリプトがインターネットに送られるSIMカードによって実行されます。 スクリプトは、貸借対照表の特定の金額またはトラフィックの特定の残高に達した場合に、石鹸にメッセージを送信します。
#!/bin/bash page_dump=/usr/tmp/dump url='http://user.moscow.megafon.ru/' useragent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0" balance="" traffic="" phone="" balance_deadline="100" traffic_deadline="1" # -------- sendmail function ------------- function sendalert () { FROM_EMAIL_ADDRESS="my@mail.ru" EMAIL_USER="userlogin" EMAIL_ACCOUNT_PASSWORD="password" TO_EMAIL_ADDRESS="mailto@domain.ru" echo "$2" | mailx -s "$1" \ -S smtp-use-starttls \ -S ssl-verify=ignore \ -S smtp-auth=login \ -S smtp=smtp://smtp.yandex.ru \ -S smtp-auth-user="$EMAIL_USER" \ -S smtp-auth-password="$EMAIL_ACCOUNT_PASSWORD" \ -S from="$FROM_EMAIL_ADDRESS" \ "$TO_EMAIL_ADDRESS" } curl -A "$useragent" -dump "$url" >"$page_dump" balance=`cat "$page_dump" | grep -E -o 'balance(\S+\s)*' | grep -E -o '[0-9]{1,},[0-9]{1,}'` traffic=`cat "$page_dump" | grep -E -o 'traffic-by\S+' | grep -E -o '[0-9]{1,}(,[0-9]{1,})*'` phone=`cat "$page_dump" | grep -E -o 'phone.*+7' | grep -E -o '\([0-9]{3}\)\s[0-9]{3}(-[0-9]{2}){2}'` bal_test=`echo "$balance" | sed -e 's/,.*//'` traff_test=`echo "$traffic" | sed -e 's/,.*//'` if [ "$traff_test" -lt "$traffic_deadline" ]; then sendalert " $phone" " - $phone - $traffic " fi if [ "$bal_test" -lt "$balance_deadline" ]; then sendalert " $phone" " - $phone - $balance ." fi if [ -f "$page_dump" ]; then rm "$page_dump" fi exit 0
文字を送信する機能の2番目のオプション
どちらが良いかわかりません。 とにかく非常に安定して動作します。
# -------- sendmail function ------------- function sendalert () { FROM_EMAIL_ADDRESS="my@mail.ru" EMAIL_USER="userlogin" SMTP_SERVER="smtp.yandex.ru" EMAIL_ACCOUNT_PASSWORD="password" TO_EMAIL_ADDRESS="mailto@domain.ru" sendEmail -f "$FROM_EMAIL_ADDRESS" \ -t "$TO_EMAIL_ADDRESS" \ -s "$SMTP_SERVER" \ -o message-charset=utf8 \ -xu "$EMAIL_USER" \ -xp "$EMAIL_ACCOUNT_PASSWORD" \ -u "$1" \ -m "$2" }
soapx送信機能は、 mailxとsendEmailパールスクリプトの使用という2つの方法で実装しました。 後者の場合、追加のパッケージが必要になる場合があります-Perl-Net-SMTP-SSL、Perl-Net-SSLeay、Perl-IO-Socket-SSL、Perl-Crypt-SSLeay。
smtp.yandex.ruにメールを送信するために上記のスクリプトをチェックしました!!! 他のサーバーでは、設定を微調整する必要がある場合があります。
Z.Z.Y.
mailxは高速です...