�Ȥ����櫓�ǡ������Ϥ��ޤ�ޤ��������ź��Υ����ʡ���

����ϡ�WEB+DB PRESS Vol.32�Ρ�Yahoo! Web �����ӥ����ѥ����ɡפ��顣

���WEB+DB Press�ؤ�Ϣ�ܤ�Ϥ��᤿�Τǡ�Ʊ��Τޤ��ޤ���(ȿ��|�˱�)�򵧤äƤ�ޤʤ��Τ����ɡ���������ˡ�Ʊ��ˤ�����������ץ륳���ɤ�����Τϵ��ˤʤ롣����������ư���Τǡ�blog�Ȥ���entry�Ǥ���Ф���Ǥ�褤�Τ����ɡ����μ�λ���Ϥ��ʤ�Ĺ�����ݴɤ��졢�ɼԤ˲��٤⻲�Ȥ���뤳�Ȥ�ͤ���С��֤��θ�פΤ��Ȥ�ͤ��ƿ��ʤ��Ƥ�������������������Damian����äƤ����褦�ˡ��֥����������ɤ�̤��μ�ʬ�ؤΥ�֥쥿���פʤΤ����ޤ��Ƥ䡢����˾����ϡ��ɼԤ˸�������֥쥿���Ǥ⤢��Τ����顣

Vol. 32 pp. 94
 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
#!/usr/local/bin/perl -w
use strict;
use CGI;
use LWP::Simple;
use XML::Simple;

use constant WEBAPI_BASEURL => 'http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch?';
use constant MYYDN_APPID => 'YahooDemo';
use constant MAX_RESULTS => 10;

my $q = new CGI;
print $q->header(-charset => 'utf8'), $q->start_html();
print qq(<form><input type="text" name="query"><input type="submit" value="search"></form>);

if ($q->param("query")){
    (my $key = $q->param("query")) =~ s/(\W)/"%" . unpack("H2", $1)/ge;
     #�ꥯ������URI������
     my $req_url = WEBAPI_BASEURL;
     $req_url   .= "appid=YahooDemo";
     $req_url   .= "&query=".$key;
     $req_url   .= "&results=".MAX_RESULTS;
     
     #API�إꥯ�����Ȥ�����
     my $yahoo_response = get($req_url);

     #��������XML��ѡ�������
     my $xmlsimple = XML::Simple->new();
     my $yahoo_xml = $xmlsimple->XMLin($yahoo_response, ForceArray=>['Result']);

     print $yahoo_xml->{'totalResultsAvailable'} . "hits";
     print "<ol>";
     foreach my $result (@{$yahoo_xml->{'Result'}}){
         print qq(<li><a href="$result->{'ClickUrl'}">$result->{'Title'}</a></li>);
     }
     print "</ol>";
}

print $q->end_html(), "\n";

���ܸ��ơ�Perl�������ˤʤꤽ���ʥ������Ǥ��롣

�䤬refactor�����餳���ʤä���

 1:
 2:
 3:
 4:
 5:
 6:
 7:
 8:
 9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
#!/usr/local/bin/perl -T
use strict;
use warnings;
use Readonly;
use URI;
use CGI qw/:standard/;
use LWP::Simple qw/get/;
use XML::Simple;
use Encode qw/encode_utf8/; # to drop utf8 flag from XML::Simple

Readonly my $WEBAPI_BASEURL
    => 'http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch';
Readonly my $MYYDN_APPID => 'YahooDemo';
Readonly my $MAX_RESULTS => 10;

print 
    header(-charset => 'UTF-8'),
    start_html(-lang=> 'ja',  -title=>$ENV{SCRIPT_NAME}, -encoding=>'UTF-8'),
    start_form(), textfield("query"), submit(-value=>"search"), end_form(),
    search_result(),
    end_html();

sub search_result{
    return unless param("query");
    my $uri = URI->new($WEBAPI_BASEURL);
    $uri->query_form( appid => $MYYDN_APPID,
                      query => param("query"),
                      results => $MAX_RESULTS );
    my $response = get($uri) or return;
    my $xml = XML::Simple->new->XMLin($response, ForceArray=>['Result']);
    return 
        $xml->{'totalResultsAvailable'},  "hits",
        ol(map {
            encode_utf8 li(a({href=>$_->{'ClickUrl'}}, $_->{'Title'}))
            } @{ $xml->{'Result'} } );
}

����Ǥϡ������ʤ�褦���긵��Perl Best Practices��Perl�ץ�����ߥ󥰵�̿����������Фʤ���������������ϡ�Perl������ץȤ�񤤤Ƥ������äƤ���ҤȤ�ɬ���긵�ˤ����Ƥ����٤���������

�ޤ�������ΰ������顣���ꥸ�ʥ�Ǥ�use constant��ȤäƤ���������������ܤǤ��롣use constant�Ρ�����פϡ��¤�������֤�sub�ʤΤǡ�sigil ($@%&*)���������ä��Ƥ��ޤ��������qq()�ǥ��󥿡��ݥ졼�Ƚ���ʤ��Τ��ˤ����º�19���ܤǤϷ������ǤϤʤ�ʸ�����ƥ��򤽤Τޤ޻ȤäƤ��ꡢ�ޤ�ǰ�̣�ʤ��ˤʤäƤ��롣������Ȥ��Ƥ���ۤ�Ŭ�ڤʤΤ���������

