電子書籍の厳選無料作品が豊富!

対象サイトの内容を取得するCGIを構築したいのですが、うまくいきません。
対象サイトがJavascript中心に構成されているせいでしょうか。
原因の判る方、どうかご教示願います。m(__)m

#!/usr/bin/perl
use LWP::Simple;
my $html = get("http://jun.sakura.ne.jp/~dk3/result/result225.ht …

#相対指定部分の置換
$mae = '\.\./';
$ato = 'http://jun.sakura.ne.jp/~dk3/';
$html =~ s|$mae|$ato|g;

print "Content-type: text/html\n\n$html\n";

A 回答 (3件)

補足の内容を見ていると、No.2さんがおっしゃるように、ブラウザが文字コード判別を失敗しているようにも思えますね。



UTF-8の文字列をShift-JISとして表示すると、補足にあるような文字化けが起きます。
ブラウザから手動で文字コードを選んでみるとわかるかもしれません。

ところで、LWP::Simple::getは最近仕様が変わり、文字コードを判別して、Perl内部表現文字列を返すようになってますね。

Perl内部表現はutf8なので、補足にあるような文字化けから推測して、質問者さんが利用しているLWP::Simple::getが、Perl内部表現文字列を返してる可能性はありますね。

その場合、print文等で外部に出力するときはencode関数を用いて適切な文字コードに変換してから出力する必要があります。

use Encode;
$html = encode("cp932", $html); # ここでは、cp932(≒Shift-JIS)に変換

print "Content-type: text/html\n\n$html\n";

従来のバイト文字列を返すLWP::Simple::getの場合でも、(必要であれば)適切な文字コードの変換をしてください。

use Encode;
Encode::from_to($html, "utf8" => "cp932"); # ここでは、utf8 => cp932に変換

従来仕様のバイト文字列を取得したいのであれば、以下のようにLWP::UserAgentを利用すればいいと思います。

use LWP;

my $res = LWP::UserAgent->new->get("http://jun.sakura.ne.jp/~dk3/result/result225.ht …

if( $res->is_error ) {
print "Content-type: text/html\n\n";
print $res->status_line;
exit;
}

my $html = $res->content;

#相対指定部分の置換
$mae = '\.\./';
$ato = 'http://jun.sakura.ne.jp/~dk3/';
$html =~ s|$mae|$ato|g;

print "Content-type: text/html\n\n$html\n";
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
詳しいことは分からないのですが
仕様の変更等があり出来なくなっていた…ということでしょうか。

ご提示いただいたもので試したところ、うまくいきました!
急いでいたものでとても助かりました!本当にありがとうございます!

お礼日時:2011/03/07 19:36

なんとなく、ブラウザの表示する文字コードの問題をいっている気がしますが、


情報が足りません。

どういう処理があるのか説明していただかないと
どこでつまづきそうか、どうやったら原因究明ができるか、といったことが
答えようがないですよね。

- 処理概要(ここで必要な情報をできるだけいれる)
- 上記処理のここでこううまくいかない(上記処理概要に基づいて記述)

を書いてください。

この回答への補足

Perlの例文を真似て書くようなレベルのため
知識をお借りしたく投稿しました。
回答に至れない程の拙い投稿、失礼いたしました。

補足日時:2011/03/07 19:32
    • good
    • 0

なにがどううまくいかなかったのか、どこにも書いてありませんよ。


なので誰も答えられないのでは。

JavascriptでURLを構成していたら、基本的に難しいと思いますが、
それ以外の場合なら、置換等で頑張ればできるかもしれないですね。

この回答への補足

ご指摘感謝いたします。
スタイルシート等は置換により正常に読み込みできるのですが
対象サイトの内容が正常に表示されず、ただ

繧ソ繧、繝医Ν縺ォ謌サ繧・/a>

と表示されてしまいます。

補足日時:2011/03/06 19:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!