Pythonスクリプトを使用してメガホン番号からSMSを無料で送信

これは何のためですか?


この機能を使用する2つのレベルを検討する価値があります。
  1. 通常、毎日比較的長いメッセージを送信する必要があります(もちろん、携帯電話とコンピューターの印刷速度が同じでない限り)
  2. コンピュータが存在しない場合に、この情報を配信するために余分なお金を払うことを望まない、郵送情報を受け取るという珍しくてこっけいなニーズ

一般的な使用

確かに、多くの人が比較的長いSMSメッセージを書く必要がある状況に遭遇しました。

異常な使用

ここで、ユースケースは、想像力と必要な情報フローを解析する能力によってのみ制限されます。次に例を示します。


送信するサービスを選択する


すぐに私はすべてが最初に自分のために行われたことを警告するよう急いでいるので、ソリューションはモスクワのメガホンに関連付けられていますが、他の地域ではメガホンにも同様のサービスがあります。

明らかに、国内で使用するには、広告なしで自分の番号からメッセージを送信することが非常に必要であるため、特にsmsms.megafon.ruサービス適切ではありません。特にcaptchaを入力する必要がある場合、およびコンソールに表示する方法は? また、 フレームバッファも好きなら、どうすれば好きですか? また、インデックス付きSMSの最近のインシデントを考慮に入れた場合、

幸いなことに、メガホンにはService Guideサブスクライバーセルフサービスシステムがあり、私はこれらの目的のために正確に長い間使用していました。他にも便利な機能があります。

比較的最近、サービスガイドへの入り口で、彼らはcaptchaを紹介するための申し出を止めました。そのため、このサイトを「汚い」目的で使用することを考えました。

念のため、サイトにアクセスして3つのボタンを押す代わりにコンソールスクリプトを記述する理由がわからない人には答えます。「enter」→「menu:SMSを送信」→「item:SMSを送信」:

サービスガイドWebサイト分析


サービスガイドページにアクセスし 、以下を確認します。

最後の点は、特にトラフィックを請求しないことを約束しているため、私にとって非常に魅力的でしたが、残念ながら、アプリケーションが大量にあるため、比較的古いSamsung SGH-E200電話にインストールできませんでした(余分なファイルを捨てることもできませんでした)。

サイトのログインフォームの分析に進みます。 私はMozilla FirefoxとFirebugを使用していますが、Google Chromeにはこの目的のための独自のツールがあります。

[コンソール]タブを開き、AJAXリクエストの表示をオンにし、[クリアしない]ボタンをクリックして(ページのリダイレクト時にこれらのリクエストが消去されないように)サイトにアクセスします。
POSTリクエスト:
www.serviceguide.megafonmoscow.ru/ps/scc/php/check.php?CHANNEL=WWW&LOGIN=_&PASSWORD=_
答えは:
<SESSION_ID>AAAAkljkLFJ9JKJk3fowmcoOW3fds</SESSION_ID>
<LANG_ID>1</LANG_ID>
<AUTH_MODE>U</AUTH_MODE>


すべてが明らかなようで、SESSION_IDを簡単に取得できます。

スクリプト作成


注意深い読者は、リダイレクト時に別のPOST要求を実行する必要があることに気付くでしょう。
www.serviceguide.megafonmoscow.ru/SCWWW/ACCOUNT_INFO?CHANNEL=WWW&P_USER_LANG_ID=1&SESSION_ID=AAAAkljkLFJ9JKJk3fowmcoOW3fds
ここでは、答えはすでにはるかに複雑です:
...
<text-phrase xmlns: xalan = " xml.apache.org/xalan " id = "js-dict-form"> </ text-phrase>
...
この形式を解析する必要はあまりなかったので、使い慣れたxpathとpython-lxml を使用しました(使用の良い例です )。

アカウント残高のデータを取得するとします:

