Rubyで指定したあるURL(たとえばhttp://www.hatena.ne.jp/)に飛ぶ命令を教えてください。


自分がやりたいことですが、あるURLに存在する情報をゲットしたいのではありません。
あるURL上のボタンを押すとRubyで作ったCGIが動くようにしたのですが、いまのままだと○○.cgiの画面になってしまいます。
そうではなくて、そのCGIの処理が終わったあとは、元のURLの画面に戻りたいのです。
Rubyのバージョンはわかりません。すみません。ですがそれほど古くはないと思います。

よろしくお願いいたします。

回答の条件
  • 1人1回まで
  • 登録:2008/12/30 03:07:29
  • 終了:2009/01/03 02:47:07

ベストアンサー

id:mponto No.1

mponto回答回数14ベストアンサー獲得回数22008/12/30 04:20:41

ポイント40pt

rubyの関数ではないのですが、

Ajaxと併用してはいかがでしょうか?

例えば、

<a href="..." onClick="Javascript:clickFunc();">...</a>

<script type="text/javascript">

function clickFunc(){

httpObj = new XMLHttpRequest();

httpObj.open("GET","sample.rb",true);

httpObj.send(null);

などなど・・・

}

</script>

のようにします。

リンクをクリックするとclickFuncが呼ばれ、sample.rbにアクセスします。

それで、sample.rbがなんか行って、返り値が(あれば)帰ってきます。

元に戻るというよりは、元のページにいながらcgiを動作させる、という感じです。

参考サイト

http://www.openspc2.org/JavaScript/Ajax/Ajax_study/index.html

id:lionfan

mponto様、ありがとうございます。これで試してみます。

うまくいったらまたご報告いたします。

2008/12/30 04:54:37

その他の回答(3件)

id:mponto No.1

mponto回答回数14ベストアンサー獲得回数22008/12/30 04:20:41ここでベストアンサー

ポイント40pt

rubyの関数ではないのですが、

Ajaxと併用してはいかがでしょうか?

例えば、

<a href="..." onClick="Javascript:clickFunc();">...</a>

<script type="text/javascript">

function clickFunc(){

httpObj = new XMLHttpRequest();

httpObj.open("GET","sample.rb",true);

httpObj.send(null);

などなど・・・

}

</script>

のようにします。

リンクをクリックするとclickFuncが呼ばれ、sample.rbにアクセスします。

それで、sample.rbがなんか行って、返り値が(あれば)帰ってきます。

元に戻るというよりは、元のページにいながらcgiを動作させる、という感じです。

参考サイト

http://www.openspc2.org/JavaScript/Ajax/Ajax_study/index.html

id:lionfan

mponto様、ありがとうございます。これで試してみます。

うまくいったらまたご報告いたします。

2008/12/30 04:54:37
id:rubikitch No.2

るびきち回答回数120ベストアンサー獲得回数222008/12/30 05:13:49

ポイント40pt

このテの質問をするならば、サンプルとなるサイトを用意して、どのようなことをやってどんな結果を望んでいるのかを明確にしてください。

具体的なURLがないから正しい意図はつかめないし、動くコードを書くこともできません。

あせらずに質問文を見直してください。冒頭に「Rubyで指定したあるURLに飛ぶ命令を教えてください。」ではあるURLに存在する情報をゲットするとしか読めません。

WWW::Mechanizeは機械化されたブラウザで、ブラウザでできる処理を自動化できます。ただし、JavaScriptは対応していません。

http://d.hatena.ne.jp/kitamomonga/ がとても詳しいです。

RubyのバージョンはCGIスクリプトで調べられます。

#!/usr/local/bin/ruby
print "Content-Type: text/plain\r\n\r\nRUBY_VERSION=#{RUBY_VERSION}\r\n"
id:lionfan

rubikitch様、ありがとうございます。了解です。

ところで

>>サンプルとなるサイトを用意して、どのようなことをやってどんな結果を望んでいるのかを明確にしてください

すみません、言いたいことはわかるのですが・・・自分も回答者だったらそう思うと思うのですが・・・

率直に言って、そんな手間をかけるくらいでしたら、もう少し自分で調べます。

今は時間の節約をしたいので、質問文がわかりにくかったらスルーして結構です。

Rubyのバージョンの調べ方については、ありがとうございます。参考になります!!

なお、いただいたサンプルコードで調べてみたところ、バージョンは1.8.5でした。大感謝です。

2008/12/30 05:31:22
id:garyo No.3

garyo回答回数1782ベストアンサー獲得回数962008/12/30 09:36:56

ポイント40pt

CGIが出力する<HEAD>・・・</HEAD>の中に以下を書いて転送してはどうでしょうか。


<meta http-equiv="refresh" content="0; url=http://www.hatena.ne.jp/">

http://www.htmq.com/html/meta.shtml

[別ページへの自動ジャンプと画読み込み]

<meta http-equiv="refresh" content="5; url=aaa.htm">

<meta http-equiv="refresh" content="5">


別な方法として、「(画像式)アクセス解析 」の方法があります。

これはcgiを画像として書いておくことで、アクセス解析を行う方法です。

この場合はcgiのページが開かれることはありませんし、ボタンを押さなくてもcgiが実行されます。


http://www.rescue.ne.jp/cgi/gifaxs/

<img src="cgiaxs.cgi">←ここにイメージタグがあるが何も表示されない。<p>

後、呼び出し元もrubyで書いてある場合はXMLRPCを使うと、サーバーと表示しているページ間でデータのやり取りが出来ると思います。

http://www.linux.or.jp/JF/JFdocs/XML-RPC-HOWTO/xmlrpc-howto-ruby...


呼び出し元がRubyでない場合(例えばJavaScriptで書かれている場合)はAjaxのXMLHTTPRequestが使えるのではと思います。

http://ja.wikipedia.org/wiki/Ajax

id:lionfan

garyo様、たくさんの解決策ありがとうございます。

今夜、試してみます。うまくいくと良いです。がんばります!!

2008/12/30 13:00:48
id:worris No.4

worris回答回数78ベストアンサー獲得回数102008/12/31 01:06:17

ポイント40pt

CGIでは何もprintせずに、処理の最後に「print "Location: http://www.hoge.com/fuga.html\n\n"」ではないでしょうか。

id:lionfan

worris様、ありがとうございます。

これは失敗しました・・・。

画面に Location: http://www.○○.jp/~○○.html と出るだけでした。

2008/12/31 01:42:45
  • id:rubikitch
    「サンプルとなるサイトを用意して」と書きましたが、別に自分で作らなくても既存のサイトでかまいません^^

    急がば回れと言うように、時間の節約を望んでいるからこそ明確な質問をしたほうがよいです。
    その方が外した回答をもらう可能性が減ります。


    バージョン1.8.5…サポート終了しているちょっとばっかし古いやつですね(^^;
  • id:lionfan
    rubikitch様、了解です。ありがとうございます。
  • id:worris
    > 画面に Location: http://www.○○.jp/~○○.html と出るだけでした。

    それはその前に何か出力しているせいだと思いますよ。
    printかputsかcgi.outかcgi.headerしているのではないですか?
  • id:lionfan
    worris様、ありがとうございます!!
    print "Content-type: text/html\n\n"
    を削ったら解決いたしました!!
  • id:kuro-yo
    この事はどんな質問でも言える事ですが、

    コメント欄が開いている時は、質問に対する疑問点はコメント欄に書くべきだと思います。
    回答欄で質問を書かれても、回答がオープンされない限り、それを他の回答予定者は見る事ができませんし。

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

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

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

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