<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
	<channel>
		<title>ハブろぐ - havelog.ayumusato.com のフィード</title>
		<link>http://havelog.ayumusato.com/</link>
		
		<description>このページではRSSフィードを表示しています。このフィードをRSSリーダーに登録することで、最新記事の一覧を読むことができるようになります。&#xD;
&#xD;
ソースコードの引用部分（CODE要素）はRSS上に反映されないため、不自然に途切れている記事は、ブログ上で直接ご覧ください。</description>
		<language>ja</language>
		<copyright>Copyright (C) 2009 ハブろぐ - havelog.ayumusato.com All rights reserved.</copyright>
		<lastBuildDate>Thu, 11 Mar 2010 07:48:38 +0900</lastBuildDate>
		<generator>acms v1.2.2b20100203</generator>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/blogayumusato" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="blogayumusato" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
			<title>a-blog cmsのText Expander用スニペット</title>
			<link>http://havelog.ayumusato.com/ablogcms/entry-82.html</link>
			<description>&lt;div class="newsTextBox"&gt;
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;Text Expanderは最高です&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://havelog.ayumusato.com/computer/software/entry-46.html"&gt;TextExpanderが半額セール中 ( ソフトウェア ) :: ハブろぐ - havelog.ayumusato.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;以前にも紹介しましたが、TextExpanderです。今回は、a-blog cms用スニペットの最新版を公開します。キーボードのほうが好きな人や、モジュールの構造を暗記できている方は、こちらのほうがオススメなぐらいです。&lt;/p&gt;

&lt;p&gt;参考@Text Expanderの紹介はこちら：&lt;a href="http://cyblog.jp/modules/weblogs/1831"&gt;シゴタノ！ —    寿命ものびるかも？ タイピング速度を劇的に向上させる TextExpander を使い込む幸せ&lt;/a&gt;&lt;/p&gt;

				

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;acms.textexpander&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="http://ayumusato.com/souvenir/acms.textexpander"&gt;http://ayumusato.com/souvenir/acms.textexpander&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;このURLをコピーしてください。これがスニペットデータへのアドレスになります。&lt;/p&gt;

				

				

				&lt;br class="clearHidden" /&gt;
			&lt;/div&gt;
			&lt;p class="continueBtn"&gt;&lt;a href="http://havelog.ayumusato.com/ablogcms/entry-82.html"&gt;「a-blog cmsのText Expander用スニペット」の続きを読む&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UG3kYgGspBPH6TZ3FwAgHuWF29E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UG3kYgGspBPH6TZ3FwAgHuWF29E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UG3kYgGspBPH6TZ3FwAgHuWF29E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UG3kYgGspBPH6TZ3FwAgHuWF29E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogayumusato/~4/Vwp120qJaK0" height="1" width="1"/&gt;</description>
			<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">あほむ</dc:creator>
			<comments>http://havelog.ayumusato.com/ablogcms/entry-82.html#comment</comments>
			<guid isPermaLink="true">http://havelog.ayumusato.com/ablogcms/entry-82.html</guid>
			<pubDate>Wed, 10 Mar 2010 21:57:10 +0900</pubDate>
		</item>
		<item>
			<title>LPO機能の検証にリファラをレッツ★改ざん</title>
			<link>http://havelog.ayumusato.com/computer/software/entry-80.html</link>
			<description>&lt;div class="newsTextBox"&gt;
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;LPO関連の機能&lt;/h2&gt;

&lt;p&gt;a-blog cmsのv1.3.0から本格的に実装されそうなLPO関連の機能について簡単に。検索エンジンからアクセスがあったときに、検索に使われていたキーワードを利用して、動的にランディングページのコンテンツを変える機能です。たとえば、弊社で制作中のサイトの404ページには、検索エンジンから&lt;strong&gt;404にきてしまったときに、検索に使われていたキーワードでサイト内検索した結果を表示する&lt;/strong&gt;という実装(Ajax)がされています。&lt;/p&gt;

&lt;p&gt;公開済みの例だと、株式会社マールさんが制作された、&lt;a href="http://junior.co.jp/"&gt;株式会社 JUNIOR【ジュニアー】&lt;/a&gt;さんのサイト（参考: &lt;a href="http://www.a-blogcms.jp/showcase/junior.html"&gt;事例紹介&lt;/a&gt;）でも有名な機能です。このサイトのトップページに、検索エンジンからブランド名でランディングしたときは、そのブランドに関するコンテンツが表示されます。&lt;/p&gt;

&lt;h2&gt;検索ページじゃないと検証できない&lt;/h2&gt;

&lt;p&gt;そんな便利な一連の機能も、そもそも検索エンジンからアクセスしない限り、正常に動作しているかどうかは確認しようがありません。制作中のサイトでソレでは困ることも多いはず。&lt;/p&gt;

&lt;p&gt;LPO機能の中核を成す、グローバル変数&lt;strong&gt;%{SEARCH_ENGINE_KEYWORD}&lt;/strong&gt;には、検索エンジン（Google, Yahoo, Bing）からのアクセスがあった場合、検索に使用されていたキーワードが格納されます。この変数自体は、アクセス時のリファラを参照しているだけなので、リファラを任意の文字列に設定してしまえば、好きなように%{SEARCH_ENGINE_KEYWORD}の値を操作できるというわけです。&lt;/p&gt;

&lt;h2&gt;レッツ★改ざん&lt;/h2&gt;

&lt;p&gt;前置きが長くなりましたが、そんな事情により今回はリファラを任意に設定できるFirefoxのアドオンを紹介します。&lt;/p&gt;

