あるWebページで送信されたデータに応じて、表示するページを動的に生成して返したいのですが、次のアルゴリズムで可能ですか?
即ち、Aが1.htmlからリクエスト送信→1.htmlは1秒に3回くらい2.htmlというページを再読み込みしようとするがそのようなページは存在しない→同時に、1.htmlはパソコンBに向けてメール送信→パソコンBはメールの内容を反映した2.htmlというファイルを作って、FTPでアップロード→Aは無事動的に生成された2.htmlを得る
みたいな。どうしてもサーバーで動くプログラムを作りたくないので、メールとFTPだけで処理したいんです(笑)よろしくお願いします。
おそらくやりたいことをVBAでやる場合をまじめに考えてまとめてみました。
大まかな要件
・WEBサーバー
CGIで特定のファイルに対して読み書きを行う(表示&入力フォーム)
(CGIで吐き出されたファイルをA.HTMLとする。)
参考↓
http://q.hatena.ne.jp/1183967501
・処理する側(VBAのマシン)
1.VBAでFTP接続し、A.HTMLを読み込む。↓参考
http://officetanaka.net/excel/vba/tips/tips47.htm
3.特定の処理を行い、FTP接続し、ファイルをアップロード。上記のページを参考に。
上記を定期的に行うようにする。たとえば5分間隔とか(必要に応じてペースを変える。1秒以下は厳しいと思いますよ。)
取得したファイルををVBAで自動的に書き換えること。
CGIを利用し、WEBサーバー上の特定のファイルを書き換えるようにすること。
この2点クリアできればいけますね。
あとは表示する側のブラウザを更新できるように作っておく。
特定の相手を選べませんが、パスワードかけるなりして使えるんじゃないでしょうか。
効率とかは別にしてやってみるのはアリだとおもいます。
AやBはサーバですか?
だとしたら、Aはメールを送る時点で「サーバで動くアプリケーション」ですよね。
htmlを表示するのは、httpdというプログラムがサーバで動くことで可能になるのです。
これだとhttpdに手を入れて、メールを送受信する仕組みを作ったり、Bのメールサーバも普通のものではなく、メールを受信して即ページを生成する複雑なプログラムにせざるを得ません。
可能は可能ですが、普通にwebサーバを作る100倍以上の手間がかかります。
ありがとうございます!!
AもBもクライアントマシンです。
書き忘れていましたが、Aが1.htmlというアドレスにあるメール投稿フォームに何か入力してボタンをクリックするということです!すると、1.htmlは2.htmlへの遷移を1秒に3回くらいトライします。一方で、Bが1.htmlを通じて送信されたメールを解析して、2.htmlを作り、FTPでアップロードします!
FTPのソフトでレンタルサーバーに接続することを想定しています。
httpdですか・・・javascriptじゃダメですか?
Bの「メールを受信して即ページを生成する」のは大丈夫そうなんですが。。。
やっぱりきついですかね?
サーバで動くプログラムを作りたくないということであれば、クライアント側でVBScript(Windows限定)またはAdobeFlexを使うことで対応可能です。
VBScriptであれば、以下のようなフローで実現できます。
ありがとうございます。
整理できていなかったのですが、クライアント側には、「ブラウザを使ってテキスト入力、ボタンを押下」以外にアプリ使用はNGにしたいと思っています。アプリインストールをしても良いのですが、最終的にはWindows以外のパソコンでもクライアントにしたいと思っていますので、なるべくブラウザだけで実現したいと考えています。
(尚、4の回答にやりたいことを整理しました。)
すいません、AもBもクライアントとなると、AとB以外のCがいますか?
つまり、CがサーバXにあるhtmlを読み込む。Aはそれを感知して、Bとメール&FTPで連携して、Cが読み込んでる間に割り込んでページを送る、という事ですか?
AがCの動作を感知する方法が全くありません。CがサーバXにアクセスする前にAに要求を送るとなると、Aはサーバにならざるを得ないのですが、Aはクライアントと明記されています。
また、Bはメールを受信しているので、明らかにメールサーバです。
Aも、FTPサーバですよね?
クライアントだと言い切ってますが、サーバだらけに見えます。
Bをクライアントとするとなると、中間にメールサーバがきっといるんでしょう。結局サーバの開発は必須っぽいです。
AがCのPC上で動く常駐ソフトだったと仮定しても、PCから勝手にメール送ったりFTPサーバになったりと、プライベート上の問題が多すぎますし、ものすごい負荷がかかる上にやはり開発量も並の量じゃないと思います。
ありがとうございます。やっぱりサーバーだらけになりますかね。。
メールサーバーは無料のものを利用して、サーバーはレンタルサーバーで結果の表示は非常に簡素なもの(テキスト行1行+ビープ音でも鳴れば十分)で済ませないのですが、結果データの作成にはどうしてもクライアントというか、サーバー言語でできない処理をVBAにさせたい、という希望があります。
やはり開発量も膨大になりますかね・・・レスポンス作成が最も大変なのですが、この部分の膨大な処理はVBAでほとんど実現しつつあるのですが・・・これをサーバー言語に翻訳してサーバーに移植した方が早いですか?
(尚、4の回答にやりたいことを少し整理しました。)
こっちの質問はわかりやすいかも。
送る側:
テキストボックスに入力。
ボタンを押下。
特定のアドレスにFTPで送る。
読み取る側:
自動的にブラウザを更新。
をお互いが行えばいいんですよね。
「ひまわり」とか「なでしこ」っていう日本語のプログラミング言語があります。
ちょこっといじってみたのですが、ブラウザもFTPも両方あるんで調べてみてください。
ローカルにアプリ入れる形にはなりますが、実現できます。
ほかの質問も見てみたのですが
>あるWebページで送信されたデータに応じて
この段階でCGI組まなきゃだめです。
それに、ブラウザは勝手に動かないので、更新ボタンを押す必要があります。
どちらかというと「取りに行く」ためのものです。
できること、できないことをしっかり整理することで、どの技術を使えばいいかって固まってきますよ。
それぞれの質問みてるとごちゃごちゃになってるように思えます。
でも頑張ったらできるので頑張ってください。
ありがとうございます。お陰さまで少しずつやりたいことが見えてきたので、質問がシンプルになってきたのだと思います。
正確には
送る側(アプリインストール不可):
テキストボックスに入力。
ボタンを押下。
特定のアドレスにFTPで送る。
約0.1秒後~1分後にサーバーのデータが更新されるので、自動的にブラウザを更新してそれを表示。
読み取る側(アプリインストール可):
FTPでメールを受け取る
メールの内容に応じてデータ生成(0.1秒~1分)
送る側に結果通知(FTPでサーバーにデータまたはデータが格納されたhtmlをアップロードすることを想定)
です。送るデータは10桁の数字、0.1秒~1分後に帰ってくるデータは結果(成功 or 不成功)+メッセージ(成功しました+成功した音(flashを読み込ませる?) or 失敗しました。理由:あsdふぁdfふじこ)程度のイメージです。確かに何ができて何ができないのか、全然分かっていません。
いろいろとサポートして頂きまして大変参考になっております。ありがとうございます。
> どうしてもサーバーで動くプログラムを作りたくない
残念ながら、全く作らないのは不可能かもしれません。
> テキストボックスに入力。
> ボタンを押下。
> 特定のアドレスにFTPで送る。
FTPからダウンロードするのはリンクで簡単に出来ます。(id & password を記述すると丸見えになるので anonymous でやる必要があるでしょう)
でもアップロードは少々難しいと思います。
こんな記事もありますが、環境を選ぶようですね。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1226628...
まだ、「メールを送る」の方が汎用的で現実的だと思います。
サーバサイドのスクリプトを書いてやれば、テキストボックスの値を受け取ったり、FTPでのアップロードやメールの送信も可能です。(どのレンタルサーバでも出来るわけではありません。環境依存です。)
> 約0.1秒後~1分後にサーバーのデータが更新されるので、自動的にブラウザを更新してそれを表示。
サーバ側で何も処理をしないと、ファイルが見つからない時点で「ファイルが見つからない」というメッセージを返して終わってしまうでしょう。
> 遷移を1秒に3回くらいトライします
何度も繰り返して探すとか、時間制限内で待つとかの動作は動作は、勝手にしてくれる訳ではありません。プログラムでの処理が必要でしょう。
(時々見かける「サーバの応答を待っています」というような状態は、存在しないファイルを何回もスキャンしているのとは違います。)
> FTPでメールを受け取る
FTPではメールは送れません。
メールと同じ内容のデータを送る事は出来ますが、送り先はFTPサーバ限定ですし、データが届いた事を感知する仕掛けを仕込まないとダメですね。
> メールの内容に応じてデータ生成(0.1秒~1分)
メールサーバだけでは実現は不可能でしょう。ましてやメールクライアントでは。
「何らかの判断が必要=プログラムが必要」です。
> レスポンス作成が最も大変なのですが、この部分の膨大な処理はVBAでほとんど実現
実現できているのが、「メールを受信して必要なデータを作成する」であれば問題ありませんが、単に「必要なデータを作成する」部分のみであれば、メールの受信をきっかけにその部分を起動するような仕組みが必要です。
この辺りは、ローカルのWin機でやる事を念頭においての事(VBAなので)と思いますが、外部から「直接メールを受け取る」のは案外面倒ですよ?(ローカルにメールサーバ設置が不可避では?)
> サーバー言語に翻訳してサーバーに移植した方が早いですか?
そんな気がします。システム開発も、実行速度も。
単なるテキスト処理なら、サーバサイドの処理の方がかなり早いのでは?
「膨大な処理」が何なのか分かりませんが
> サーバー言語でできない処理をVBAにさせたい
サーバサイドで出来ない処理は、そんなに多くないと思いますけど?
一般的に使われるメールサーバなどでメール受信をきっかけにサーバサイドのプログラムを起動するのはそれ程難しい事ではないです。
.forward や .mailfilter でいろいろ情報が見つかるでしょう。(メールの転送の情報が圧倒的に多いので、探し難いですが)
しかし、それを許しているレンタルサーバはあまり多くないです。
色々考えると、やはりサーバサイドでプログラムを組み動的なページを返すのが理に適っているように感じます。
ありがとうございます。FTPでメールを受け取るのは無理なんですね。もちろん、ある程度のサーバーで動くプログラムは作っても良いのですが、メインの処理をVBAマシンで行いたい、という希望があります。
うまく説明できないところがあり、伝えられていないところがあると思うのですが、
登場マシンは3台あります。まず前提としては
クライアント⇔レンタルサーバー⇔VBAマシン
という接続で、
クライアント側(Windowsに限定しない、ブラウザーの操作のみ、その他のアプリインストール不可、結果を受け取ってページ遷移)
レンタルサーバー(ごく簡単なCGIやメールサーバーを設置するのは全然構わない、クライアント側からのデータ送信に答えてメール送信したり、VBAマシンからのデータ送信に答えてクライアント側へ、ページ遷移という形で結果を送信したりする)
VBAマシン(Windowsで動かす、レンタルサーバーから投げられたメールを確認する、レンタルサーバーに何らかの形でデータを返す、サーバーに移植するのは難しい特殊なアプリをインストールしてあってそれをVBAで動かす。)
という動作をしたいのです。レンタルサーバーにある、ある一つのページに同時にアクセスする可能性があるのは、最大1名だけという仮定で構いません。
同じ機能が実現できる/その方が0.5秒以上早いというのであれば、クライアント側から直接VBAマシンにアクセスしても良いです。その場合、何と言う知識を身につければとっかかりがつかめるかページ等を示して頂ければ幸いです。
おそらくやりたいことをVBAでやる場合をまじめに考えてまとめてみました。
大まかな要件
・WEBサーバー
CGIで特定のファイルに対して読み書きを行う(表示&入力フォーム)
(CGIで吐き出されたファイルをA.HTMLとする。)
参考↓
http://q.hatena.ne.jp/1183967501
・処理する側(VBAのマシン)
1.VBAでFTP接続し、A.HTMLを読み込む。↓参考
http://officetanaka.net/excel/vba/tips/tips47.htm
3.特定の処理を行い、FTP接続し、ファイルをアップロード。上記のページを参考に。
上記を定期的に行うようにする。たとえば5分間隔とか(必要に応じてペースを変える。1秒以下は厳しいと思いますよ。)
取得したファイルををVBAで自動的に書き換えること。
CGIを利用し、WEBサーバー上の特定のファイルを書き換えるようにすること。
この2点クリアできればいけますね。
あとは表示する側のブラウザを更新できるように作っておく。
特定の相手を選べませんが、パスワードかけるなりして使えるんじゃないでしょうか。
効率とかは別にしてやってみるのはアリだとおもいます。
ありがとうございます!ちょっと望み(?)がみえてきました!
効率悪ければVBAマシンをサーバーにするかもしれませんが、とりあえずレンタルサーバーでやってみたいと思います!
ちょっと要件で理解できているか分からない箇所があるのですが、
・WEBサーバー
B.HTMLというページで入力を受ける→CGIで「メール送信」と「A.HTMLへの遷移」を行う
A.HTMLは自分自身を更新し続ける。
・処理する側(VBAのマシン)
VBAでFTP接続し、新着メールを読み込む。
新着メールの件名にデータがあるので、それに対して特定の処理を行い、
あらかじめVBAマシンが持っているA.HTMLという雛形を加工してA'.HMTLにする。
FTP接続し、A.HTMLをA'.HTMLと置き換えてしまう。(HTMLはファイル名が一緒で中身が違う。)
・WEBサーバー
A.HTMLが自分自身を更新してA'.HTMLになったら、更新が終わって結果が表示される。
(ちなみに、A'.HTMLは入力フォームを含み、何かデータを送信すると、CGIでメール送信とB.HTMLへの遷移を行う。B.HTMLはA.HTMLがA'.HTMLに更新されるのと同時にB'.HTMLに更新されており、このページは自分自身を更新し続ける。ブラウザはA'.HTMLとB'.HTMLへ交互に遷移するという無限ループで、「ブラウザを通じてデータをVBAマシンに送り、結果を受け取ったらそれを表示させる」という機能を実現。)
みたいな感じでどうでしょう?
ありがとうございます!ちょっと望み(?)がみえてきました!
効率悪ければVBAマシンをサーバーにするかもしれませんが、とりあえずレンタルサーバーでやってみたいと思います!
ちょっと要件で理解できているか分からない箇所があるのですが、
・WEBサーバー
B.HTMLというページで入力を受ける→CGIで「メール送信」と「A.HTMLへの遷移」を行う
A.HTMLは自分自身を更新し続ける。
・処理する側(VBAのマシン)
VBAでFTP接続し、新着メールを読み込む。
新着メールの件名にデータがあるので、それに対して特定の処理を行い、
あらかじめVBAマシンが持っているA.HTMLという雛形を加工してA'.HMTLにする。
FTP接続し、A.HTMLをA'.HTMLと置き換えてしまう。(HTMLはファイル名が一緒で中身が違う。)
・WEBサーバー
A.HTMLが自分自身を更新してA'.HTMLになったら、更新が終わって結果が表示される。
(ちなみに、A'.HTMLは入力フォームを含み、何かデータを送信すると、CGIでメール送信とB.HTMLへの遷移を行う。B.HTMLはA.HTMLがA'.HTMLに更新されるのと同時にB'.HTMLに更新されており、このページは自分自身を更新し続ける。ブラウザはA'.HTMLとB'.HTMLへ交互に遷移するという無限ループで、「ブラウザを通じてデータをVBAマシンに送り、結果を受け取ったらそれを表示させる」という機能を実現。)
みたいな感じでどうでしょう?