0

Ruby/Rails を使用して無料の Web アプリケーションを構築しようとしています。さまざまな携帯電話会社のオンライン フォームから SMS を送信できるはずです。(これのように(ロシア語で))。

だから、私はする必要があります

  • 私のウェブサイトから SMS を送信したいユーザーを待ちます。
  • オペレーターの Web サイトへの接続を確立します。おそらく、Mechanize を使用しています。
  • キャプチャを取得する
  • ユーザーにキャプチャを表示する
  • ユーザーがメッセージとキャプチャを入力できるようにする
  • オペレーターの Web サイトでフォームを送信します (メッセージ、キャプチャ、電話番号を含む)

オペレーターの Web サイトへの接続は、このすべてのプロセスの間アクティブである必要があります (そうでない場合、キャプチャは変更されます)。私が理解している限りでは、SMS が送信されるたびに (サブ) プロセスを作成する必要があります。rails\ruby でこれを処理する最善の方法を教えてください。

私はまだWeb開発に慣れていません...スレッドを使用する必要がありますか? フォーク?開く?PTYを使用していますか?いくつかの外部宝石?プロセスとどのように通信すればよいですか?

4

2 に答える 2

2

オペレーターの Web サイトについて特別なことは何もないと仮定すると、いいえ、プロセス全体で接続を維持する必要はありません。一般的に言えば、Web ページのフォームは次のように機能します。URL にアクセスすると、Web ブラウザがフォームを含むページをダウンロードします。あなたの場合、CAPTCHA を表示する <img> タグなども含まれます。ブラウザがページをダウンロードすると、接続が切断されます。フォームに入力して [送信] をクリックすると、Web ブラウザーがサーバーへの新しい接続を開いてデータを送信し、サーバーがその応答を送信します ([送信] をクリックした後に表示されるページは何でも)。

あなたのプログラムがしなければならないことは、この経験をエミュレートすることだけです。1) フォームを含むページをダウンロードします。フォーム フィールド (隠しフィールドを見逃さないように注意してください。CAPTCHA を使用すると、おそらくいくつかあるでしょう) と CAPTCHA をスクレイプします。2) CAPTCHA と、ユーザーが入力する必要があるすべてのフィールドを含むフォームを含むページを作成して、ユーザーに表示します。元のフォームに非表示のフィールドがあった場合は、ユーザーがフォームを送信するときにそれらの値が必要になるため、それらの値も (フォームの非表示フィールドとして) 含めるようにしてください。3) 次に、ユーザーがフォームを送信したら、非表示の値とユーザーが CAPTCHA に入力した内容を含むデータをオペレーターに送信します。4) 最後に、オペレーターが成功を示したかどうかを確認し、ユーザーに通知するページを作成します。

Rails でこれを行っている場合、コントローラーにはおそらく 2 つのメソッドがあります。たとえば、'show' と呼ばれるメソッド (上記の手順 1 と 2) は、オペレーターのサイトから CAPTCHA とその他の情報をスクレイピングし、ユーザーにあなたのフォームビュー、およびフォームが送信され、データを取得してオペレーターのWebサイトに送信する「送信」などと呼ばれるもの(上記のステップ3と4)、応答を収集し、成功したかどうかをユーザーに通知しますか否か。

注:これを気にする前に、オペレーターの利用規約を読むことをお勧めします。この種のことは彼らのTOSに違反していると確信しており、あなたのサーバーが大量のリクエストを送信していることに気付いた場合、彼らはあなたをすぐにブロックするでしょう.

于 2009-11-18T15:26:09.957 に答える
1

あなたの別の質問に答えるには、DRb または background_job (別名 BJ) を使用して実際にバックグラウンドで送信を実行し、ユーザーがキャプチャを送信した後に応答を待つ必要がないようにすることができます。または、これを ajax でラップし、SMS 送信が発生したときに DRb/BJ プロセスに通知させて、ユーザーに成功または問題を通知できるようにすることもできます。

通常、Ruby でスレッドを開くことは避けるべきことです。これは、私たちが必要とすることを行う優れた gem が非常に多いためです。スレッドを使用してはならないというわけではありませんが、ほとんどの場合、スレッドはすでに非常にうまく機能しています。

于 2009-11-18T16:34:33.017 に答える