- ベストアンサー
手作業をシステム化したい方法とは?
- 手作業をシステム化する方法についてご相談です。現在、社員向けに表示される数字を毎回手作業で保存しているのですが、この作業を自動化したいと考えています。具体的な対応方法をご教示いただけないでしょうか。
- 現在、数字の表示は社員にしか意味がないものですが、アドレスが分かれば誰でも見ることができます。手作業で数字を保存し、FTPで個人的なサーバーに取り込む作業を行っていますが、これをシステム化したいです。CGIは見よう見まねで書いたことがありますが、LWPは使用できません。会社に個人宛に送信してもらうことも期待できません。対応方法についてアドバイスをいただけますか。
- 手作業で数字を保存し、FTPで個人的なサーバーに取り込む作業を行っていますが、これが大変です。システム化する方法についてアドバイスをいただけないでしょうか?CGIは見よう見まねで書いたことがありますが、LWPは使用できません。会社に個人宛に送信してもらうことも期待できません。お手数ですが、ご教示いただけますと幸いです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
例えば、http://www.abcde.co.jp/testdata/test.txtが見たいテキストだと すると、サンプルの$hostに'www.abcde.co.jp'、pathに'/testdata/test.txt'を セットして実行してやれば、そのテキストファイルの内容がゲットできます。 テキストファイルではなく、Webページに表示された内容ならやはりpathに ホストを除いたアドレスの残り部分をセットしてやれば同様です。 そのままファイルに出力しても良いし、適当な場所だけ抜き出して保存しても それはロジック次第で自由です。 それから、フリーのCGIを提供されているサイトを一つ紹介しておきます。 Socketを使用したCGIも多いので、ダウンロードして見るだけでもかなり 参考になると思います。 前の質問を締めずに次の質問をするとマナー違反と指摘する人も 居ますので注意してください。 (そういう指摘を時々見かけますので)
- 参考URL:
- http://www.ln-lab.net/
その他の回答 (4)
- Yeti21
- ベストアンサー率47% (396/830)
少し考えては見ますがすぐには思いつきません。 この質問も既に見る人も少なくなっていると思いますので、 一旦締め切って再度現状を記載して質問してみてはどうでしょうか? その方が多くの人の目に付くと思います。 その際、サーバの環境(OSやhttpサーバの種類やバージョン等)も 提示した方が良いと思います。
お礼
Yeti21さん、どうも有り難うございました。 了解です。 これまでの動きをまとめて新たに再度質問を考えてみます。 ここももう少し開けておきたいのですが。 ところで、 ジャンルは何処が宜しいのでしょうか。 perl、cgi、HTMLしか思いつかないのですが。 私もsoketを勉強してみたいと思います。
補足
それから、書くのを漏れてしまいましたが、 そもそもやりたいことは、会社にあるテキストデータ(数字)を私の個人的なサーバーに格納することです。 soketという機能で解決できるのでしょうか。 何回も済みませんが、宜しくお願いします。
- Yeti21
- ベストアンサー率47% (396/830)
ANHTTPDは使ったことが無いので、環境を作ってみました。 (ANHTTPDとActivePerlは最新版です) 補足に書かれたスクリプトをそのまま実行してみましたが、問題無く実行されました。 ただし、私の環境ではプロキシを通ることができないためlocalhostで実行しました。 www.yahoo.co.jpでも実行できましたが、HTTPのGETでエラーになります。(これはあくまで私の環境の問題です) ANHTTPDかPerlの設定かバージョンの問題だと思います。 403のエラーならもう少しエラーが特定できるメッセージが出ていると思いますが。 結果は以下の通りです。 step1 host=localhost, port=80, url= step2 step3 step4 step5 step6 HTTP/1.1 200 Document follows MIME-Version: 1.0 Server: AnWeb/1.42p Date: Thu, 19 Oct 2006 08:51:25 GMT Content-Type: text/html Last-Modified: Thu, 19 Oct 2006 08:51:25 GMT Connection: close step7 step8 test end
お礼
毎回有り難うございます。 お礼、補足のあとトレースしていましたら、エラーの原因が分かりました。 cgiのパーミッションを設定漏れしていました。 実行が入っていませんでした。 その後にやってみたのが以下の通りです。 step1 host=www.yahoo.co.jp, port=, url= step2 step3 ということで、エラーは消えましたが、step3で止まってしまいます。 これからソケットの設定に掛かるところです。 これこそ私のサーバーがソケットを許していないのでしょうか。 AN HTTPD でのエミュレーションでは、Yeti21さんと全く同じように最後まで行きます。 そして文字化けはあるのですが、yahooのトップページも表示されました。 この状態で評価して貰えると助かります。 宜しくお願いします。
- Yeti21
- ベストアンサー率47% (396/830)
1.稼動するかどうかは詳細に見ていないので答えられません。 少なくともperlのパスは稼動するサーバに合わせて修正する必要がありますが、 あくまで、httpの参照ロジック部分のサンプルとして紹介しただけで、そのまま 使うという前提では有りません。 ただ、cgiとして稼動させるということを前提としています。 名前は別にhttp.plに拘る必要はありませんので、xxx.cgiでも自由に作成して いただければ良いと思います。 逆に、~.plという名前でcgiとして稼動可能かは質問者様のhttpサーバの設定次第なので 私にはわかりません。 2.その通りです。サーバ側の情報です。 では、頑張ってください。
お礼
また、早速返事を有り難うございます。 分からないなりにサンプルをコピーし、手を加えて、とりあえずフリーウェアの AN HTTPDでエミュレーションしてみました。 何とか結果が帰ってきました。 (実行したcgiは補足に上げさせていただきます) やりたいことはまだ(データをサーバーに保存したい)なのですが、 個人的なサーバーの確認がしたいので、同cgiをアップし実行してみました。 1.結果は、403cgiエラー と 500インターナルサーバーエラーが出ました。 ということは、私が使っているサーバーでは、soketを許して居ないということでしょうか。 2.もしくは本当にどこかにエラーがあるのでしょうか。 3.もし使えるのなら次のステップ(データの取込)に移りたいのですが。 手探りでやっているような状況です。 宜しくお願いします。
補足
今回試しているcgiです。 #!/usr/local/bin/perl # @(#)http.pl Copyright (C)2001 ASH. http://ash.jp/ # # 簡易ブラウジングスクリプト(HTTP) # Usage: http.pl URL(http://host:port/dir/file) # $|=1; print "Content-type: text/html\n\n"; print <<"nghh"; <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <TITLE>test</TITLE> </HEAD> <BODY> <h1><font color="green">test</font></h1> <br><br> <HR> nghh print "<br>\n"; print "step1\n"; print "<br>\n"; use strict; use Socket; use FileHandle; my ($proxy_host, $proxy_port, $http); my ($con_host, $con_port); my ($host, $port, $url, $path, $ip, $sockaddr); my ($arg, $buf); ($arg) = @ARGV; # HTTPプロトコルのバージョン $http = '1.1'; # プロキシサーバの設定 #$proxy_host = 'XXX.XXX.XXX.XXX'; #$proxy_port = 8080; # デフォルトホストの設定 #$host = 'localhost'; $host = 'www.yahoo.co.jp'; $port = getservbyname('http', 'tcp'); $path = '/'; # URL解析処理 $arg =~ m!(http:)?(//)?([^:/]*)?(:([0-9]+)?)?(/.*)?!; if ($3) {$host = $3;} if ($5) {$port = $5;} if ($6) {$path = $6;} print "host=$host, port=$port, url=$url\n"; print "<br>\n"; print "step2\n"; print "<br>\n"; if ($proxy_host) { # プロキシサーバ経由 $con_host = $proxy_host; $con_port = $proxy_port; $url = $arg; } else { $con_host = $host; $con_port = $port; $url = $path; } print "<br>\n"; print "step3\n"; print "<br>\n"; # ソケットの生成 $ip = inet_aton($con_host) || die "host($con_host) not found.\n"; $sockaddr = pack_sockaddr_in($con_port, $ip); socket(SOCKET, PF_INET, SOCK_STREAM, 0) || die "socket error.\n"; print "<br>\n"; print "step4\n"; print "<br>\n"; # ソケットの接続 connect(SOCKET, $sockaddr) || die "connect $con_host $con_port error.\n"; autoflush SOCKET (1); print "<br>\n"; print "step5\n"; print "<br>\n"; # HTTP要求を送信 if ($http eq '1.1') { print SOCKET "GET $url HTTP/1.1\n"; print SOCKET "Host: $host\n"; print SOCKET "Connection: close\n\n"; } else { print SOCKET "GET $url HTTP/1.0\n\n"; } print "<br>\n"; print "step6\n"; print "<br>\n"; # HTTP応答を受信 while (chomp($buf=<SOCKET>)) { print "$buf\n"; } print "<br>\n"; print "step7\n"; print "<br>\n"; # 終了処理 close(SOCKET); print "<br>\n"; print "step8\n"; print "<br>\n"; print "<br>\n"; print "test end\n"; print "<br>\n";
- Yeti21
- ベストアンサー率47% (396/830)
参考URLの解説を参考に、そのホームページを読み込んでやれば、 あとは中身を取り出すだけです。 レイアウトを分解して必要な値を取り出すロジックは自分で考えてください。 それほど難しくは無いと思います。
お礼
早速有り難うございました。 まず、出来るということで一安心です。 ただ、参考サイトを読んでみましたが、ちんぷんかんぷんです。 これからしっかり勉強します。 また引き続き宜しくお願いします。 早速ですが、現状で何点かお願いします。 1.例題にあるhttp.plとは私のサーバーのcgi-binフォルダに http.plという名前で置いて、その名でアドレス欄に打ってやれば 稼働するのでしょうか。 (cgiと同じ扱いで宜しいのでしょうか) 2.『Webサーバに直接接続する場合は、ホスト名、ポート番号、URLディレクトリ』 と在りますが、これは相手(会社サーバー)のことですよね。 全く素人で申し訳在りません。 とにかくやってみます、有り難うございました。
お礼
Yeti21様、最後まで細かな親切、有り難うございました。 全て了解しました。 フリーウェアのcgiは使いこなせるか全くこれからですが、とにかく勉強してみます。 また、質問を締め切りしないで次に質問をすることのマナー違反は知りませんでした、勉強になりました。 うまくいったときにはお礼を言う場がないのですが、分からない場合はまた新たな質問をさせていただきますので、その時にも今回同様、宜しくお願いします。 どうも有り難うございます、お世話になりました。