&lt;p&gt;リンク：&lt;strong&gt;&lt;a href="https://addons.mozilla.org/ja/firefox/addon/4513"&gt;refspoof :: Add-ons for Firefox&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

				

				
			

				&lt;!-- 画像 --&gt;
				&lt;div class="column-image-center"&gt;
					&lt;a href="http://havelog.ayumusato.com/archives/002/201003/large-4b9637be4f57d.jpg" rel="highslide""&gt;
						&lt;img class="columnImage" src="http://havelog.ayumusato.com/archives/002/201003/4b9637be4f57d.jpg" alt="" width="580" height="26" /&gt;
					&lt;/a&gt;
				&lt;/div&gt;

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;p&gt;この&lt;strong&gt;refspoof&lt;/strong&gt;というアドオンは、任意のリファラーになりすましてサイトにアクセスできる機能を持っています。（別に悪いことしてるわけじゃないですよ！）スクリーンキャプチャの「&lt;strong&gt;ここでGoogleで検索したときのURLなどをセットします&lt;/strong&gt;」という部分に、下のような検索ページのURLを貼り付けてみます。&lt;/p&gt;

				

				
			

				&lt;!-- 画像 --&gt;
				&lt;div class="column-image-left"&gt;
					&lt;a href="http://havelog.ayumusato.com/archives/002/201003/large-4b9637be595a1.jpg" rel="highslide""&gt;
						&lt;img class="columnImage" src="http://havelog.ayumusato.com/archives/002/201003/4b9637be595a1.jpg" alt="" width="300" height="89" /&gt;
					&lt;/a&gt;
				&lt;/div&gt;

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;p&gt;&lt;a href="http://www.google.co.jp/search?q=%E3%81%8A%E3%81%84%E3%81%97%E3%81%84%E3%82%8A%E3%82%93%E3%81%94"&gt;おいしいりんご - Google 検索&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;おいしいりんご、というキーワードで検索したときのURLを貼り付けます。上のリンクをコピーするか、リンク先に飛んでからURLをコピーします。&lt;/p&gt;

				

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;a-blog cmsのサイトで実験&lt;/h2&gt;

				

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;p&gt;さて、a-blogcmsのサイトトップの下部にも検索ワードに反応する部分があります。これも、検索エンジンからアクセスがあると、使われたキーワードでサイト内検索をした結果を表示するようになっています。なので、手っ取り早くa-blog cmsのサイトで検証してみましょう！以下手順。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.a-blogcms.jp"&gt;a-blog cmsのサイト&lt;/a&gt;にアクセス&lt;/li&gt;
&lt;li&gt;前項でGoogleの検索URLを貼り付けた欄の横の&lt;strong&gt;spoof&lt;/strong&gt;をクリック&lt;/li&gt;
&lt;li&gt;サイトの下部を確認してみましょう！&lt;/li&gt;
&lt;/ol&gt;

				

				
			

				&lt;!-- 画像 --&gt;
				&lt;div class="column-image-center"&gt;
					&lt;a href="http://havelog.ayumusato.com/archives/002/201003/large-4b9637be76667.jpg" rel="highslide""&gt;
						&lt;img class="columnImage" src="http://havelog.ayumusato.com/archives/002/201003/4b9637be76667.jpg" alt="" width="580" height="171" /&gt;
					&lt;/a&gt;
				&lt;/div&gt;

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;p&gt;もちろんそんなキーワードのコンテンツはありませんでしたが、検索エンジンから飛んでるわけでもないのに、リファラーを操作してなりすますことができました。&lt;/p&gt;

&lt;p&gt;これで、LPO関連機能の検証もバッチリですね！a-blog cmsで本格的に使うのは、v1.3.0からになりそうですが、今のうちにゼヒ導入してみてください。お役立ちツールです。&lt;/p&gt;

				

				

				&lt;br class="clearHidden" /&gt;
			&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6J4HcxbBFEdGDj7T4LWUr7gEObc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6J4HcxbBFEdGDj7T4LWUr7gEObc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6J4HcxbBFEdGDj7T4LWUr7gEObc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6J4HcxbBFEdGDj7T4LWUr7gEObc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogayumusato/~4/jRMjnz0EQsA" height="1" width="1"/&gt;</description>
			<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">あほむ</dc:creator>
			<comments>http://havelog.ayumusato.com/computer/software/entry-80.html#comment</comments>
			<guid isPermaLink="true">http://havelog.ayumusato.com/computer/software/entry-80.html</guid>
			<pubDate>Tue, 09 Mar 2010 23:34:29 +0900</pubDate>
		</item>
		<item>
			<title>archivesの画像をData URIに変換</title>
			<link>http://havelog.ayumusato.com/ablogcms/customize/entry-81.html</link>
			<description>&lt;div class="newsTextBox"&gt;
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;HTTPリクエストを減らそう運動モジュール&lt;/h2&gt;

&lt;p&gt;HTTPリクエストを減らすための手段として、ちょっと着目していたのがData URI（データスキーム）という方法。Data URIは、画像や音声などの色々なファイルをbase64エンコードを通して文字列(URI)に変換する技術です。技術のある人が極まると、えらいことできるらしいですが、今回は画像ファイルとHTMLを一体化させるために使います。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ACMS_GET_Plugin_DataUri(仮)&lt;/strong&gt;&lt;/p&gt;

&lt;pre class="brush:php"&gt;
&lt;?php
require_once ACMS_LIB_DIR.'GET.php';

class ACMS_GET_Plugin_DataUri extends ACMS_GET
{
    function get()
    {
        // 変換対象を正規表現パターンで定義
        $regex  = '@&lt;img.*?src="(/'.DIR_OFFSET.ARCHIVES_DIR.'.*?|/'.DIR_OFFSET.THEMES_DIR.'.*?)"@';

        preg_match_all($regex, $this-&gt;tpl, $matches);

        if ( empty($matches[1]) ) return $this-&gt;tpl;

        foreach ( $matches[1] as $src ) {
            // 拡張子を取得
            $ext    = pathinfo($src, PATHINFO_EXTENSION);
            // ファイル取得後、base64エンコード
            $pair[$src]  = 'data:image/'.$ext.';base64,'.base64_encode(file_get_contents(DOCUMENT_ROOT.$src));
        }

        $pair   = array_unique($pair);
        $raw    = array_keys($pair);
        $data   = array_values($pair);

        //ズバっと置き換え
        $this-&gt;tpl  = str_replace($raw, $data, $this-&gt;tpl);

        return $this-&gt;tpl;
    }
}
?&gt;
&lt;/pre&gt;

&lt;p&gt;このソースコードを、&lt;strong&gt;DataUri.phpとして、/php/ACMS/GET/Plugin/内に配置&lt;/strong&gt;します。アップデートとかには一切対応しないワンタイムモジュールですが、興味のある方はどうぞ。&lt;/p&gt;

&lt;p&gt;今回は、%{ARCHIVES_DIR}{path}のような、archivesディレクトリからの参照が確実である画像ファイルパスを対象にして、いい加減に正規表現マッチングをしています。&lt;/p&gt;

&lt;h2&gt;画像のHTTPリクエストが減る&lt;/h2&gt;

&lt;p&gt;ウェブページを表示する中で、HTTP通信の時間的コストはかなり高いです。Data URIとして、画像がHTMLの中に文字列として混ざることで、HTTP通信のコストが減少します。細かいファイルをチマチマと個別で読み込むのは想像以上に読み込み時間を食い散らかしています。&lt;/p&gt;

&lt;p&gt;a-blog cmsの場合はHTMLと一緒に、キャッシュもバッチリされてしまいますが、そこまで大きな問題にはならないはず。&lt;strong&gt;サイトのページ数によってはDBのcacheテーブルの内容積がモリモリ増えてしまいそう&lt;/strong&gt;ですけど。DBの容量に自信がなかったり、サイトのページ数に自信がある場合は要注意です。&lt;/p&gt;

&lt;h2&gt;肝心の使い方は&lt;/h2&gt;

&lt;p&gt;以下、plainやvicuna等、index.htmlのテンプレート1枚で完結しているようなテーマを対象にした説明です。&lt;/p&gt;

&lt;p&gt;当ハブろぐの場合は、&lt;strong&gt;既存のindex.htmlをindex_raw.htmlにリネーム&lt;/strong&gt;し、&lt;strong&gt;新しいindex.htmlとして下記のようなテンプレートを作成&lt;/strong&gt;しました。&lt;/p&gt;

&lt;pre class="brush:html"&gt;
&lt;!-- BEGIN_MODULE Plugin_DataUri --&gt;
&lt;!--#include file="index_raw.html" --&gt;
&lt;!-- END_MODULE Plugin_DataUri --&gt;
&lt;/pre&gt;

&lt;p&gt;元のindex_raw.htmlの出力結果を、最後の最後でDataUriモジュールのフィルターにかけているという感じです。対象にできるimgパスがあれば、片っ端からData URIの文字列に置き換えていきます。&lt;/p&gt;

