お気持ちのみですが合計120P程度差し上げます。自宅サーバーについて知識がある方にお伺いします。


やりたいことは、クライアント側からの簡単なキーワード(例:1192)の入力に対して、サーバーマシンが受け取ったデータを適当にVBAを使って加工して(これをCGIやJavaScriptで表現するのは難しいので、VBAで。)、それをレスポンス(例:鎌倉幕府)にして送り返すだけというものです。

クライアント側には特別なものをインストールしたくないので、ブラウザで簡素なレスポンス画面兼入力画面が表現できればそれでよいです(結果テキスト1行+入力ボックス+送信ボタン)。

質問はコメント欄に示します。

お力お貸しください。よろしくお願いします。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/09/27 21:40:01
  • 終了:2010/09/28 04:44:16

ベストアンサー

id:niwa-mikiho No.2

niwa-mikiho回答回数508ベストアンサー獲得回数382010/09/28 00:03:21

ポイント80pt

perl であれば、

データは

キーワード[TAB]レスポンスデータ[改行]

となってるものと仮定した例です。

#/usr/bin/perl

use strict;

use CGI;

my $in = new CGI;

my $inputkey = $in->param('keyword');

open(INFH, '<', 'data.csv');

while(my $line = <INFH>){

  chomp $line;

  my ($keyword, $keydata) = split(/\t/, $line);

  if($inputkey eq $keyword){

    print $keydata; # 見つかったデータを返す

    last; # もう探す必要が無いので終了

  }

  print ''; # 見つからなかったので空を返す

}

close(INFH);

こんな感じで大体完成です。

キーワードが何回呼ばれたかなどのアクセス解析をするならもっと必要ですが、

キーワードに対してレスポンスを返すだけで、エラー処理を加えなければこれだけで済みます。


HTML を返す場合は

    print $keydata;

の行で HTML を返せば OK です。


ちなみに、Apache や IIS などのサーバーを導入せずにネットワークでレスポンスを返すには、

ネットワークを勉強しなくてはなりません。

要はサーバーソフトを作ることになります。

id:ReoReo7

ありがとうございます。具体的なプログラムまで記述して下さって、大変参考になりました。プログラムは、サーバーがCSVからデータを探ってきて返すというものでしょうか。尚、CSVが更新された際にもWebページ閲覧者がそれを知るということを希望しています。質問があいまいだったのですが、少し具体化してきたので http://q.hatena.ne.jp/1285596171 の回答4の返信にもやりたいことを書いておきました。

今後はこちらの質問に統合したいと思います。ありがとうございました!

2010/09/28 04:43:52

その他の回答(1件)

id:deflation No.1

deflation回答回数1036ベストアンサー獲得回数1262010/09/27 22:11:10

ポイント40pt

大前提として、VBAだけではWebアプリを記述することはできません。VB.Netなどで記述する必要があります。


Q1:VB.Netプログラムが動作するマシンをWebサーバにする必要があります。つまり、IISが必要ということです。

レスポンスタイムは、マシン性能、ネットワークトラフィック、プログラムの記述の仕方によって変わってくるので、何とも言えません。

id:ReoReo7

ありがとうございます。

うーん・・データだけサーバーのように受けてCSVとかに蓄積しといて、動作だけCSVから取り出したデータでもって普通のPCのようにVBAを動かして、またCSVに格納・・・とかってできないですかね?要は、リアルタイムでCSVの内容に関連してWebページが動作できれば良いのですが・・・。

2010/09/27 22:22:54
id:niwa-mikiho No.2

niwa-mikiho回答回数508ベストアンサー獲得回数382010/09/28 00:03:21ここでベストアンサー

ポイント80pt

perl であれば、

データは

キーワード[TAB]レスポンスデータ[改行]

となってるものと仮定した例です。

#/usr/bin/perl

use strict;

use CGI;

my $in = new CGI;

my $inputkey = $in->param('keyword');

open(INFH, '<', 'data.csv');

while(my $line = <INFH>){

  chomp $line;

  my ($keyword, $keydata) = split(/\t/, $line);

  if($inputkey eq $keyword){

    print $keydata; # 見つかったデータを返す

    last; # もう探す必要が無いので終了

  }

  print ''; # 見つからなかったので空を返す

}

close(INFH);

こんな感じで大体完成です。

キーワードが何回呼ばれたかなどのアクセス解析をするならもっと必要ですが、

キーワードに対してレスポンスを返すだけで、エラー処理を加えなければこれだけで済みます。


HTML を返す場合は

    print $keydata;

の行で HTML を返せば OK です。


ちなみに、Apache や IIS などのサーバーを導入せずにネットワークでレスポンスを返すには、

ネットワークを勉強しなくてはなりません。

要はサーバーソフトを作ることになります。

id:ReoReo7

ありがとうございます。具体的なプログラムまで記述して下さって、大変参考になりました。プログラムは、サーバーがCSVからデータを探ってきて返すというものでしょうか。尚、CSVが更新された際にもWebページ閲覧者がそれを知るということを希望しています。質問があいまいだったのですが、少し具体化してきたので http://q.hatena.ne.jp/1285596171 の回答4の返信にもやりたいことを書いておきました。

今後はこちらの質問に統合したいと思います。ありがとうございました!

2010/09/28 04:43:52
  • id:ReoReo7
    質問とは
    Q1:VBAが走るパソコン(VBAマシン)を自宅サーバーにする必要がそもそもありますか?「クライアントがデータ送信→サーバーが受け取ってから処理を始める(クライアントはサーバーが処理を始めたことをブラウザに表示されるメッセージで知る)」と、「サーバーが結果送信→クライアントのブラウザが更新され、メッセージが表示される」のそれぞれを0.1秒以内に行いたいです。
    Q2:もし立てる必要が無ければ、どうやって実現できますか?
    クライアントがブラウザを通じてVBAマシンに命令を送るにはメール等を送信する機能を使えばできそうですが、VBAマシンは次の3つの処理を並行して実現する必要があります。即ち、「1:VBAマシンがリアルタイムで命令を受け取る(クライアント側はデータ送信が成功したことを知る)」と「2:VBAマシンがVBAの処理を走らせる(1分かかることもある)」そして「結果が出たら、クライアントの見るブラウザに結果メッセージを1行送り、クライアントのブラウザを更新して結果を表示させる」の3つです。
  • id:ReoReo7
    素人意見なのですが、チャットやGoogle SpreadSheetを使えば惜しいところまで機能が実現できます。

    両者共通の問題は、いつも決まったアドレスにアクセスすることで特定のVBAマシンとプライベート通信が可能にならなければいけないこととか、送信データとレスポンスデータを区別できないところですかね・・・ レスポンスデータはちゃんとクライアント側を特定のHPアドレスへ誘導することで実現したいですし。

    あと何か思いついたら書きます。返信待ってます!
  • id:ReoReo7
    追記:VBAマシンがFTPでファイルをアップロードすることで対応できませんか?

    sample1.htmlからデータを送信→VBAマシンへメール送信した後に、sample2.htmlを読み込み続ける、しかしsample2.htmlはまだ存在しない。

    VBAマシンは送信されたメールの内容に応じて、サーバーに2.htmlを送信する。


    みたいな。

    これってできませんかね?ちょっと他の質問で聞いてみたいと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません