231 lines
26 KiB
Markdown
231 lines
26 KiB
Markdown
|
---
|
||
|
title: perlでcgiを作る
|
||
|
author: kazu634
|
||
|
date: 2009-06-06
|
||
|
url: /2009/06/06/_1268/
|
||
|
wordtwit_post_info:
|
||
|
- 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4647;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}'
|
||
|
categories:
|
||
|
- Perl
|
||
|
|
||
|
---
|
||
|
<div class="section">
|
||
|
<p>
|
||
|
『<a href="http://d.hatena.ne.jp/asin/4774134392" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/asin/4774134392', 'これだけは知っておきたい Webアプリケーションの常識');">これだけは知っておきたい Webアプリケーションの常識</a>』の勉強中です:
|
||
|
</p>
|
||
|
|
||
|
<h4>
|
||
|
クッキーの利用
|
||
|
</h4>
|
||
|
|
||
|
<pre class="syntax-highlight">
|
||
|
<span class="synComment"># === Libraries ===</span>
|
||
|
<span class="synStatement">use strict</span>;
|
||
|
<span class="synStatement">use warnings</span>;
|
||
|
<span class="synStatement">use </span>CGI::Cookie;
|
||
|
<span class="synComment"># === Main part ===</span>
|
||
|
<span class="synComment"># Cookieを取得する</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">%cookies</span> = fetch CGI::Cookie;
|
||
|
<span class="synComment"># countクッキーの値を得て、1増やす</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$count</span> = <span class="synConstant"></span>;
|
||
|
<span class="synStatement">if</span> ( <span class="synStatement">defined</span>( <span class="synIdentifier">$cookies</span>{count} ) ) {
|
||
|
<span class="synIdentifier">$count</span> = <span class="synIdentifier">$cookies</span>{count}->value;
|
||
|
}
|
||
|
<span class="synIdentifier">$count</span>++;
|
||
|
<span class="synComment"># 更新後のcountクッキーを生成する</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$cookies</span> = <span class="synStatement">new</span> CGI::Cookie(
|
||
|
-<span class="synConstant">name </span>=> <span class="synConstant">'count'</span>,
|
||
|
-<span class="synConstant">value </span>=> <span class="synIdentifier">$count</span>,
|
||
|
-<span class="synConstant">expire </span>=> <span class="synConstant">'+3M'</span>,
|
||
|
-<span class="synConstant">path </span>=> <span class="synConstant">'/'</span>
|
||
|
);
|
||
|
<span class="synComment"># レスポンスの送信</span>
|
||
|
<span class="synStatement">print</span>(<span class="synConstant">"Set-cookie: </span><span class="synIdentifier">$cookies</span><span class="synSpecial">\n</span><span class="synConstant">"</span>);
|
||
|
<span class="synStatement">print</span>(<span class="synConstant">"Content-type: text/html; charset=utf-8</span><span class="synSpecial">\n\n</span><span class="synConstant">"</span>);
|
||
|
<span class="synStatement">print</span>(<span class="synConstant">"訪問回数は</span><span class="synIdentifier">$count回です</span><span class="synConstant">。</span><span class="synSpecial">\n</span><span class="synConstant">"</span>);
|
||
|
</pre>
|
||
|
|
||
|
<h4>
|
||
|
キャッシュを利用する
|
||
|
</h4>
|
||
|
|
||
|
<pre class="syntax-highlight">
|
||
|
<span class="synComment"># === Libraries ===</span>
|
||
|
<span class="synStatement">use strict</span>;
|
||
|
<span class="synStatement">use warnings</span>;
|
||
|
<span class="synStatement">use </span>Cache::File;
|
||
|
<span class="synComment"># === Main part ===</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$cache_msg</span>;
|
||
|
<span class="synComment"># キャッシュの初期化</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$cache</span> = Cache::File-><span class="synStatement">new</span>(<span class="synConstant">cache_root </span>=> <span class="synConstant">'/tmp/cache'</span>);
|
||
|
<span class="synComment"># キャッシュからHTMLを得る</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$time_html</span> = <span class="synIdentifier">$cache</span>->get(<span class="synConstant">'time.html'</span>);
|
||
|
<span class="synComment"># キャッシュが無効なら、HTMLを生成してキャッシュに保存する</span>
|
||
|
<span class="synStatement">if</span> (!<span class="synIdentifier">$time_html</span>) {
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">@t</span> = <span class="synStatement">localtime</span>;
|
||
|
<span class="synIdentifier">$time_html</span> = <span class="synStatement">sprintf</span>(<span class="synConstant">'現在時刻は %2d 時 %2d 分 %2d 秒です。'</span>, <span class="synIdentifier">$t</span>[<span class="synConstant">2</span>], <span class="synIdentifier">$t</span>[<span class="synConstant">1</span>], <span class="synIdentifier">$t</span>[<span class="synConstant"></span>]);
|
||
|
<span class="synIdentifier">$cache</span>->set(<span class="synConstant">'time_html'</span>, <span class="synIdentifier">$time_html</span>, <span class="synConstant">'60 sec'</span>);
|
||
|
<span class="synIdentifier">$cache_msg</span> = <span class="synConstant">'キャッシュを更新しました。'</span>;
|
||
|
}
|
||
|
<span class="synComment"># ページの出力</span>
|
||
|
<span class="synStatement">print</span> <span class="synConstant"><<HERE;</span>
|
||
|
<span class="synConstant">Content-type: text/html; charset=utf-8</span>
|
||
|
<span class="synConstant"><title>キャッシュのセット</title></span>
|
||
|
<span class="synConstant"><p></span>
|
||
|
<span class="synIdentifier">$time_html</span><span class="synConstant"><br /></span>
|
||
|
<span class="synIdentifier">$cache_msg</span>
|
||
|
<span class="synConstant"></p></span>
|
||
|
<span class="synConstant">HERE</span>
|
||
|
</pre>
|
||
|
|
||
|
<h4>
|
||
|
簡単なAjaxサンプル
|
||
|
</h4>
|
||
|
|
||
|
<p>
|
||
|
HTMLのページ:
|
||
|
</p>
|
||
|
|
||
|
<pre class="syntax-highlight">
|
||
|
<span class="synComment"><!DOCTYPE htmlUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR.xhtml1/DTD/xhtml1-transitional.dtd"></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">html</span><span class="synIdentifier"> xmlns=</span><span class="synConstant">"http://www.w3.org/1999/xhtml"</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">head</span><span class="synIdentifier">></span>
|
||
|
<span class="synPreProc"> </span><span class="synIdentifier"><</span><span class="synStatement">title</span><span class="synIdentifier">></span>The Example of Ajax<span class="synIdentifier"></</span><span class="synStatement">title</span><span class="synIdentifier">></span>
|
||
|
<span class="synPreProc"> </span><span class="synIdentifier"><</span><span class="synStatement">meta</span><span class="synIdentifier"> </span><span class="synType">name</span><span class="synIdentifier">=</span><span class="synConstant">"Content-Type"</span><span class="synIdentifier"> </span><span class="synType">content</span><span class="synIdentifier">=</span><span class="synConstant">"text/html; charset=UTF-8"</span><span class="synIdentifier"> /></span>
|
||
|
<span class="synPreProc"> </span><span class="synIdentifier"><</span><span class="synStatement">meta</span><span class="synIdentifier"> </span><span class="synType">name</span><span class="synIdentifier">=</span><span class="synConstant">"Content-Script-Type"</span><span class="synIdentifier"> </span><span class="synType">content</span><span class="synIdentifier">=</span><span class="synConstant">"text/javascript"</span><span class="synIdentifier"> /></span>
|
||
|
<span class="synPreProc"> </span><span class="synIdentifier"></</span><span class="synStatement">head</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">body</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">script</span><span class="synIdentifier"> </span><span class="synType">type</span><span class="synIdentifier">=</span><span class="synConstant">"text/javascript"</span><span class="synIdentifier"> </span><span class="synType">src</span><span class="synIdentifier">=</span><span class="synConstant">"prototype.js"</span><span class="synIdentifier">></</span><span class="synStatement">script</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">script</span><span class="synIdentifier"> </span><span class="synType">type</span><span class="synIdentifier">=</span><span class="synConstant">"text/javascript"</span><span class="synIdentifier">></span>
|
||
|
<span class="synSpecial"> </span><span class="synComment">//<![CDATA[</span>
|
||
|
<span class="synIdentifier">function</span><span class="synSpecial"> lwws</span>()<span class="synSpecial"> </span><span class="synIdentifier">{</span>
|
||
|
<span class="synComment">// 結果の表示先に「しばらくお待ちください」と表示する</span>
|
||
|
<span class="synSpecial"> </span><span class="synStatement">document</span><span class="synSpecial">.getElementById</span>(<span class="synConstant">"result"</span>)<span class="synSpecial">.innerHTML = </span><span class="synConstant">"<p>しばらくお待ちください...</p>"</span><span class="synSpecial">;</span>
|
||
|
<span class="synSpecial"> </span><span class="synStatement">new</span><span class="synSpecial"> Ajax.Updater</span>(
|
||
|
<span class="synSpecial"> </span><span class="synConstant">"result"</span><span class="synSpecial">, </span><span class="synConstant">"./cgi-bin/weather.pl"</span><span class="synSpecial">,</span>
|
||
|
<span class="synSpecial"> </span><span class="synIdentifier">{</span>
|
||
|
<span class="synSpecial"> parameters : Form.serialize</span>(<span class="synConstant">"ajax"</span>)<span class="synSpecial">,</span>
|
||
|
<span class="synSpecial"> method : </span><span class="synConstant">"get"</span>
|
||
|
<span class="synSpecial"> </span><span class="synIdentifier">}</span>
|
||
|
<span class="synSpecial"> </span>)<span class="synSpecial">;</span>
|
||
|
<span class="synIdentifier">}</span>
|
||
|
<span class="synSpecial"> </span><span class="synComment">//]]></span>
|
||
|
<span class="synSpecial"> </span><span class="synIdentifier"></</span><span class="synStatement">script</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">h1</span><span class="synIdentifier">></span>The Example of Ajax<span class="synIdentifier"></</span><span class="synStatement">h1</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">form</span><span class="synIdentifier"> </span><span class="synType">method</span><span class="synIdentifier">=</span><span class="synConstant">"get"</span><span class="synIdentifier"> </span><span class="synType">id</span><span class="synIdentifier">=</span><span class="synConstant">"ajax"</span><span class="synIdentifier"> </span><span class="synType">action</span><span class="synIdentifier">=</span><span class="synConstant">""</span><span class="synIdentifier"> </span><span class="synType">name</span><span class="synIdentifier">=</span><span class="synConstant">"ajax"</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">p</span><span class="synIdentifier">></span>
|
||
|
都市:
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">select</span><span class="synIdentifier"> </span><span class="synType">name</span><span class="synIdentifier">=</span><span class="synConstant">"city"</span><span class="synIdentifier"> </span><span class="synType">size</span><span class="synIdentifier">=</span><span class="synConstant">"1"</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">option</span><span class="synIdentifier"> </span><span class="synType">value</span><span class="synIdentifier">=</span><span class="synConstant">"4"</span><span class="synIdentifier">></span>札幌<span class="synIdentifier"></</span><span class="synStatement">option</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">option</span><span class="synIdentifier"> </span><span class="synType">value</span><span class="synIdentifier">=</span><span class="synConstant">"25"</span><span class="synIdentifier">></span>仙台<span class="synIdentifier"></</span><span class="synStatement">option</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">option</span><span class="synIdentifier"> </span><span class="synType">value</span><span class="synIdentifier">=</span><span class="synConstant">"63"</span><span class="synIdentifier">></span>東京<span class="synIdentifier"></</span><span class="synStatement">option</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">option</span><span class="synIdentifier"> </span><span class="synType">value</span><span class="synIdentifier">=</span><span class="synConstant">"70"</span><span class="synIdentifier">></span>横浜<span class="synIdentifier"></</span><span class="synStatement">option</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">option</span><span class="synIdentifier"> </span><span class="synType">value</span><span class="synIdentifier">=</span><span class="synConstant">"38"</span><span class="synIdentifier">></span>名古屋<span class="synIdentifier"></</span><span class="synStatement">option</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">option</span><span class="synIdentifier"> </span><span class="synType">value</span><span class="synIdentifier">=</span><span class="synConstant">"81"</span><span class="synIdentifier">></span>大阪<span class="synIdentifier"></</span><span class="synStatement">option</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">option</span><span class="synIdentifier"> </span><span class="synType">value</span><span class="synIdentifier">=</span><span class="synConstant">"90"</span><span class="synIdentifier">></span>広島<span class="synIdentifier"></</span><span class="synStatement">option</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">option</span><span class="synIdentifier"> </span><span class="synType">value</span><span class="synIdentifier">=</span><span class="synConstant">"110"</span><span class="synIdentifier">></span>福岡<span class="synIdentifier"></</span><span class="synStatement">option</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"></</span><span class="synStatement">select</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">input</span><span class="synIdentifier"> </span><span class="synType">type</span><span class="synIdentifier">=</span><span class="synConstant">"button"</span><span class="synIdentifier"> </span><span class="synType">value</span><span class="synIdentifier">=</span><span class="synConstant">"送信"</span><span class="synIdentifier"> </span><span class="synSpecial">onclick="lwws</span>()<span class="synSpecial">"</span><span class="synIdentifier"> /></span>
|
||
|
<span class="synIdentifier"></</span><span class="synStatement">p</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"></</span><span class="synStatement">form</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">p</span><span class="synIdentifier">></span>通信結果<span class="synIdentifier"></</span><span class="synStatement">p</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">div</span><span class="synIdentifier"> </span><span class="synType">id</span><span class="synIdentifier">=</span><span class="synConstant">"result"</span><span class="synIdentifier">></</span><span class="synStatement">div</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">address</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"><</span><span class="synStatement">a</span><span class="synIdentifier"> </span><span class="synType">href</span><span class="synIdentifier">=</span><span class="synConstant">"mailto:simoom634@kazu634.local"</span><span class="synIdentifier">></span><span class="synUnderlined">simoom634</span><span class="synIdentifier"></</span><span class="synStatement">a</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"></</span><span class="synStatement">address</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"></</span><span class="synStatement">body</span><span class="synIdentifier">></span>
|
||
|
<span class="synIdentifier"></</span><span class="synStatement">html</span><span class="synIdentifier">></span>
|
||
|
</pre>
|
||
|
|
||
|
<p>
|
||
|
Perl側:
|
||
|
</p>
|
||
|
|
||
|
<pre class="syntax-highlight">
|
||
|
<span class="synComment"># === Libraries ===</span>
|
||
|
<span class="synStatement">use strict</span>;
|
||
|
<span class="synStatement">use warnings</span>;
|
||
|
<span class="synStatement">use </span>LWP::Simple;
|
||
|
<span class="synStatement">use </span>XML::Simple;
|
||
|
<span class="synStatement">use </span>CGI;
|
||
|
<span class="synStatement">use utf8</span>;
|
||
|
<span class="synComment"># === Main part ===</span>
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$q</span> = <span class="synStatement">new</span> CGI;
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$city</span> = <span class="synIdentifier">$q</span>->param(<span class="synConstant">'city'</span>) || <span class="synConstant">''</span>;
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$url</span> = <span class="synConstant">"http://weather.livedoor.com/forecast/webservice/rest/v1?city=${city}&day=tomorrow"</span>;
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$xml</span> = get(<span class="synIdentifier">$url</span>);
|
||
|
<span class="synStatement">my</span> <span class="synIdentifier">$data</span> = XMLin(<span class="synIdentifier">$xml</span>);
|
||
|
<span class="synStatement">print</span>(<span class="synConstant">"Content-type: text/html; charset=utf-8</span><span class="synSpecial">\n\n</span><span class="synConstant">"</span>);
|
||
|
<span class="synStatement">print</span>(<span class="synConstant">"</span><span class="synSpecial">\xef\xbb\xbf</span><span class="synConstant">"</span>);
|
||
|
<span class="synStatement">binmode</span>(<span class="synIdentifier">STDOUT</span>, <span class="synConstant">":utf8"</span>);
|
||
|
<span class="synStatement">print</span>(<span class="synConstant">"<p>"</span> . <span class="synIdentifier">$data</span>->{location}->{city} . <span class="synConstant">"の明日の天気<br /></span><span class="synSpecial">\n</span><span class="synConstant">"</span>);
|
||
|
<span class="synStatement">print</span>(<span class="synIdentifier">$data</span>->{telop} . <span class="synConstant">"<br /></span><span class="synSpecial">\n</span><span class="synConstant">"</span>);
|
||
|
<span class="synStatement">print</span>(<span class="synConstant">"<img src=</span><span class="synSpecial">\"</span><span class="synConstant">"</span> . <span class="synIdentifier">$data</span>->{image}->{url} . <span class="synConstant">"</span><span class="synSpecial">\"</span><span class="synConstant"> width=</span><span class="synSpecial">\"</span><span class="synConstant">"</span> . <span class="synIdentifier">$data</span>->{image}->{width} . <span class="synConstant">"</span><span class="synSpecial">\"</span><span class="synConstant"> height=</span><span class="synSpecial">\"</span><span class="synConstant">"</span> . <span class="synIdentifier">$data</span>->{image}->{height} . <span class="synConstant">"</span><span class="synSpecial">\"</span><span class="synConstant"> alt=</span><span class="synSpecial">\"</span><span class="synConstant">"</span> . <span class="synIdentifier">$data</span>->{image}->{title} . <span class="synConstant">"</span><span class="synSpecial">\"</span><span class="synConstant"> /><br /></span><span class="synSpecial">\n</span><span class="synConstant">"</span>);
|
||
|
<span class="synStatement">print</span>(<span class="synIdentifier">$data</span>->{description} . <span class="synConstant">"<br /></span><span class="synSpecial">\n</span><span class="synConstant">"</span>);
|
||
|
<span class="synStatement">if</span> (<span class="synStatement">ref</span> <span class="synIdentifier">$data</span>->{temperature}->{min}->{celsius} <span class="synStatement">eq</span> <span class="synConstant">'HASH'</span>) {
|
||
|
<span class="synStatement">print</span>(<span class="synConstant">"最低気温: データがありません<br /></span><span class="synSpecial">\n</span><span class="synConstant">"</span>);
|
||
|
} <span class="synStatement">else</span> {
|
||
|
<span class="synStatement">print</span>(<span class="synConstant">"最低気温: "</span> . <span class="synIdentifier">$data</span>->{temperature}->{min}->{celsius} . <span class="synConstant">"度<br /></span><span class="synSpecial">\n</span><span class="synConstant">"</span>);
|
||
|
}
|
||
|
<span class="synStatement">if</span> (<span class="synStatement">ref</span> <span class="synIdentifier">$data</span>->{temperature}->{max}->{celsius} <span class="synStatement">eq</span> <span class="synConstant">'HASH'</span>) {
|
||
|
<span class="synStatement">print</span>(<span class="synConstant">"最低気温: データがありません<br /></span><span class="synSpecial">\n</span><span class="synConstant">"</span>);
|
||
|
} <span class="synStatement">else</span> {
|
||
|
<span class="synStatement">print</span>(<span class="synConstant">"最低気温: "</span> . <span class="synIdentifier">$data</span>->{temperature}->{max}->{celsius} . <span class="synConstant">"度<br /></span><span class="synSpecial">\n</span><span class="synConstant">"</span>);
|
||
|
}
|
||
|
<span class="synStatement">print</span>(<span class="synConstant">"</p></span><span class="synSpecial">\n</span><span class="synConstant">"</span>);
|
||
|
</pre>
|
||
|
|
||
|
<h4>
|
||
|
「perl」に関連する最近のエントリ
|
||
|
</h4>
|
||
|
|
||
|
<ul>
|
||
|
<li>
|
||
|
<a href="http://d.hatena.ne.jp/sirocco634/20090603/1244038947" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20090603/1244038947', ' フォームを用いたデータの受け渡し – 武蔵の日記');" target="_blank"> フォームを用いたデータの受け渡し – 武蔵の日記</a>
|
||
|
</li>
|
||
|
<li>
|
||
|
<a href="http://d.hatena.ne.jp/sirocco634/20090531/1243777048" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20090531/1243777048', ' MySQLのインストール – 武蔵の日記');" target="_blank"> MySQLのインストール – 武蔵の日記</a>
|
||
|
</li>
|
||
|
<li>
|
||
|
<a href="http://d.hatena.ne.jp/sirocco634/20090529/1243608618" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20090529/1243608618', ' AmazonのWebサービスを活用してASIN記法をはき出すPerlスクリプト – 武蔵の日記');" target="_blank"> AmazonのWebサービスを活用してASIN記法をはき出すPerlスクリプト – 武蔵の日記</a>
|
||
|
</li>
|
||
|
<li>
|
||
|
<a href="http://d.hatena.ne.jp/sirocco634/20090528/1243522107" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/sirocco634/20090528/1243522107', ' AmazonのWebサービスを使ってみる – 武蔵の日記');" target="_blank"> AmazonのWebサービスを使ってみる – 武蔵の日記</a>
|
||
|
</li>
|
||
|
</ul>
|
||
|
|
||
|
<div class="hatena-asin-detail">
|
||
|
<a href="http://www.amazon.co.jp/dp/4774134392/?tag=hatena_st1-22&ascsubtag=d-7ibv" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.amazon.co.jp/dp/4774134392/?tag=hatena_st1-22&ascsubtag=d-7ibv', '');"><img src="https://images-na.ssl-images-amazon.com/images/I/5182m34EgHL._SL160_.jpg" class="hatena-asin-detail-image" alt="これだけは知っておきたい Webアプリケーションの常識" title="これだけは知っておきたい Webアプリケーションの常識" /></a></p>
|
||
|
|
||
|
<div class="hatena-asin-detail-info">
|
||
|
<p class="hatena-asin-detail-title">
|
||
|
<a href="http://www.amazon.co.jp/dp/4774134392/?tag=hatena_st1-22&ascsubtag=d-7ibv" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://www.amazon.co.jp/dp/4774134392/?tag=hatena_st1-22&ascsubtag=d-7ibv', 'これだけは知っておきたい Webアプリケーションの常識');">これだけは知っておきたい Webアプリケーションの常識</a>
|
||
|
</p>
|
||
|
|
||
|
<ul>
|
||
|
<li>
|
||
|
<span class="hatena-asin-detail-label">作者:</span> <a href="http://d.hatena.ne.jp/keyword/%C6%A3%CB%DC%B0%ED" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/keyword/%C6%A3%CB%DC%B0%ED', '藤本壱');" class="keyword">藤本壱</a>
|
||
|
</li>
|
||
|
<li>
|
||
|
<span class="hatena-asin-detail-label">出版社/メーカー:</span> <a href="http://d.hatena.ne.jp/keyword/%B5%BB%BD%D1%C9%BE%CF%C0%BC%D2" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/keyword/%B5%BB%BD%D1%C9%BE%CF%C0%BC%D2', '技術評論社');" class="keyword">技術評論社</a>
|
||
|
</li>
|
||
|
<li>
|
||
|
<span class="hatena-asin-detail-label">発売日:</span> 2008/03/28
|
||
|
</li>
|
||
|
<li>
|
||
|
<span class="hatena-asin-detail-label">メディア:</span> 大型本
|
||
|
</li>
|
||
|
<li>
|
||
|
<span class="hatena-asin-detail-label">購入</span>: 10人 <span class="hatena-asin-detail-label">クリック</span>: 3,340回
|
||
|
</li>
|
||
|
<li>
|
||
|
<a href="http://d.hatena.ne.jp/asin/4774134392" onclick="__gaTracker('send', 'event', 'outbound-article', 'http://d.hatena.ne.jp/asin/4774134392', 'この商品を含むブログ (14件) を見る');" target="_blank">この商品を含むブログ (14件) を見る</a>
|
||
|
</li>
|
||
|
</ul>
|
||
|
</div>
|
||
|
|
||
|
<div class="hatena-asin-detail-foot">
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|