&lt;p&gt;変換された画像は下のようなコードに変換されます。下のコードは、サブカラムの鳥さんの写真の場合です。…連続の英数字なのでハミ出ますが気にしない。&lt;/p&gt;

&lt;pre class="brush:html"&gt;
&lt;img src="data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD//gA8Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gMTAwCv/bAEMAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/bAEMBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAH4AfgMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAA（以下略！）" width="126" height="126" alt="北端のとり" id="profileImg" /&gt;
&lt;/pre&gt;

&lt;h2&gt;IEには元のindex_raw.htmlを使います&lt;/h2&gt;

&lt;p&gt;IEは8以降でないとData URIを表示できません。よって、ルールを使ってUser AgentからInternet Explorerには、すべて元のテンプレートである、index_raw.htmlを直接表示するように設定します。8は対応してますけど、現状のルールにはそんな器用な項目はないので全部ナシです。&lt;/p&gt;

&lt;p&gt;そうそう滅多なことは起こらないと思いますが、なんかあったら教えてもらえると助かります。判定をもうちょっと賢くかけばもっと遊べそうですね。ちゃんと速くなるかなー？&lt;/p&gt;

				

				

				&lt;br class="clearHidden" /&gt;
			&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/V7o3pobuitKaUdAHa69AEM5mwqo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V7o3pobuitKaUdAHa69AEM5mwqo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/V7o3pobuitKaUdAHa69AEM5mwqo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/V7o3pobuitKaUdAHa69AEM5mwqo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogayumusato/~4/imFue6Xqtlg" height="1" width="1"/&gt;</description>
			<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">あほむ</dc:creator>
			<comments>http://havelog.ayumusato.com/ablogcms/customize/entry-81.html#comment</comments>
			<guid isPermaLink="true">http://havelog.ayumusato.com/ablogcms/customize/entry-81.html</guid>
			<pubDate>Tue, 09 Mar 2010 23:28:15 +0900</pubDate>
		</item>
		<item>
			<title>フォームIDのログ表示をもう少しデキる子にしよう</title>
			<link>http://havelog.ayumusato.com/ablogcms/customize/entry-79.html</link>
			<description>&lt;div class="newsTextBox"&gt;
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;フォームIDのログ表示が損してた&lt;/h2&gt;

&lt;p&gt;a-blog cmsのフォームは、投稿されたデータをDBに保存しているので、後からCSV形式としてダウンロードして集計等に再利用できます。そんな投稿データですが、管理ページ上からもログとして確認することができます。&lt;/p&gt;

				

				
			

				&lt;!-- 画像 --&gt;
				&lt;div class="column-image-left"&gt;
					&lt;a href="http://havelog.ayumusato.com/archives/002/201003/large-4b95ba0ea4601.jpg" rel="highslide""&gt;
						&lt;img class="columnImage" src="http://havelog.ayumusato.com/archives/002/201003/4b95ba0ea4601.jpg" alt="" width="300" height="205" /&gt;
					&lt;/a&gt;
				&lt;/div&gt;

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;p&gt;表示できるものは必要十分に備えているのですが、ちょっと大振りな感じすぎて肝心の投稿データの中身は読みづらい感じです。見栄えで損している感じですね。見せるものはあるのに、もったいないです。&lt;/p&gt;

				

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;じゃあ変えてみよう&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;/themes/system/admin/form/log.html&lt;/strong&gt;を編集します。40〜57行目の&lt;strong&gt;table.adminTable&lt;/strong&gt;を下のコードに貼り替えてみます。アップデート時に上書きされないようにする場合は、件のlog.htmlを、&lt;strong&gt;使用中のテーマ/admin/form/log.html&lt;/strong&gt;としてコピーして編集します。&lt;/p&gt;

&lt;pre class="brush:html"&gt;
&lt;table class="adminTable"&gt;
    &lt;thead&gt;
        &lt;tr&gt;
            &lt;th&gt;日時&lt;/th&gt;
            &lt;th&gt;宛先&lt;/th&gt;
            &lt;th&gt;件名 / 本文&lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;&lt;!-- BEGIN log:loop --&gt;
        &lt;tr&gt;
            &lt;td nowrap="nowrap"&gt;{datetime}[datetime(Y/m/d H:i)]&lt;/td&gt;
            &lt;td&gt;&lt;p&gt;宛先: &lt;a href="mailto:{mail_to}[raw]"&gt;{mail_to}&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
            &lt;td&gt;
                &lt;p&gt;件名: {mail_subject} ( &lt;a href="#" class="{datetime}[datetime(YmdHis)]-fade-head"&gt;本文を表示&lt;/a&gt; )&lt;/p&gt;
                &lt;p class="{datetime}[datetime(YmdHis)]-fade-body" style="border-top:1px solid silver;"&gt;本文:&lt;br /&gt;{mail_body}[nl2br]&lt;/p&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;&lt;!-- END log:loop --&gt;
&lt;/table&gt;
&lt;/pre&gt;

				

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;なんということでしょう&lt;/h2&gt;

				

				
			

				&lt;!-- 画像 --&gt;
				&lt;div class="column-image-left"&gt;
					&lt;a href="http://havelog.ayumusato.com/archives/002/201003/large-4b95ba0f1c9de.jpg" rel="highslide""&gt;
						&lt;img class="columnImage" src="http://havelog.ayumusato.com/archives/002/201003/4b95ba0f1c9de.jpg" alt="" width="300" height="211" /&gt;
					&lt;/a&gt;
				&lt;/div&gt;

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;p&gt;劇的ビフォーアフターとまではいきませんが、ちょっとはソレっぽい感じになったのではないでしょうか。宛先にメールアドレスのmailtoリンクも貼ってみました。&lt;/p&gt;

				

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;p&gt;送信時のテンプレートに、To[]でお問い合わせ主のメアドを仕込んで自動応答メール風にしている場合は、このフォームのログ画面からメーラーを起動して、お問い合わせ主に返信を書くこともできます。&lt;/p&gt;

&lt;p&gt;&lt;em&gt;「一般メール」をフォームからの送信者への自動応答メール&lt;/em&gt;に、&lt;em&gt;「管理者宛メール」をクライアント（orサイト管理者）への送信内容の通知&lt;/em&gt;、というように設定しておけば、クライアントに対しては「ここでお問い合わせを確認して、送信者に返信できます」とか言うこともできるかも。&lt;/p&gt;

&lt;p&gt;モノは言いようというヤツですね。もっとキレイに飾ってあげれば、もっとモノを言えるかもしれません。&lt;/p&gt;

				

				

				&lt;br class="clearHidden" /&gt;
			&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nebTnWaY3md2D6lpfX6jRwOF1hc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nebTnWaY3md2D6lpfX6jRwOF1hc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nebTnWaY3md2D6lpfX6jRwOF1hc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nebTnWaY3md2D6lpfX6jRwOF1hc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogayumusato/~4/Z_tEMW_JT14" height="1" width="1"/&gt;</description>
			<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">あほむ</dc:creator>
			<comments>http://havelog.ayumusato.com/ablogcms/customize/entry-79.html#comment</comments>
			<guid isPermaLink="true">http://havelog.ayumusato.com/ablogcms/customize/entry-79.html</guid>
			<pubDate>Tue, 09 Mar 2010 20:19:08 +0900</pubDate>
		</item>
		<item>
			<title>携帯向けGoogle Analyticsの計測異常(au, softbank)</title>
			<link>http://havelog.ayumusato.com/develop/entry-78.html</link>
			<description>&lt;div class="newsTextBox"&gt;
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;計測異常&lt;/h2&gt;