Damian�����Τ�����ϡ�Readonly�⥸�塼�������˻Ȥ���������ǰ�ʤ���5.8���ߤǤ�core�����äƤ��ʤ�����5.10�Ǥ���������������������Ȥä�»�Ϥʤ�������������⤤��ʤ顢���ä�����ϻȤ�ʤ��ǺѤޤ��������ޤ��Ǥ��롣�������Ϥ��ޤ�Ȥ�ʤ���������Ǻ��ä����ϤۤȤ�ɤʤ����ɤ����Ƥ�Ȥ����Ȥ�������Ū��

sub DEBUG { 1 } # DEBUG ������Ȥ��ƻȤ�

�Ȥ��Ƥ��롣

�դ�qq()�����Ѥ���⤢�롣32���ܤǤϡ�$result->{'ClickUrl'}��qq()���������Ƥ��뤬��tag����ޤäƸ��Ť餤�ä��餢��㤷�ʤ��ʤ���������⡢Perl 6��->�����.�ؤΰܹԤϴ���)��������������

printf qq(<li><a href="%s">%s</a></li>), $result->{'ClickUrl'}, $result->{'Title'};

�Ȥ���С����äȸ��䤹���ʤ�ǤϤʤ�����perl�ˤ�qq()�����ǤϤʤ�sprintf()��printf()�⤢��Ȥ������Ȥ�Ф��Ƥ��������������ʸ����Ϣ��黻�ҤȤ��Ƥ�.�⤢�뤷(Perl 6�Ǥ�~)��Here Text�⤢�롣������ɤ��Ȥ�ʬ���뤫���Ӥθ�������������ͥ��ϡְ����ɤߤ䤹���ʤ�����פ��Ȼפ���

���˥����å������ꥸ�ʥ�Ǥ�HTML�ν��Ϥ������API�˥�����������XML��ѡ������Ƥ��η�̤���Ϥ��Ƥ��뤬��ñ�˸����ܤ����������ǤϤʤ����������Web Server��CGI Script���̿����֤�Ĺ���ʤäƥѥե����ޥ�Ū�ˤⰭ�����ù������Ƚ��Ͻ�����ʬ����Τ���������

���ˡ�"en passant"�����ꥸ�ʥ�16���ܤ���

�����������Ȥ�JAPH������ץȤ�������Ǥ�äƤ��������������ֻ�Ϥ����ˤ�Perl���ΤäƤ��ޤ��פȤ����褦�Ǥ��ä������褦�˴����뤫�⤷��ʤ���������ϼ��ռ����Ȥ�����Τ����񤯤ʤ�

# my ($var = $oldvar) =~ s/$regexp/$replacement/ ������!
my $var = $oldvar;
$var =~ s/$regexp/$replacement/;

�Ȥ��٤��Ǥ��롣�����⤳�ξ�硢��ҤΤ褦�ˡ�������ʬ�ϼ¤�URI�⥸�塼���Ȥ����ˤ�����פˤʤäƤ��ޤ��ΤǤ��롣

LWP�����äƤ���С�����URI�⥸�塼�뤬�դ��Ƥ���Τ����������Ȥ�ʤ��Ȥ����Τ��Ի׵ĤǤ��롣���ꥸ�ʥ��18-21���ܤǤ�äƤ��뤳�Ȥϡ����ǤǤ�26-28���ܤ��о줹�뤬���ɤ��餬�狼��䤹����������?

�狼��ˤ������ʽ��������ä��顢�ޤ��������⥸�塼���õ���Ƥߤ롣����Ф����Ȥ����ʤ���Х⥸�塼��ˤ���CPAN�˾夲�롣���줬Best Practice�Ǥ��롣

�����ơ�CGI�⥸�塼��γ��ѡ�$q->param()�������ݤ���ʤ����޳�HTML��Ÿ���ˤ�ȤäƤ���ΤǤ���С���äȤ�äȳ��Ѥ��褦��

����$q->param()��Ȥäơ�����use CGI qw/:standard/��Ȥ����Ȥ����Τϡ��¤�non-trivial�ʼ���ʤΤ����ɡ����Τ褦��CGI������ץȤ��������ʸ�������������뤹����ˤϡ�use CGI qw/:standard/�ʤɤ�Ȥä�;�פ�$q->��ʤ����ƥ�ץ졼�Ȥʤɤ�Ȥäƽ������̤ˤʤäƤ�����ϡ�$q��Ȥäƽ������Ϥ��Ȥ����Τ����줤���Ĥ狼��䤹���ڤ�ʬ�����Ȼפ�����������ԤʤΤǡ����Τ褦�ˤ��Ƥߤ��餳��ʤ˥����ɤ����ä��ꤷ����

���ʤߤˡ����Υ���ץ륳���ɤΥ��ꥸ�ʥ�κ�Ԥϡ�Yahoo����ο͡��Ǥ��롣�ߤʤ���ϡ�Yahoo�Ǥ⤳�줯�餤�פȰ¿�������������������Ȥ�֤⤷�����ƥץ���������󥳡��ɤ⤳��ʴ���!?�פ��԰¤ˤʤä�����������

����ƣ���󡢤����ȻŻ����ޤ��礦

Dan the Contributing Writer Thereof