コードは、正しい実行を確認せずに意図的に作成されたため、大量のtry-exceptで投稿が混乱することはありません。

 #!/usr/bin/python import urllib from lxml import etree from StringIO import StringIO def get_root(url, params): params = urllib.urlencode(params) raw_response = urllib.urlopen(url, params).read() parser = etree.HTMLParser() tree = etree.parse(StringIO(raw_response), parser) root = tree.getroot() return root login='  ' password=' ' login_url="https://www.serviceguide.megafonmoscow.ru/ps/scc/php/check.php?" login_params={'CHANNEL':'WWW', 'LOGIN':login, 'PASSWORD':password} login_root=get_root(login_url,login_params) session_id = login_root.find(".//session_id").text lang_id = login_root.find(".//lang_id").text print 'session_id=',session_id account_info_url="https://www.serviceguide.megafonmoscow.ru/SCWWW/ACCOUNT_INFO?" account_info_params={'CHANNEL':'WWW', 'P_USER_LANG_ID':lang_id, 'SESSION_ID':session_id} account_info_root=get_root(account_info_url,account_info_params) balance=account_info_root.find(".//div[@class='balance_good td_def']").text print balance 


次に、SMSの送信に直接進みます。


#
 prefix='926' print 'prefix=', prefix addr=raw_input('number (7 digits: 1234567): ') msg=raw_input('message: ') msg=msg.decode('utf8').encode('cp1251') sms_url="https://www.serviceguide.megafonmoscow.ru/SCWWW/SUBS_SEND_SMS_ACTION?" sms_params={'CUR_SUBS_MSISDN': login, 'prefix': prefix, 'addr': addr, 'CHANNEL': 'WWW', 'SESSION_ID': session_id, 'SUBSCRIBER_MSISDN': login, 'MSISDN_TO': prefix+addr, 'P_USER_LANG_ID': lang_id, 'MESSAGE': msg} sms_root=get_root(sms_url,sms_params) divs=sms_root.findall(".//div") for div in divs: print div.text.strip() 


まあ、ログアウトするのがいいでしょう:

 #        logout_params={'CHANNEL':'WWW', 'CUR_SUBS_MSISDN':login, 'P_USER_LANG_ID':lang_id, 'SESSION_ID':session_id, 'SUBSCRIBER_MSISDN':login} logout_url="https://www.serviceguide.megafonmoscow.ru/SCWWW/CLOSE_SESSION?" logout_root=get_root(logout_url,logout_params) logout_result = etree.tostring(logout_root, pretty_print=True, method="html") print logout_result 


twitterフィード、rss、天気予報など、必要な情報をあなた(または他の誰か)にSMSを送信するスクリプトを書くのは簡単です。 これをスケジュールまたはイベントに添付することも難しくありません。

まとめ


もちろん、スクリプトフラグメントで使用されるトリックの多くは、優れたコードの例ではありません。 urllib.urlopen()の代わりにssl接続を使用する価値があるかもしれません。 ページをetreeオブジェクトに完全に変換する必要はありませんが、xmlns:xalanを処理しようとする可能性があります。 ただし、この記事の目的の1つは、携帯電話のキーボードでSMSを入力せずにSMSを送信する便利な方法があることを示し、ニュースレターでSMSメッセージを自動送信するツールを提供することです。

ロシア鉄道のウェブサイトから列車のチケットの数を表示するコンソール用のスクリプトに関する記事を書く予定です。 原則として、これら2つのスクリプトを簡単に接続できます。必要なチケットが登場したというSMS通知を送信します。

UPD:
貴重なコメント、簡単な要約をありがとう:

配送方法の比較:
方法費用ご注意
サービスガイド無料で自分のすべての地域で無料ではありませんが、一部の場所ではキャプチャが残りました
SMS +1日2回こする自分の1日あたり70 SMS以下ですが、他の便利なサービスがあります。
Megaphone SOAP APIのPHPライブラリ料金に依存自分のライブラリの同期をありがとう
GSMモデム料金に依存自分のArduino愛好家のために、 プロメテウスからのリンク
メールサーバー経由無料でその他使用されていない、 interrupt_controllerという言葉からの情報

Source: https://habr.com/ru/post/J124457/


All Articles