&lt;p&gt;今回は以下のエントリーのシリーズ編です。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://havelog.ayumusato.com/develop/entry-77.html"&gt;携帯電話向けGoogle Analyticsを導入&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://havelog.ayumusato.com/ablogcms/entry-76.html"&gt;携帯電話向けGAモジュール for a-blog cms&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;そいで、前エントリーあたりで言及していた計測異常について。&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;au&lt;/dt&gt;
&lt;dd&gt;直帰率が100%・新規セッションも100%・ページビューは1&lt;/dd&gt;

&lt;dt&gt;softbank&lt;/dt&gt;
&lt;dd&gt;見あたらない。(not set)とかいうのがソレっぽい&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;なーんかauとsoftbank取れてないなー。おかしいなーと思っていたら只の間違い探しでした。&lt;/p&gt;

&lt;h2&gt;ga.phpがお茶目すぎた&lt;/h2&gt;

&lt;p&gt;端末情報ちゃんと食ってるよねぇ〜？と、ga.phpの140-149行目を見てました。&lt;/p&gt;

&lt;pre class="brush:php"&gt;
    $guidHeader = $_SERVER["HTTP_X_DCMGUID"];
    if (empty($guidHeader)) {
      $guidHeader = $SERVER["HTTP_X_UP_SUBNO"]; // えっ？
    }
    if (empty($guidHeader)) {
      $guidHeader = $SERVER["HTTP_X_JPHONE_UID"]; // えっ？
    }
    if (empty($guidHeader)) {
      $guidHeader = $SERVER["HTTP_X_EM_UID"]; // えっ？
    }
&lt;/pre&gt;

&lt;p&gt;ん？&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;$SERVER&lt;/strong&gt;ってなんやねん。&lt;/p&gt;

&lt;pre class="brush:php"&gt;
    $guidHeader = $_SERVER["HTTP_X_DCMGUID"];
    if (empty($guidHeader)) {
      $guidHeader = $_SERVER["HTTP_X_UP_SUBNO"];
    }
    if (empty($guidHeader)) {
      $guidHeader = $_SERVER["HTTP_X_JPHONE_UID"];
    }
    if (empty($guidHeader)) {
      $guidHeader = $_SERVER["HTTP_X_EM_UID"];
    }
&lt;/pre&gt;

&lt;p&gt;こうでしょ！&lt;/p&gt;

&lt;p&gt;ってことで、たぶん解決。&lt;/p&gt;

&lt;h2&gt;どうしたGoogle！　大丈夫かGoogle！&lt;/h2&gt;

&lt;p&gt;ga.phpの140-149行目における、&lt;strong&gt;$SERVERになっているところを、$_SERVERに修正&lt;/strong&gt;してください。（アンダースコアが足りてない）&lt;/p&gt;

&lt;p&gt;これでたぶんdocomo以外の計測も正常に行われるようになるんじゃないでしょーか。きっと。おそらく。清々しいケアレスミスだけど、それが大公開されっぱなしって、Google先生ほどの大家になると誰も突っ込んでくれないのかな...。&lt;/p&gt;

&lt;p&gt;うまくいったよー、っていう人とかいたら教えてくださいまし。&lt;/p&gt;

				

				

				&lt;br class="clearHidden" /&gt;
			&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/q49lcrBhamLCfHCTbGHXDh-K-wI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q49lcrBhamLCfHCTbGHXDh-K-wI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/q49lcrBhamLCfHCTbGHXDh-K-wI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/q49lcrBhamLCfHCTbGHXDh-K-wI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogayumusato/~4/aojEmnhb8XY" height="1" width="1"/&gt;</description>
			<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">あほむ</dc:creator>
			<comments>http://havelog.ayumusato.com/develop/entry-78.html#comment</comments>
			<guid isPermaLink="true">http://havelog.ayumusato.com/develop/entry-78.html</guid>
			<pubDate>Fri, 05 Mar 2010 18:55:31 +0900</pubDate>
		</item>
		<item>
			<title>携帯電話向けGAモジュール for a-blog cms</title>
			<link>http://havelog.ayumusato.com/ablogcms/entry-76.html</link>
			<description>&lt;div class="newsTextBox"&gt;
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;携帯向けGoogle Analyticsとa-blog cms&lt;/h2&gt;

&lt;p&gt;Google Analytics全般とa-blog cmsの相性の良さは後日言及するとして、今回は携帯対応ということでa-blog cmsの&lt;strong&gt;ワンソースマルチユース&lt;/strong&gt;の特徴が特に生きてきます。&lt;/p&gt;

&lt;p&gt;同じURLでパソコンにも携帯にもiPhoneにもコンテンツを出力できるので、まとめてアクセス解析したときにも端末ごとの分析が容易になります。たとえば「PCで見られないこのコンテンツはiPhoneで多く見られてる」とか「携帯のときのトラフィックが特定エリアだけ高い」とかですね。&lt;/p&gt;

&lt;p&gt;もちろん、絶対数の埋め合わせとかの調整は必要ですし、PCとモバイル用サイトが同じような構成とも限らないので、単純比較というよりも傾向のあぶり出しになりそうですが。サイトによっては興味深いデータが得られるのではないでしょうか。&lt;/p&gt;

&lt;p&gt;今回はa-blog cmsでGoogle Analyticsの携帯電話向けトラッキングに対応するための、GETモジュール対応手順をまとめてみます。&lt;/p&gt;

&lt;h2&gt;GAの携帯電話向けサイト用PHPコードを出すまで&lt;/h2&gt;

				

				
			

				&lt;!-- 画像 --&gt;
				&lt;div class="column-image-center"&gt;
					&lt;a href="http://havelog.ayumusato.com/archives/002/201003/large-4b8fac1dd39d3.jpg" rel="highslide""&gt;
						&lt;img class="columnImage" src="http://havelog.ayumusato.com/archives/002/201003/4b8fac1dd39d3.jpg" alt="" width="300" height="233" /&gt;
					&lt;/a&gt;
				&lt;/div&gt;

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;p&gt;まずはここから。以下に手順を示します。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Google Analyticsのプロファイルを「&lt;strong&gt;編集&lt;/strong&gt;」をクリック&lt;/li&gt;
&lt;li&gt;画面右上の「&lt;strong&gt;ステータス確認&lt;/strong&gt;」をクリック&lt;/li&gt;
&lt;li&gt;トラッキングコードの追加手順の「&lt;strong&gt;アドバンス&lt;/strong&gt;｣タブを選択&lt;/li&gt;
&lt;li&gt;"(1) 何をトラッキングしますか？"の「&lt;strong&gt;携帯電話向けのサイト&lt;/strong&gt;」を選択&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;以上で、"(2) 携帯電話向けのサイトにコードを貼り付けます" にPHPのコードが表示されます。スクリーンショットで示している所の文字列を控えてください。これが、携帯電話向けのトラッキングアカウントです。コードの他の部分はモジュールのサンプルコードに書いてあるので必要ありません。（&lt;strong&gt;今後Google側で変更があれば、サンプルコードも変更する必要がありますが、そのときはそのときで&lt;/strong&gt;）&lt;/p&gt;

