• ベストアンサー

Rubyでメタ検索プログラムを見よう見まねで書いていますが、結果がバイナリ文字列で表示されます。

Rubyで下記のようなプログラムを書いています。ある検索サイトに対してメタサーチ的なものを実現したいと思い、見よう見まねで作っています。問題は結果が出るものの、日本語で本来出るべき結果部分がバイナリ文字列で表示されます。例えば、?216?241?227?303?201o?202?277といった感じです。おそらく初歩的な質問になってしまうと思いますが、教えていただけると助かります #!/usr/bin/ruby require "socket" require "cgi" c = CGI.new text = c["t"] s = TCPSocket.new("www.xxx.com", 80) s.write "GET /xxx/index.php?word_in=xxx HTTP/1.0?r?n?r?n" print "Content-Type: text/html?n?n" result=s.read.split(/?<li?>/) p result[1] print "<br>" print "</body></html>"

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

> p result[1] p メソッドで出力しているからです。 putsなりprintなりを使えば多分大丈夫。

daen
質問者

お礼

ありがとうございます。putsで難なく解決しました。助かりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

Ruby,PHP共に素人です。 環境 Ruby 1.8.1 (C:\Environment\Ruby\v1.8.1\bin\ruby.exe,PATH等は通してある) ANHTTPD ドキュメントルート C:\ANHTTPD 配置したファイル C:\ANHTTPD\Q3197179.cgi C:\ANHTTPD\hogehogefugafuga.html 文字コード Q3197179.cgi(UTF-8N) hogehogefugafuga.html(UTF-8) ソースコード ==========Q3197179.cgi=========== #!C:\Environment\Ruby\v1.8.1\bin\ruby.exe require "socket" require "cgi" c = CGI.new s = TCPSocket.new("localhost", 80) s.write "GET /hogehogefugafuga.html HTTP/1.0\n\n" result=s.read.split(/\<li\>/) print "Content-Type: text/html;charset=UTF-8\n\n" print result[1] print "<br>" print "</body></html>" =========================hogehogefugafuga.html====== <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <title>Q3197179 テスト1</title> </head> <body> <ul> <li>あ</li> <li>い</li> <li>う</li> <li>え</li> </ul> </body> </html> ======ブラウザで http://localhost/Q3197179.cgi にアクセスした結果 ======(注:Windows XPのコマンドプロンプトはShift_JISで表示するため化ける)====== あ</li> <br></body></html> ================= ということでとりあえず異常ありません。(いろいろいじったけど) 気になる点は・・・ 1.rubyを使わず直接ブラウザで ​http://www.xxx.com/xxx/index.php?word_in=xxx にアクセスするとどうなるか?(エンコーディングも確認) 2.もしクエリに日本語が含まれている場合、どのようにエンコードされるか?

daen
質問者

お礼

