
Perlのプログラムのエラーです。ローカルでは問題なく動きました。サーバはさくらサーバで文字コードはEUC-JPです。
CGIから文章をMECAPIという形態素解析APIに送って、品詞ごとにファイルに書き込みます。
Status: 500 Content-type: text/html
Software error:
Can't locate object method "content" via package "HTTP::Response=HASH(0x86e9250)" (perhaps you forgot to load "HTTP::Response=HASH(0x86e9250)"?) at test9.cgi line 49.
#!/usr/local/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use Encode qw/encode decode/;
use utf8;
use CGI;
use CGI::Carp qw( fatalsToBrowser);
my $str;
my $i;
my $j;
&main;
sub main{
my $q = new CGI();
$str = $q->param( "words" );
$str = decode('euc-jp', $str);
my $title = encode('euc-jp', "MeCab APIを呼出す");
my $h1 = encode('euc-jp', $str . "の品詞");
print $q->header( -type =>"text/html", -charset => "euc-jp" );
print "<meta http-equiv=\"refresh\" content=\"5;URL=./test2.html\">";
print $q->start_html( $title ),
$q->h1( $h1 ),
$q->start_ul;
my $esc = CGI::escape($str);
Encode::from_to($esc, "euc-jp", "utf8" );
my $ua = LWP::UserAgent->new;
$ua->agent('PerlSample/0.1');
$ua->timeout(5);
my $response = $ua->get('http://mimitako.net/api/mecapi.cgi?sentence=' . $esc . '&response=surface,feature');
Encode::from_to($response, "utf8", "euc-jp" );
my @res = split(/<word>/, $response->content);
foreach $i (@res){
$i = decode('utf8', $i);
my @wc = ("名詞", "動詞", "形容詞", "助動詞", "助詞" , "接頭詞" , "接続詞" , "記号" );
my @fn = ("N" , "V" , "A" , "MV" , "JOSHI","SETTOUSHI", "SETSUZOKUSHI", "KIGOU");
for($j=0; $j<@wc; $j++){
if($i =~ /<surface>(.+)<\/surface><feature>$wc[$j]/){
$str = encode('utf8', $1);#utf8
my $filename = encode('euc-jp', $fn[$j]);
open(OUT, ">>./dir/$filename.txt");
Encode::from_to($fn[$j], "utf8", "euc-jp" );
print $fn[$j].$str." ";
$str = encode('euc-jp', $1);
Encode::from_to($str." ", "utf8", "euc-jp" );
print OUT "$str\n";
close(OUT);
last;
}
}
}
}
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
元の質問にあったエラーと話がそれて来て混乱しているのですが、とりあえずなんか書いてみました。
パスとか修正して下さい。あと空白2文字を全角空白にしてます。#!/usr/bin/perl -T
use strict;
use warnings;
use utf8;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI::Pretty;
use Encode;
use LWP::UserAgent;
my $q = CGI->new();
my $text = $q->param("text");
if ( defined $text ) {
my $utf8 = Encode::is_utf8($text) ? $text : Encode::decode_utf8($text);
my $escaped = CGI::escape($utf8);
my $ua = LWP::UserAgent->new;
$ua->agent('PerlSample/0.1');
$ua->timeout(5);
my $res
= $ua->get( 'http://mimitako.net/api/mecapi.cgi?sentence='
. $escaped
. '&response=surface,feature' );
print $q->header( -type => 'text/plain', -charset => 'UTF-8' );
print $res->status_line, "\n";
print $res->message, "\n";
print $res->code, "\n";
if ( $res->is_success ) {
binmode STDOUT, ":encoding(utf8)";
print $res->content, "\n";
}
else {
print $res->error_as_HTML, "\n";
}
}
else {
print $q->header( -charset => 'UTF-8' ),
$q->start_html( -title => "test", -lang => 'ja', ),
$q->start_form( -method => 'GET', -action => $q->script_name ),
$q->textfield( -name => 'text', -default => 'Input text' ),
$q->submit("Send"),
$q->end_form,
$q->end_html;
}
この回答への補足
ありがとうございます。
なんとかなりそうなのですが、XMLページを表示できませんとなってしまいます。
クロームだと表示できるのですが、IEでは表示できません。
No.4
- 回答日時:
ちょっと試したところ再現しました。
一番最初に回答された方が指摘した問題が原因のようです。修正しても直りませんでしたか?use strict;
use warnings;
use LWP::UserAgent;
use Encode qw/encode decode/;
use CGI;
my $str = "test string";
my $esc = CGI::escape($str);
my $ua = LWP::UserAgent->new;
$ua->agent('PerlSample/0.1');
$ua->timeout(5);
my $response
= $ua->get( 'http://mimitako.net/api/mecapi.cgi?sentence='
. $esc
. '&response=surface,feature' );
# Can't locate object method "content" via package ... と出力し、エラーになる
Encode::from_to( $response, "utf8", "euc-jp" );
my @res = split( /<word>/, $response->content );
# 成功する
# my $content = $response->content;
# Encode::from_to( $content, "utf8", "euc-jp" );
# my @res = split( /<word>/, $content );
この回答への補足
すみません、どうしてもエラーがでます。
以下はローカルのエラーで、サーバ環境では500番で全く動きません。
--- 実行開始 [>perl untitled3.pl]
[Mon Nov 8 05:34:31 2010] untitled3.pl: Use of uninitialized value $str in concatenation (.) or string at untitled3.pl line 24.
[Mon Nov 8 05:34:31 2010] untitled3.pl: Use of uninitialized value $esc in concatenation (.) or string at untitled3.pl line 38.
Content-Type: text/html; charset=utf-8
<meta http-equiv="refresh" content="5;URL=./test2.html"><!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>MeCab API繧貞他蜃コ縺・/title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h1>縺ョ蜩∬ゥ・/h1><ul>
--- 実行終了 (0)
No.3
- 回答日時:
> つまり、HTTPリクエストを送って、なにも返答が帰ってきてないということですね。
違いますよ。モジュールがちゃんと入っているかという意味です。
content メソッドは HTTP::Response が 継承している HTTP::Message で実装している
ようなので、HTTP::Message が正しく入っていないかもしれません。
use HTTP::Response;
if (HTTP::Response->can('content')) {
print 'HTTP::Response can content', $/;
}
else {
print 'HTTP::Response can not content', $/;
}
if (HTTP::Response->can('content_dummy')) {
print 'HTTP::Response can content_dummy', $/;
}
else {
print 'HTTP::Response can not content_dummy', $/;
}
入っていれば以下のようになります。
HTTP::Response can content
HTTP::Response can not content_dummy
でも、 HTTP レスポンスが帰ってきてない可能性もありますね。レスポンスをチェック
するのもよいでしょう。
if ( $response->is_success ) {
print "HTTP response success\n";
}_
else {
print "HTTP response fail\n";
}
この回答への補足
HTTP response success HTTP::Response can content HTTP::Response can not content_dummy
と表示されました。
どこが問題なのでしょうか。
No.1
- 回答日時:
> Encode::from_to($response, "utf8", "euc-jp" );
response オブジェクトそのものを文字コード変換するのは
おかしくありませんか。
my $content = $responce->content;
Encode::from_to($content, "utf8", "euc-jp" );
my @res = split(/<word>/, $content);
とかじゃないかと。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するQ&A
- 1 文字コードEUCのPerlプログラムが文字化けしてしまいます
- 2 ローカルテストOKのPerl サーバでのエラーです。
- 3 perl-cgiで1文字や2文字など短い、文字コードを正しく変換したい
- 4 さくらサーバ(スタンダード)への Web::Scraper(perl
- 5 Perlスクリプトが、ローカルでは実行できるが、HTTP経由では実行できない
- 6 Perlの日記プログラムがIIS+ActivePerlで動かない
- 7 perlのローカルプログラムでディレクトリのアクセス権を取得したい
- 8 (perl)プログラムの先頭に記述するだけで、エラーを飛ばしてくれる方
- 9 ローカルで動かしているPerlが急に動かなくなりました。
- 10 perlプログラムが動かない
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
WinInet.dll で HTTPS へ POST ...
-
5
jcode.plのかわり
-
6
perlのdbi-connect処理のエラー
-
7
perl でエラー:Wide character...
-
8
(perl)プログラムの先頭に記述...
-
9
sendmailのエラーを知りたい
-
10
Excel2013で実行時エラー9...
-
11
検索ボックスから製品名を検索...
-
12
「デバイスは PRN を初期化でき...
-
13
フルパスから最後のディレクト...
-
14
VBAでJPGサイズ変更
-
15
ActivePerlのバージョンアップ方法
-
16
teraterm から起動したプログラ...
-
17
ディレクトリ名の変更
-
18
MySQLにバイナリデータを正常に...
-
19
偶数/奇数の判定
-
20
ExcelVBAモジュールのコピーと削除
おすすめ情報