&lt;h2&gt;ga.phpをダウンロード&lt;/h2&gt;

&lt;p&gt;前項からの続きで、"(3) ファイルをルート ディレクトリにコピーします" から、ga.phpをダウンロードします。これをルートディレクトリに置くわけですが、a-blog cmsの設置先、&lt;strong&gt;index.phpと同階層のディレクトリにga.phpをアップロードします&lt;/strong&gt;。&lt;/p&gt;

&lt;h2&gt;トラッキングアカウントをコードに組み込む&lt;/h2&gt;

&lt;p&gt;下記のサンプルコードにトラッキングアカウントを埋め込み、&lt;strong&gt;/php/ACMS/GET/AnalyticsMobile.php&lt;/strong&gt;としてファイルを作成します。これが後でテンプレートに記述するGETモジュールになります。&lt;/p&gt;

&lt;pre class="brush:php"&gt;
&lt;?php
require_once ACMS_LIB_DIR.'GET.php';

class ACMS_GET_AnalyticsMobile extends ACMS_GET
{
    function get()
    {
        $Tpl    = new Template($this-&gt;tpl, new ACMS_Corrector());

        // 下記の " MO-0000000-0 " の所を前項で控えた文字列に書き換えます
        $GA_ACCOUNT = 'MO-0000000-0';
        $GA_PIXEL   = 'ga.php';

        $url    = "";
        $url   .= $GA_PIXEL . "?";
        $url   .= "utmac=" . $GA_ACCOUNT;
        $url   .= "&amp;utmn=" . rand(0, 0x7fffffff);

        $refer  = REFERER;
        $query  = $_SERVER["QUERY_STRING"];
        $path   = $_SERVER["REQUEST_URI"];

        if ( empty($refer) )
        {
        $refer  = "-";
        }

        $url   .= "&amp;utmr=" . urlencode($refer);

        if ( !empty($path) )
        {
        $url   .= "&amp;utmp=" . urlencode($path);
        }

        $url   .= "&amp;guid=ON";
        $url    =  str_replace("&amp;", "&amp;amp;", $url);

        $Tpl-&gt;add(null, array('tracksrc' =&gt; $url));

        return $Tpl-&gt;get();
    }
}
?&gt;

&lt;/pre&gt;

&lt;h2&gt;テンプレートにモジュールを書く&lt;/h2&gt;

&lt;p&gt;先ほど作成した AnalyticsMobileモジュールを、携帯向けのテンプレートに記述してください。大まかには下記のサンプルコードをコピー＆ペーストするだけで大丈夫なはずです。場所はbody要素の閉じタグの直前です&lt;/p&gt;

&lt;pre class="brush:html"&gt;
（前略）
&lt;!-- BEGIN_MODULE AnalyticsMobile --&gt;
&lt;img src="%{HTTP_ROOT}{tracksrc}[raw]" height="1" width="1" /&gt;
&lt;!-- END_MODULE AnalyticsMobile --&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;/pre&gt;

&lt;h2&gt;これでOK&lt;/h2&gt;

&lt;p&gt;あとは適当な日を置いて、Google Analyticsからレポートを確認しましょう。DoCoMoとかが解析結果にあれば大体成功です。&lt;/p&gt;

&lt;p&gt;携帯かどうかというのは、ユーザーのOSの情報として代替的に示されるので、ちゃんと絞り込まないと携帯の情報は取得できません。カスタムレポートやアドバンスセグメントを併用するのが良い感じですが、とっかかりとしては&lt;strong&gt;下記の記事のカスタムレポートをそのまま使うのが良さそう&lt;/strong&gt;です。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.kagua.biz/tips/mobile-customereport-ga.html"&gt;携帯用カスタムレポート for Google Analytics | カグア！Google Analytics 活用塾:事例や使い方&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;a-blog cms v1.3.0では、モバイルトラッキング用のアカウントと、ga.phpのパスを設定項目として、標準実装に滑りこませてしまおうかなーと勝手に検討中です。（他に影響があるような機能でもないので割と気軽）&lt;/p&gt;

&lt;p&gt;それまではひとまず、こちらのモジュールを使っていただければと思います！ご質問なりトラブルがあれば、&lt;a href="http://twitter.com/ahomu/"&gt;@ahomu&lt;/a&gt;までどうぞ☆&lt;/p&gt;

				

				

				&lt;br class="clearHidden" /&gt;
			&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zivfIKn448FfmSTYCshVolBA5e0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zivfIKn448FfmSTYCshVolBA5e0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zivfIKn448FfmSTYCshVolBA5e0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zivfIKn448FfmSTYCshVolBA5e0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogayumusato/~4/GzQA6yFj9Lc" height="1" width="1"/&gt;</description>
			<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">あほむ</dc:creator>
			<comments>http://havelog.ayumusato.com/ablogcms/entry-76.html#comment</comments>
			<guid isPermaLink="true">http://havelog.ayumusato.com/ablogcms/entry-76.html</guid>
			<pubDate>Fri, 05 Mar 2010 14:05:39 +0900</pubDate>
		</item>
		<item>
			<title>携帯電話向けGoogle Analyticsを導入</title>
			<link>http://havelog.ayumusato.com/develop/entry-77.html</link>
			<description>&lt;div class="newsTextBox"&gt;
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;携帯電話とったどー&lt;/h2&gt;

				

				
			

				&lt;!-- 画像 --&gt;
				&lt;div class="column-image-left"&gt;
					&lt;a href="http://havelog.ayumusato.com/archives/002/201003/large-4b8fa11a462bc.jpg" rel="highslide""&gt;
						&lt;img class="columnImage" src="http://havelog.ayumusato.com/archives/002/201003/4b8fa11a462bc.jpg" alt="" width="280" height="194" /&gt;
					&lt;/a&gt;
				&lt;/div&gt;

				
			

				&lt;!-- 画像 --&gt;
				&lt;div class="column-image-left"&gt;
					&lt;a href="http://havelog.ayumusato.com/archives/002/201003/large-4b8fa11a671fe.jpg" rel="highslide""&gt;
						&lt;img class="columnImage" src="http://havelog.ayumusato.com/archives/002/201003/4b8fa11a671fe.jpg" alt="" width="280" height="205" /&gt;
					&lt;/a&gt;
				&lt;/div&gt;

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;p&gt;昨年の後半発表された、Google Analyticsの日本の携帯電話対応。絵文字のユニコード化といい、なぜかGoogleは日本のガラパゴス技術にも積極的な取り組みを見せてくれています。&lt;/p&gt;

&lt;p&gt;今回、それを使って携帯電話のアクセスがなんとなく取れました。なんとなく取れたのでメモ。&lt;/p&gt;

&lt;p&gt;でもスクリーンショットを見ると分かるとおり、Softbankっぽいキャリアが見あたりません。単純にいないだけなのか、取得できていないのか謎なので、もうちょっと調べる必要がありそうです。&lt;/p&gt;