ありがとうございます。putsで解決できましたが、今後の参考にさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ruby erbでの表示がうまく行きません。

    本当に初心者ですので、質問が分かりづらいかもしれませんが、よろしくお願いします。 環境は、OS:WindowsXPSP3 ApacheHttpserver2.2 Ruby-186-26 RubyGems -v 0.9.4 です。 erbを使って簡易掲示版を作ろう!!と言うものなのですが、 ・keijiban.html ・keijiban.rb ・data.csv(書き込んだデータ保存用csv)・・・cgi-binに保存 ************************************************************ 入力ミスは散々見直しました。 添付ファイルが2つのファイルです。localhostで表示してみていますが、 初期表示は出来ますが、データを追加しようと『投稿する』ボタンをクリックすると 画面が真っ白になります。 入力ミスは散々見直しました。 初期表示が出来ると言う事は、keijiban.rbは動作していると思われます。 REDで簡易解析と言うのをしてみた所、次のエラーが出たり出なかったりです。 C:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require': no such file to load -- rde (LoadError) from C:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require' from C:\Program Files\RDE\rde_export.rb:9 from C:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require' from C:/ruby/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require' from C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/rb1D.tmp:71 Complete(1) 何か、インストールが足りないのでしょうか? 教えて下さい。 2000字超えたため、別ファイルに全文を記入しています。

    • ベストアンサー
    • Ruby
  • ruby-cgi メールは受信できるのですが文字化けしてしまいます。

    下記のように記載しましたが、日本語のメール本文が文字化けしてしまいます。 nkfあたりが怪しいと思うのですが、お手上げです。 よろしくお願いします。 #!/usr/bin/ruby -Ke require 'nkf' require 'cgi' require 'net/smtp' def sendmail(server, subject, body, sender, recipient) mail = '' # メールヘッダを作る mail << 'To: ' + recipient + "\n" mail << 'From: ' + sender + "\n" mail << 'Subject: ' + subject + "\n" mail << 'Date: ' + Time.now.strftime('%a, %d %b %Y %H:%M:%S %z') + "\n" mail << "\n" # メールの本文 mail << body # 送信! Net::SMTP.start(server, 25) {|smtp| smtp.send_mail(mail, sender, recipient) } end cgi = CGI.new output = '' output << "ああ" + ":\n" output << ' ' + "いいい".gsub(/\n/, "\n ") + "\n" NKF.nkf('-j -m0', output) sendmail('mailserver@**.co.jp', 'cgi sendmail', output, 'from@mail.co.jp', 'to@mail.co.jp'){|body| NKF.nkf('-e -m0', body) } cgi.out('type' => 'text/plain') { output }

    • ベストアンサー
    • CGI
  • ルビープログラムのフォーム入力について

    Rubyプログラムを勉強中です。 簡単な掲示板から始めているのですが、実行させるとうまく動きません。 なにかヒントになるものがあれば教えて下さい。 参考サイト http://jp.rubyist.net/magazine/?0012-CGIProgrammingForRubyBeginners-3 エラーの症状 上記サイトの「CGI クラスを使ってフォームデータを取得する」項目で実際にhtmlフォームへ半角英数で入力すると値を返してくれます。 下記は値を返した時のページのソース <html><head></head><body>1<br></body></html> しかし全角入力でフォームへ入力するとするとHTML値を返してくれません。 下記は値を返した時のページのソース <html><head></head><body> 参考サイトのデータをそのまま実行させているのですが、何か原因はわかりますでしょうか? Rubyプログラムの中身は下記のとおりです。 #!/usr/local/bin/rubyrequire "cgi"print "Content-Type: text/html\n\n" print "<html><head></head><body>" c = CGI.newtext = c["t"] print textprint "<br>" print "</body></html>" もしわかれば教えて下さい。よろしくお願いします。

    • ベストアンサー
    • Ruby
  • Ruby WEBrick cgiからgifが最後まで送れない。

    以下のようなHTTPサーバをWinXp上で動かしました。 #$ruby = "C:/ruby/bin/ruby.exe" require 'webrick' srv = WEBrick::HTTPServer.new({ :BindAddress => 'xxx.xxx.xxx.xxx', :CGIInterpreter => "c:/ruby/bin/ruby.exe", :Port => 80 }) srv.mount("/", WEBrick::HTTPServlet::FileHandler, "./", {:FancyIndexing=>true}) srv.start そして、以下のようなCGIをよびます。 #!/usr/bin/ruby STDOUT.binmode open("hoge.gif", "r") do |f| f.binmode body = f.read puts "content-type: image/gif" puts "content-length: #{body.size.to_s}" puts "" print body end すると、content-length分のHTTPボディーが送られてきません。 2種類のgifで試しましたが、193byte/724byte、289byte/451byteでした。 バージョンは、ruby 1.8.6、WEBrick 1.3.1です。 何が原因でしょうか?

  • rubyでバイナリファイルを直接数字に変換する方法

    rubyでバイナリファイルを扱う練習をしていますが、バイナリを読み込み数字として使う際、それまでにストリングに変え、intにするなど複数の処理を行わなければ扱えないようなのですが、もっとシンプルな方法はありませんでしょうか。下記がそのサンプルです。 どうぞよろしくお願いいたします。 b = File.new("test.bin", "w") s= [31].pack('c') b.print s # 1F b.close infp = File.open("test.bin","r") s=infp.read(1) infp.close s=s.unpack('c') s=s.to_s s=s.to_i s=s+2 puts s # 33

  • cgiで表示するhtmlページ内でバイナリ画像を出力したい

    cgiで表示するhtmlページ内でバイナリ画像を出力したい 「CGI 画像出力」でググったページで下記のコードがありました。 下記コードは、 Content-typeをimage/gif等にして バイナリを print すれば表示される という書き方になっていると思いますが、 content-typeがtext/html のページ内でバイナリをprintした場合 バイナリが文字列としてグシャァァァと表示されてしまいます。 ------- $view = 'aaa.jpg'; print "Content-type: image/jpeg\n\n"; #コンテンツタイプを指定する open IMGG,"$view"; #ファイルハンドル IMGGに画像ファイルを読み込む binmode (IMGG); #画像なのでバイナリモードに設定する print <IMGG>; #ファイルハンドルを画面に書き出す close (IMGG); #ファイルハンドルを閉じる exit; ------- content-typeがtext/htmlの状態でバイナリの画像を表示するには どうすればよいのでしょうか? cgiを2つ用意して、上記のコードを img src=~~.cgi という形で 呼び出すしかないのでしょうか?

    • ベストアンサー
    • Perl
  • 文字列変換すると、数字に変わる

    CGIで、 $hensu = ~ s/\r\n|[\r\n]/<br>/g; を実行すると、 18446744073709551615 と、書き出されます。 ・・・これは、何なのでしょうか? http://okwave.jp/qa/q1653502.html などを参考にしたのですが、いまいちよく分かりません。 すいませんが、ご存知の方がいらっしゃいましたら、ご教示いただけないでしょうか?

    • ベストアンサー
    • CGI
  • join と split で文字列を操作する場合

    にんにちは、 うまく解決する方法を思いつかないので、質問させてください。 以下のスクリプトを実行すると、a から z を * で join して、 その後、* で split するかなと思ったら、split は正規表現として とらえるためでしょうか、エラーになります。 #! /usr/bin/perl -w use strict; my $a = '*'; my $b = join $a , ('a'..'z'); print "$b\n"; my @result = split /$a/,$b; print "$_\n" foreach @result; exit(); $a = '\*'; にすると、split したときに、 余計な \ が残ってしまいます。 任意の(書く時点では分からない)いろんな文字列で 連結したり分割したりする場合のスマートな方法が ありましたら、教えていただけませんか? Perl 5.8 です。お願いします。

    • ベストアンサー
    • Perl
  • 文字列検索の結果を赤で表示したい

    全文検索のフリーソフトwwwsrch.cgiのソースのたぶん次の箇所が、検索結果を赤で表示している箇所だと思いますが、はて、自分の力ではこれを読みこなせません。  どなたか、もし基本的なかたちだけでも素描していただけないでしょうか。 for ($j = $imin; $j <= $imax; $j++) {  $line = $lines[$j];  &jcode'convert(*line, "euc");  $line =~ s/<[^>]*(>|$)//g;  $tmp = $word;  &jcode'convert(*tmp, "euc");  if ($jflag) {   $tmp =~ s/([\+\*\.\?\^\$\[\-\]\|\(\)\\])/\\$1/g;    }  #$line =~ s/($tmp)/<B>$1<\/B>/ig; $line =~ s/($tmp)/<B style="color:red">$1<\/B>/ig; &jcode'convert(*line, $kcode_cgi, "euc"); print "$line "; }

    • ベストアンサー
    • Perl
  • Ruby 1.9.3でShift-JIS文字列を

    よろしくお願いします。 Rubyでスマフォ(SH-02D)の電話帳のQUOTED-PRINTABLEの文字列を WindowsのShift-JIS文字列に変換してファイルに出力したいのですが putsだと日本語文字列に見えるのですが、printだと[]で囲まれた16進数の (一部は^のように表示されますが)列になってしまいます。 ネットで検索してもprintはそのまま、putsは強制改行があるという 違いしかないように思えるのですがどうすればputsと同じ出力を 強制改行無しに出力できるのでしょうか。 RubyはWindows 7 Professional x64でeclipse INDIGOにAptana Studioを 入れて入力&実行しています。 (プレアデスも入ってます。ソースのエンコードはS-JISです。) sub_column = column[i].split("/;/") quoted_string = sub_column[j].unpack("M") puts quoted_string print quoted_string ---- (抜粋) でputsとprintで見え方が違うのです。