JSON で 困った
WebService::Simple で Google Ajax Search API を叩いてるんですが、なんか JSON のパースでエラーがでまくり。
具体的に以下のコードで再現します。
#!/usr/bin/perl use strict; use warnings; use utf8; use WebService::Simple; use WebService::Simple::Parser::JSON; use Data::Dumper; my $q = 'ケーキ www.bob-an.com/recipe/OutputMain.asp?KeyNo=15711'; my $parser = WebService::Simple::Parser::JSON->new; $parser->{json}->utf8(1); my $google = WebService::Simple->new( base_url => 'http://ajax.googleapis.com/ajax/services/search/web', response_parser => $parser, params => { q => $q, v => '1.0', rsz => 'large', lr => 'lang_ja', }, ); my $req = $google->get; my $res = $req->parse_response; print Dumper($res);
エラーはこんなの。
illegal backslash escape sequence in string, at character offset 383 (before "\\\x{30af}\x{30ea}\x{30b9}...") at /usr/lib/perl5/site_perl/5.8.6/WebService/Simple/Parser/JSON.pm line 27.
illegal backslash escape sequence...
んで、以下のようにクエリー文字列を変えると、エラーにならない。
my $q = 'www.bob-an.com/recipe/OutputMain.asp?KeyNo=15711';
なんとなく、検索結果に含まれる 「</b>(」とかあたりの文字列が怪しいってとこまではわかったけど、そこから先に進めなくなった。
あやしい文字列を抜き出して、WebService::Simple 使わずに JSON.pm で直接パースしてみるんだけど、なかなかエラーが再現しないんですよね。
なんなんだろいったい。。。