&lt;p&gt;=&gt; 解決編追記@&lt;a href="http://havelog.ayumusato.com/develop/entry-78.html"&gt;携帯向けGoogle Analyticsの計測異常(au, softbank)&lt;/a&gt;&lt;/p&gt;

				

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;携帯電話向けのGoogle Analyticsトラッキング&lt;/h2&gt;

&lt;p&gt;通常のGoogle Analyticsはga.jsを挿入することで、ユーザーがブラウザを開いたときにJavascriptが起動して、Googleにアクセス情報を送信します。&lt;/p&gt;

&lt;p&gt;しかし、日本の携帯電話のほとんどは依然としてブラウジング時にJavascriptが使えないため、同じようなアクセス解析はできません。そこで携帯電話向けのGoogle Analyticsは以下のような、一見して回りくどいプロセスでトラッキングを行います。&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;(1)アクセス情報を飛ばすPHPファイル(ga.php)を設置&lt;/dt&gt;
&lt;dd&gt;Google Analyticsから&lt;strong&gt;ga.phpをダウンロードしてきて、公開ディレクトリのルートに配置&lt;/strong&gt;します。これが、Googleにアクセス情報を飛ばす処理の本体です。&lt;/dd&gt;

&lt;dt&gt;(2)ユーザーアクセス時に、(1)のPHPを起動するための下準備&lt;/dt&gt;
&lt;dd&gt;HTMLファイルの先頭に&lt;strong&gt;トラッキングURLを生成する関数&lt;/strong&gt;を記述。bodyタグの終了直前に、&lt;strong&gt;src属性が前述の関数が出すURLになっているimgタグ&lt;/strong&gt;を記述。&lt;/dd&gt;

&lt;dt&gt;(3)ユーザーからのアクセスによってga.phpが起動&lt;/dt&gt;
&lt;dd&gt;ユーザーがページにアクセスすると、ページ下端に仕込まれたimgタグが読み込まれます。imgタグのsrc属性がga.phpにアクセスするようなURLになっているため、&lt;strong&gt;ブラウザは画像を求めてga.phpにアクセスします&lt;/strong&gt;。アクセス情報はsrcにあるURLのGETクエリーとして乗っています。&lt;/dd&gt;

&lt;dt&gt;(4)ユーザーにダミー画像を Googleにはアクセス情報を&lt;/dt&gt;
&lt;dd&gt;アクセスされたga.phpは、ユーザーには1x1ピクセルのダミー画像を返し、&lt;strong&gt;GoogleにはGETクエリーに乗ってきたアクセス情報を送ります&lt;/strong&gt;。&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;普通にphpなどのプログラムを貼る必要があるため、慣れない人やHTMLオンリーな人は戸惑いを感じるかもしれません。とはいえやってること自体はコピペ天国です。&lt;/p&gt;

&lt;h2&gt;ナマのHTML+PHPなら大体こんな感じ&lt;/h2&gt;

&lt;pre class="brush:php"&gt;
&lt;?php
  // Copyright 2009 Google Inc. All Rights Reserved.
  $GA_ACCOUNT = "MO-0000000-0";
  $GA_PIXEL = "/ga.php";

  function googleAnalyticsGetImageUrl() {
    global $GA_ACCOUNT, $GA_PIXEL;
    $url = "";
    $url .= $GA_PIXEL . "?";
    $url .= "utmac=" . $GA_ACCOUNT;
    $url .= "&amp;utmn=" . rand(0, 0x7fffffff);
    $referer = $_SERVER["HTTP_REFERER"];
    $query = $_SERVER["QUERY_STRING"];
    $path = $_SERVER["REQUEST_URI"];
    if (empty($referer)) {
      $referer = "-";
    }
    $url .= "&amp;utmr=" . urlencode($referer);
    if (!empty($path)) {
      $url .= "&amp;utmp=" . urlencode($path);
    }
    $url .= "&amp;guid=ON";
    return str_replace("&amp;", "&amp;", $url);
  }
?&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;タイトるんるん♪&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;まことにもうしわけありません&lt;/h1&gt;
&lt;p&gt;ろれむいぷさむらりるれろ ろれむいぷさむらりるれろ ろれむいぷさむらりるれろ ろれむいぷさむらりるれろ ろれむいぷさむらりるれろ&lt;/p&gt;
&lt;?php
  $googleAnalyticsImageUrl = googleAnalyticsGetImageUrl();
?&gt;
&lt;img src="&lt;?= $googleAnalyticsImageUrl ?&gt;" /&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;/pre&gt;

&lt;p&gt;拡張子htmlのまま動かしたい場合は、.htaccessに下の記述を加えればいいです。&lt;/p&gt;

&lt;pre class="brush:html"&gt;
AddType application/x-httpd-php .html
&lt;/pre&gt;

&lt;p&gt;携帯向けサイトを作る機会がある方はぜひ。カスタムレポートとかちゃんと設定すれば、Google AnalyticsひとつでコンテンツへのPC版等と比較しながら検討できて便利です。サービスが分散しないのはいいこと。&lt;/p&gt;

&lt;p&gt;a-blog cmsはテンプレート上でphpが使えないので、GETモジュールにしてあげる必要があります。次回、そのGETモジュールをまるまる公開予定です。&lt;/p&gt;

				

				

				&lt;br class="clearHidden" /&gt;
			&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TtOX93L0Kwp_lKLczo1QbHZNGwk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TtOX93L0Kwp_lKLczo1QbHZNGwk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TtOX93L0Kwp_lKLczo1QbHZNGwk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TtOX93L0Kwp_lKLczo1QbHZNGwk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogayumusato/~4/Uw1LPcadjUM" height="1" width="1"/&gt;</description>
			<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">あほむ</dc:creator>
			<comments>http://havelog.ayumusato.com/develop/entry-77.html#comment</comments>
			<guid isPermaLink="true">http://havelog.ayumusato.com/develop/entry-77.html</guid>
			<pubDate>Thu, 04 Mar 2010 23:16:28 +0900</pubDate>
		</item>
		<item>
			<title>OAuthについて（OpenIDとは違うのだよ）</title>
			<link>http://havelog.ayumusato.com/develop/php/entry-75.html</link>
			<description>&lt;div class="newsTextBox"&gt;
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;OAuth&lt;/h2&gt;

&lt;p&gt;OpenIDが、&lt;strong&gt;あなたは本人ですか？ねぇほんと？ねぇ？&lt;/strong&gt;的な身元証明の技術であるのに対して、OAuthは&lt;strong&gt;この人に合い鍵渡していい？ねぇ？ほんとにいいの？&lt;/strong&gt;的な私財へのアクセス許可の技術です。&lt;/p&gt;

&lt;p&gt;現在、Twitterの他にもYahooやGoogleのAPIもOAuth認証に対応しています。FlickrもOAuthのベースになってるような認証だった気がするけど、今はどうなんでしょうね。&lt;/p&gt;

&lt;p&gt;とりあえずベーシック認証よりは、よっぽどセキュアというわけですが、詳しいメリットや成り立ちなどは、下の参考URLでもご覧くださいまし。&lt;/p&gt;

&lt;p&gt;参考：&lt;a href="http://www.atmarkit.co.jp/fsecurity/special/106oauth/oauth01.html"&gt;APIアクセス権を委譲するプロトコル、OAuthを知る − ＠IT&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;そのプロセス&lt;/h2&gt;

&lt;dl&gt;
&lt;dt&gt;コンシューマー登録&lt;/dt&gt;
&lt;dd&gt;アパートの管理人（&lt;strong&gt;サービスプロバイダ&lt;/strong&gt; ex.Twitter）に、合い鍵収集業者（&lt;strong&gt;コンシューマー&lt;/strong&gt;）として登録し、業者ID ( &lt;strong&gt;コンシューマーキー&lt;/strong&gt;と&lt;strong&gt;コンシューマーシークレット&lt;/strong&gt; ) を得ます。&lt;/dd&gt;

&lt;dt&gt;リクエストトークンの請求&lt;/dt&gt;
&lt;dd&gt;アパートの住人（&lt;strong&gt;ユーザー&lt;/strong&gt; ex.Twitterユーザー）に、合い鍵くれとリクエストを送ります。その際、業者IDをユーザーに渡して、OKなら業者IDを管理人に渡してくれ、と頼みます。&lt;/dd&gt;

&lt;dt&gt;ユーザーの認否&lt;/dt&gt;
&lt;dd&gt;ユーザーは管理人のとこに行って、この業者に合い鍵を渡すかどうかを判断します。（Twitterとの連携サービスとかをやると、良く出てくるアレです。許可・不許可の。）&lt;/dd&gt;

&lt;dt&gt;リクエストトークンの発行&lt;/dt&gt;
&lt;dd&gt;ユーザーがOKを出してくれると、合い鍵業者は、管理人に合い鍵を請求するための委任状（&lt;strong&gt;リクエストトークン&lt;/strong&gt;）をもらえます。&lt;/dd&gt;

&lt;dt&gt;アクセストークンの入手&lt;/dt&gt;
&lt;dd&gt;委任状を手に入れた合い鍵業者は、それを携えて管理人に、そのユーザーの合い鍵（&lt;strong&gt;アクセストークン&lt;/strong&gt;）をもらいに行って、それを受け取ります。&lt;/dd&gt;

&lt;dt&gt;合い鍵が変わったら？&lt;/dt&gt;
&lt;dd&gt;合い鍵はたまに変わってしまうかもしれません。そのとき、合い鍵業者は委任状と前の鍵を持って、もう一度管理人に会いに行きます。委任状が今でも有効なら、新しい合い鍵を受け取れます。すでに無効なら、それは住人が、あなたとの縁を切ったということです。&lt;/dd&gt;
&lt;/dl&gt;

&lt;h2&gt;逆にわかりづらい？&lt;/h2&gt;

&lt;p&gt;抽象化したら逆に分かりづらい気がする。そうでもないか？まあ、そんな感じでトカゲのしっぽを切れる程度の便利認証でござる。一晩だけの関係とかでもいいわけですよ。合い鍵業者とか訳の分からないことを言わずに、&lt;strong&gt;夜這い業者&lt;/strong&gt;と訳した方が良かったか。&lt;/p&gt;

&lt;p&gt;前エントリーで述べたような、HTTPリクエストの実装よりは、よっぽどハマりポイントはありません。仕様に従って作れば一通り問題ありませんでした。&lt;strong&gt;OAuthで重要なのは、その意義（使い所）とプロセスを理解することです。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;RFC3986の形式でちゃんとエンコードしないとダメとか、そういうのはありますが、コンシューマー側を作る分には、そこまで大変ではありません。サービスプロバイダー側を実装するのは結構面倒くさそうな...。&lt;/p&gt;

				

				

				&lt;br class="clearHidden" /&gt;
			&lt;/div&gt;
			&lt;p class="continueBtn"&gt;&lt;a href="http://havelog.ayumusato.com/develop/php/entry-75.html"&gt;「OAuthについて（OpenIDとは違うのだよ）」の続きを読む&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CBK9WG2390SLVvrWVKGWbpv0S4A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CBK9WG2390SLVvrWVKGWbpv0S4A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CBK9WG2390SLVvrWVKGWbpv0S4A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CBK9WG2390SLVvrWVKGWbpv0S4A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogayumusato/~4/3ba1FY-GXzs" height="1" width="1"/&gt;</description>
			<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">あほむ</dc:creator>
			<comments>http://havelog.ayumusato.com/develop/php/entry-75.html#comment</comments>
			<guid isPermaLink="true">http://havelog.ayumusato.com/develop/php/entry-75.html</guid>
			<pubDate>Fri, 19 Feb 2010 00:34:45 +0900</pubDate>
		</item>
		<item>
			<title>HTTPリクエストするためのクラス書いてみた</title>
			<link>http://havelog.ayumusato.com/develop/php/entry-74.html</link>
			<description>&lt;div class="newsTextBox"&gt;
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;HTTPリクエスト再び&lt;/h2&gt;

&lt;p&gt;Twitter API用のライブラリがどうとか言いながら、全然公開してませんな。&lt;/p&gt;

&lt;p&gt;スピンアウト品による、HTTPリクエストについてメモしとくです。この後にOAuthかな。そしてTwitter, Flickr, Google, YahooあたりのAPIと遊ぶ方法とか。一通り試した後なので、暇を見つけながら、内容をまとめて自分メモ的にブログ書くつもり。a-blog cmsと連携したTwitter BOTぐらいはちゃんと作って公開すっか。&lt;/p&gt;

&lt;h2&gt;APIを叩く用に&lt;/h2&gt;

&lt;pre class="brush:php"&gt;
&lt;?php
$http = new SimpleHttp();

$http-&gt;get('http://havelog.ayumusato.com');

$res = $http-&gt;header;
$body = $http-&gt;body;

if ( !($http-&gt;error) ) {
     return true;
} else {
     return false;
}
?&gt;
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;GET！POST！で適当にリクエスト投げれて、レスポンスヘッダーもレスポンスボディも、一通り取ってこれるようにしたかった&lt;/strong&gt;のです。API相手しか考えてないので、POSTメソッドもクエリーのやり取りしか考えられてません。&lt;/p&gt;

&lt;p&gt;file_get_contentsとかだとレスポンスコード200以外のときのレスポンスボディを端折りやがるので、ソケット接続から始めてリクエストを書き込んで受け取って、と地味な作業を繰り返してます。地味ですけど、HTTPの仕様の勉強になります。裏でこういうやり取りされてたんですね。&lt;/p&gt;

&lt;p&gt;ハードウェアやソフトウェアの深淵を見るには、文系の自分には叶いません。でも、たまーに少し深いところを垣間見ると、なんとなく、&lt;strong&gt;してやったり&lt;/strong&gt;という気分になれます。ああ現金。&lt;/p&gt;

&lt;h2&gt;覚え書きリスト&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;リクエスト時の改行コードはCR+LFで鉄板くさい&lt;/li&gt;
&lt;li&gt;末尾の改行コードが足りないとシカトされることすらある&lt;/li&gt;
&lt;li&gt;ステータスコード204と304はレスポンスボディがない（仕様的に）&lt;/li&gt;
&lt;li&gt;HTTP1.1のchunkedデータは、送ってきたり送ってこなかったりする&lt;/li&gt;
&lt;li&gt;chunked受け取りたくなかったら1.0としてリクエスト&lt;/li&gt;
&lt;li&gt;phpのparse_url関数はステキ（regex書き終わった頃に教えてもらった）&lt;/li&gt;
&lt;li&gt;httpsはssl://に変換して、portも合わせて変える&lt;/li&gt;
&lt;/ul&gt;

				

				

				&lt;br class="clearHidden" /&gt;
			&lt;/div&gt;
			&lt;p class="continueBtn"&gt;&lt;a href="http://havelog.ayumusato.com/develop/php/entry-74.html"&gt;「HTTPリクエストするためのクラス書いてみた」の続きを読む&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/G5cR8WngunXLwqOs3IQiUZ-V2ws/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G5cR8WngunXLwqOs3IQiUZ-V2ws/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/G5cR8WngunXLwqOs3IQiUZ-V2ws/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/G5cR8WngunXLwqOs3IQiUZ-V2ws/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogayumusato/~4/77OFAEaRIbI" height="1" width="1"/&gt;</description>
			<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">あほむ</dc:creator>
			<comments>http://havelog.ayumusato.com/develop/php/entry-74.html#comment</comments>
			<guid isPermaLink="true">http://havelog.ayumusato.com/develop/php/entry-74.html</guid>
			<pubDate>Thu, 18 Feb 2010 01:35:14 +0900</pubDate>
		</item>
		<item>
			<title>間違った女子力を発揮するバレンタイン</title>
			<link>http://havelog.ayumusato.com/misc/entry-73.html</link>
			<description>&lt;div class="newsTextBox"&gt;
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;チョコをつくった&lt;/h2&gt;

				

				
			

				&lt;!-- 画像 --&gt;
				&lt;div class="column-image-left"&gt;
					&lt;a href="http://havelog.ayumusato.com/archives/002/201002/large-4b76aec4ae89c.jpg" rel="highslide""&gt;
						&lt;img class="columnImage" src="http://havelog.ayumusato.com/archives/002/201002/4b76aec4ae89c.jpg" alt="" width="210" height="280" /&gt;
					&lt;/a&gt;
				&lt;/div&gt;

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;p&gt;ドライフルーツとナッツ類を、適当なビターブレンド気味チョコと混ぜ合わせてコロコロして固めて粉まぶして。写真暗いですけど、実物の断面はもうちょっとキュートな感じだったと主張させていただく。&lt;/p&gt;

&lt;p&gt;チョコを作るのはいいんですけど、余るんですよね。無塩バターが。&lt;strong&gt;普段料理しないのに、バターだけが大量に取り残される。&lt;/strong&gt;きっと全国で同じような境遇の無塩バターが、そこらじゅうに溢れていると思う。そして消費されきれないまま忘れ去られていく....。ちょっと切ない感じ。&lt;/p&gt;

				

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;h2&gt;だから使ったよ！&lt;/h2&gt;

				

				
			

				&lt;!-- 画像 --&gt;
				&lt;div class="column-image-left"&gt;
					&lt;a href="http://havelog.ayumusato.com/archives/002/201002/large-4b76aec5b073f.jpg" rel="highslide""&gt;
						&lt;img class="columnImage" src="http://havelog.ayumusato.com/archives/002/201002/4b76aec5b073f.jpg" alt="" width="210" height="280" /&gt;
					&lt;/a&gt;
					&lt;p class="caption"&gt;かんせいひーん&lt;/p&gt;
				&lt;/div&gt;

				
			

				&lt;!-- 画像 --&gt;
				&lt;div class="column-image-left"&gt;
					&lt;a href="http://havelog.ayumusato.com/archives/002/201002/large-4b76af27890ee.jpg" rel="highslide""&gt;
						&lt;img class="columnImage" src="http://havelog.ayumusato.com/archives/002/201002/4b76af27890ee.jpg" alt="" width="150" height="200" /&gt;
					&lt;/a&gt;
					&lt;p class="caption"&gt;こねこねこね&lt;/p&gt;
				&lt;/div&gt;

				
			

				&lt;!-- 画像 --&gt;
				&lt;div class="column-image-left"&gt;
					&lt;a href="http://havelog.ayumusato.com/archives/002/201002/large-4b76af2876396.jpg" rel="highslide""&gt;
						&lt;img class="columnImage" src="http://havelog.ayumusato.com/archives/002/201002/4b76af2876396.jpg" alt="" width="150" height="200" /&gt;
					&lt;/a&gt;
					&lt;p class="caption"&gt;ぷっはー&lt;/p&gt;
				&lt;/div&gt;

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;p&gt;&lt;strong&gt;少しでもバターを消費するべく、追加でスイートポテトを製造。&lt;/strong&gt;酒を飲みながら材料を潰し混ぜ合わせて、ぐりぐりぐりぐりぐりぐりぐりぐりぐりぐり。それでも余るんですけどね。&lt;/p&gt;

&lt;h2&gt;ラッピングもした&lt;/h2&gt;

				

				
			

				&lt;!-- 画像 --&gt;
				&lt;div class="column-image-left"&gt;
					&lt;a href="http://havelog.ayumusato.com/archives/002/201002/large-4b76aec8a6166.jpg" rel="highslide""&gt;
						&lt;img class="columnImage" src="http://havelog.ayumusato.com/archives/002/201002/4b76aec8a6166.jpg" alt="" width="210" height="280" /&gt;
					&lt;/a&gt;
				&lt;/div&gt;

				
			

				&lt;!-- 画像 --&gt;
				&lt;div class="column-image-left"&gt;
					&lt;a href="http://havelog.ayumusato.com/archives/002/201002/large-4b76aec9a0ebe.jpg" rel="highslide""&gt;
						&lt;img class="columnImage" src="http://havelog.ayumusato.com/archives/002/201002/4b76aec9a0ebe.jpg" alt="" width="210" height="280" /&gt;
					&lt;/a&gt;
				&lt;/div&gt;

				
			
				&lt;!-- テキスト --&gt;
				
				&lt;p&gt;用意してたラッピング容器に入り切らなくなったので、途中で東急ハンズに個包装を買い出しにでかけて。やっぱりバレンタインコーナーがすごい人混み。みんな大変だ。&lt;/p&gt;

&lt;p&gt;別に今回が初めてなわけでもなく、この時期にバレンタインコーナーに乗り込んで材料やラッピングを買うぐらい、何てことはありません。&lt;strong&gt;挙動不審になることすらなく、堂々とラッピングを選ぶ自分がキモイ。その場にいること自体が不審だし。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;あとは個包装をまとめ直して用意しましたとさー。さて、来年はどうするかな。毎年バリエーションを変えていかないと...。&lt;/p&gt;

				

				

				&lt;br class="clearHidden" /&gt;
			&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bnyeU2myXFwHx1_ATJO3vX1f1Wc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bnyeU2myXFwHx1_ATJO3vX1f1Wc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bnyeU2myXFwHx1_ATJO3vX1f1Wc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bnyeU2myXFwHx1_ATJO3vX1f1Wc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/blogayumusato/~4/2YTxOofOZL0" height="1" width="1"/&gt;</description>
			<dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">あほむ</dc:creator>
			<comments>http://havelog.ayumusato.com/misc/entry-73.html#comment</comments>
			<guid isPermaLink="true">http://havelog.ayumusato.com/misc/entry-73.html</guid>
			<pubDate>Sat, 13 Feb 2010 22:56:55 +0900</pubDate>
		</item>
	</channel>
</rss>
