<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>cloudrop &#187; WordPress</title>
	<atom:link href="http://cloudrop.jp/tag/wordpress/feed" rel="self" type="application/rss+xml" />
	<link>http://cloudrop.jp</link>
	<description>クラウド使ったインターネットサービスの技術支援、ウェブサービスの開発</description>
	<lastBuildDate>Wed, 25 Aug 2010 15:49:43 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/tag/wordpress/feed" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/>		<item>
		<title>WordPressをPubSubHubbubに対応させてTwitterへリアルタイムで通知されるようにした</title>
		<link>http://cloudrop.jp/wordpress/pubsubhubbub_twitter?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=pubsubhubbub_twitter</link>
		<comments>http://cloudrop.jp/wordpress/pubsubhubbub_twitter#comments</comments>
		<pubDate>Mon, 14 Sep 2009 04:57:51 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[FriendFeed]]></category>
		<category><![CDATA[PubSubHubbub]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=176</guid>
		<description><![CDATA[ブログの更新をTwitterへ通知するのにFriendFeedを利用しているのですが、FriendFeedのクローラ―がフィードを取得しにくるまでTwitterへは通知されず、ひどい時は1日経っても通知されないことがあり [...]]]></description>
			<content:encoded><![CDATA[<p>ブログの更新をTwitterへ通知するのに<a href="http://friendfeed.com/">FriendFeed</a>を利用しているのですが、FriendFeedのクローラ―がフィードを取得しにくるまでTwitterへは通知されず、ひどい時は1日経っても通知されないことがありました。</p>
<p>これを解消するために、最近Googleによって開発・公開された新しいプロトコル<a href="http://code.google.com/p/pubsubhubbub/">PubSubHubbub</a>に対応させました。</p>
<div class="toc">
<ol>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-pubsubhubbub">PubSubHubbubとは</a></li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-wordpress">WordPressで対応するには</a></li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-pubsubhubbub1">PubSubHubbubの実力</a></li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-pubsubhubbub2">その他のPubSubHubbub対応サービス</a>
<ol>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-google-reader">Google Reader</a></li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-livedoor-reader">livedoor Reader</a></li>
</ol>
</li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-pubsubhubbub3">わかりにくいPubSubHubbub</a></li>
<li><a href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter#toc-">参考サイト</a></li>
</ol>
</div>
<h3 id="toc-pubsubhubbub">PubSubHubbubとは</h3>
<p>PubSubHubbubは、今までの配信者（Publishers。以下、ブログ）と購読者（Subscribers。以下、RSSリーダー）が直接やり取りをしていたその間に、ハブ（Hubs）と呼ばれる中間サーバーを配置して、そのハブを介してメッセージのやり取りをWeb Hooksの仕組みで行うものです。<br />
Web Hooksはある決められたアクション（たとえば、「ブログの公開ボタンを押す」など）をきっかけに動作して、決められたデータを決められたURLに決められた方法で送信する仕組みです。</p>
<p>いままで「更新されました？」「いや、まだです。」と304の繰り返しだったフィードの世界に、「更新したしました」きっかけで、購読者に一斉に通知が行くわけですから、こんなエコな仕組みはないと思います。</p>
<h3 id="toc-wordpress">WordPressで対応するには</h3>
<p>簡単です。プラグインを入れるだけです。<br />
現在PubSubHubbubに対応させるためのプラグインは2つ出ていて、どちらも最新の2.8.4に対応していますし、機能的には同じですので好みで導入しましょう。</p>
<ul>
<li><a href="http://wordpress.org/extend/plugins/pubsubhubbub/">PubSubHubbub</a></li>
<li><a href="http://wordpress.org/extend/plugins/wp-pubsubhubbub/">WP Pubsubhubbub</a></li>
</ul>
<p>ハブのURLを登録するだけの簡単な設定画面で、しかもすでに2つのハブが登録されているので特に設定することはありません。</p>
<p>プラグインを有効にすると、出力されたAtomに<br />
&lt;atom:link rel=&quot;hub&quot; href=&quot;http://pubsubhubbub.appspot.com&quot;/&gt;<br />
&lt;atom:link rel=&quot;hub&quot; href=&quot;http://superfeedr.com/hubbub&quot;/&gt;<br />
とハブへのリンクが追加されます。</p>
<p>ここから以下の流れで更新の通知がされるようになります。</p>
<ol>
<li>この新しいフィードを取得したPubSubHubbubに対応したRSSリーダーがハブへのリンクを読み取って、ハブに購読の依頼を行います。</li>
<li>ハブは本当にRSSリーダーが依頼してきたのか確認します。確認ができたら次回の更新から通知するように動作します。</li>
<li>WordPressで新しく記事が公開されたタイミングで、プラグインがハブに対して公開の通知を送信します。</li>
<li>ハブは本当に記事が公開されたのか確認します。確認ができたら購読の依頼があったRSSリーダーへ通知を行います。</li>
</ol>
<h3 id="toc-pubsubhubbub1">PubSubHubbubの実力</h3>
<p>実際に前回の投稿がどのようになったかを追ってみました。</p>
<p>まず投稿後、ハブからチェックがきます（apacheのログ）。</p>
<pre class="terminal">
64.233.172.18 - - [12/Sep/2009:18:42:23 +0900] "GET /feed HTTP/1.1" 200 14246 "-" "AppEngine-Google; (+http://code.google.com/appengine; appid pubsubhubbub)"
</pre>
<p>ハブの<a href="http://pubsubhubbub.appspot.com/publish">デバッグツール</a>でハブにどのように登録されているか確認してみると、</p>
<p><a href="http://cloudrop.jp/wp-content/uploads/2009/09/push_gae.png"><img src="http://cloudrop.jp/wp-content/uploads/2009/09/push_gae-300x165.png" alt="ハブのデバッグツールのキャプチャ" title="push_gae" width="300" height="165" class="aligncenter size-medium wp-image-232" /></a></p>
<p>無事登録されているようです。（クリックで拡大）</p>
<p>ではFriendFeedの方はというと、</p>
<p><img src="http://cloudrop.jp/wp-content/uploads/2009/09/push_friendfeed.png" alt="FriendFeedのキャプチャ" title="FriendFeedのキャプチャ" width="530" height="80" class="aligncenter size-full wp-image-236" /></p>
<p>WordPressの投稿ボタンを押して、登録が終わってから一拍おいてすぐ画面に現れたくらいの感覚です。</p>
<p>さて、本題のTwitterは</p>
<p><img src="http://cloudrop.jp/wp-content/uploads/2009/09/push_twitter.png" alt="Twitterのキャプチャ" title="Twitterのキャプチャ" width="530" height="79" class="aligncenter size-full wp-image-235" /></p>
<p>素晴らしい！画面の更新タイミングに影響していますがが、ほぼリアルタイム。</p>
<h3 id="toc-pubsubhubbub2">その他のPubSubHubbub対応サービス</h3>
<p>FriendFeed以外にも、<a href="http://jp.techcrunch.com/archives/20090805google-reader-speeds-up-sharing-with-pubsubhubbub/">Google Reader</a>や<a href="http://jp.techcrunch.com/archives/20090819google-continues-to-feed-the-pubsubhubbub-google-alerts-now-in-real-time/">Google Alerts</a>、<a href="http://www.itmedia.co.jp/news/articles/0908/18/news090.html">livedoor Reader</a>などが対応していて、確認できるGoogle Readerとlivedoor Readerでも確認してみました。</p>
<h4 id="toc-google-reader">Google Reader</h4>
<p>PubSubHubbubへの対応という記事は共有機能からということだったので、対応していないかもしれないと思ったんですが、</p>
<p><a href="http://cloudrop.jp/wp-content/uploads/2009/09/push_gr.png"><img src="http://cloudrop.jp/wp-content/uploads/2009/09/push_gr-300x61.png" alt="Google Readerのキャプチャ" title="Google Readerのキャプチャ" width="300" height="61" class="aligncenter size-medium wp-image-230" /></a></p>
<p>時差なしできっちり更新に上がってきました。（クリックで拡大）</p>
<h4 id="toc-livedoor-reader">livedoor Reader</h4>
<p>こちらは更新がされず…。</p>
<p><img src="http://cloudrop.jp/wp-content/uploads/2009/09/push_ldr.png" alt="ライブドアリーダーのキャプチャ" title="ライブドアリーダーのキャプチャ" width="258" height="352" class="aligncenter size-full wp-image-231" /></p>
<p>PubSubHubbub対応後にlivedoor Readerのクローラが来ていることは確認しているので、腑に落ちないところです。</p>
<blockquote><p>(※ 最初の更新でLDRがそのブログのpubsubhubbub対応を検出し，次の更新から更新情報を受けるようになるので，二回目の更新から反映が最速になります。)<br />
<a href="http://blog.livedoor.jp/nabokov7/archives/904777.html">PubSubHubbub で最速に更新を通知しつつ，舌をかまないためのテスト ： nabokov7; rehash &#8211; livedoor Blog</a>
</p></blockquote>
<p>ということなので、この更新から反映されるようになるかもしれません。<br />
今回は確認できず。</p>
<blockquote><p><strong>2009/9/15 追記</strong><br />
やはりlivedoor Readerではすぐに更新されませんでした。<br />
時間が経ってからの更新だとクロールによる更新なのか、ハブからの通知によるものなのか判断できないので、やはり確認できず。<br />
livedoor Readerでちゃんとリアルタイムで更新されてるというパブリッシャーはいらっしゃるんでしょうか。livedoor Blog以外で。<br />
ざっと調べてみたところ実践している方はいらっしゃいましたが、やはりリアルタイムでの更新は確認できていないようです。</p>
<ul>
<li><a href="http://blog.nomadscafe.jp/2009/08/pubsubhubbub.html">昨日のPubSubHubbub記事がどのように反映されたか &#8211; blog.nomadscafe.jp</a></li>
</ul>
</blockquote>
<h3 id="toc-pubsubhubbub3">わかりにくいPubSubHubbub</h3>
<p>読み方の話ではなく。<br />
複数の要素が絡まっているため、仕様が明らかとは言え、ブログ側からするとハブやRSSリーダーの挙動がわからず、更新が通知されない場合に理由がわかりにくい側面があります。</p>
<p>例えば、ハブへ購読依頼をするRSSリーダーが、エントリーが更新されているかどうかにかかわらず、フィード内にハブへのリンクを検出したらハブへ購読依頼をする仕様なのか（FriendFeedはこちらのようです）、エントリーが更新されたタイミングで検出・通知する仕様なのか（livedoor Readerはこちらのようです）、などです。</p>
<p>FriendFeedは前者のようなので、PubSubHubbub対応を行った後に、1度フィードを手動で読み込ませれば次のポストから反映されるはずです。</p>
<p><a href="http://cloudrop.jp/wp-content/uploads/2009/09/friendfeed_update.png"><img src="http://cloudrop.jp/wp-content/uploads/2009/09/friendfeed_update-300x119.png" alt="FriendFeedでフィードの手動取得" title="FriendFeedでフィードの手動取得" width="300" height="119" class="aligncenter size-medium wp-image-250" /></a>
<div style="text-align:center;margin-bottom:15px;">設定→サービス 追加/編集→マイサービスのリンクをクリック→Blogを更新（クリックで拡大）</div>
<p>まだまだ新しい仕組みなので、確立されるまでもう少し時間がかかるかもしれませんが、多くのサービスが対応してさらに便利になることを望みます。</p>
<h3 id="toc-">参考サイト</h3>
<p>FriendFeed→Twitterの詳しい説明が載っています。</p>
<ul>
<li><a href="http://www.ideaxidea.com/archives/2009/06/twitter_via_friendfeed.html">ブログの更新情報は『Friendfeed』で流すことにした &#8211; IDEA*IDEA ～ 百式管理人のライフハックブログ</a></li>
</ul>
<p>PubSubHubbubに関する参考サイト</p>
<ul>
<li><a href="http://code.google.com/p/pubsubhubbub/">pubsubhubbub &#8211;  Project Hosting on Google Code</a></li>
<li><a href="http://labs.unoh.net/2009/08/what-is-pubsubhubbub.html">ウノウラボ Unoh Labs: PubSubHubbubとは</a></li>
<li><a href="http://d.hatena.ne.jp/snaka72/20090902/1251916771">自宅でPubsubhubbubのPub,Sub,Hub一式を動かしてみた &#8211; 今日もスミマセン。</a></li>
<li><a href="http://www.ryo.com/2009/09/04/991/">PubSubHubBubのpubに対応する : ryo.com</a></li
</ul>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/wordpress/pubsubhubbub_twitter/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/wordpress/pubsubhubbub_twitter" />
	</item>
		<item>
		<title>WordPressのコメントをOpenIDに対応した</title>
		<link>http://cloudrop.jp/wordpress/corresponded_to_openid?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=corresponded_to_openid</link>
		<comments>http://cloudrop.jp/wordpress/corresponded_to_openid#comments</comments>
		<pubDate>Mon, 07 Sep 2009 06:09:26 +0000</pubDate>
		<dc:creator>sekine</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[OpenID]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP5.3]]></category>

		<guid isPermaLink="false">http://cloudrop.jp/?p=90</guid>
		<description><![CDATA[WordPressのコメントをOpenID対応にしました。
導入目的はコメント書き込みの敷居をいかに下げるかです。
目次


2系→3系の変更点
設定
カスタマイズ
PHP5.3.0でハマった


2系→3系の変更点
m [...]]]></description>
			<content:encoded><![CDATA[<p>WordPressのコメントをOpenID対応にしました。<br />
導入目的はコメント書き込みの敷居をいかに下げるかです。</p>
<p><strong>目次</strong>
<div class="toc">
<ol>
<li><a href="http://cloudrop.jp/wordpress/corresponded_to_openid#toc-23">2系→3系の変更点</a></li>
<li><a href="http://cloudrop.jp/wordpress/corresponded_to_openid#toc-">設定</a></li>
<li><a href="http://cloudrop.jp/wordpress/corresponded_to_openid#toc-1">カスタマイズ</a></li>
<li><a href="http://cloudrop.jp/wordpress/corresponded_to_openid#toc-php5-3-0">PHP5.3.0でハマった</a></li>
</ol>
</div>
<h3 id="toc-23">2系→3系の変更点</h3>
<p><a href="http://ms76.jp/2008/08/22/mixi_openid_for_wordpress/" target="_blank">mixi OpenIDをWordPressで利用する方法 </a>でも紹介しましたが、「WP-OpenID」プラグインが2系から3系に上がり、名称も「OpenID」プラグインになり、コメントフォームに含めるOpenIDのフィールド名が変わりました。</p>
<p>WP-OpenIDプラグイン 2系<br />
<code>&lt;input type="text" name="<strong>openid_url</strong>" id="openid_url" /&gt;</code></p>
<p>OpenIDプラグイン 3系<br />
<code>&lt;input type="text" name="<strong>openid_identifier</strong>" id="openid_identifier" /&gt;</code></p>
<h3 id="toc-">設定</h3>
<p>設定は、敷居を下げる目的なので、<br />
「Don&#8217;t require name and e-mail for comments left with verified OpenIDs」をチェックします。<br />
OpenIDプロバイダーになるつもりはないので「OpenID Provider Options」のチェックは全てはずしておきます。</p>
<h3 id="toc-1">カスタマイズ</h3>
<p>標準ではドーンとOpenID（URL）を入力するフォームを用意するだけの簡素なものなので、あらかじめ主要なOpenIDプロバイダーへのログインボタンを用意したものへとカスタマイズしました。</p>
<p><a href="http://cloudrop.jp/wp-content/uploads/2009/09/openid_comment.png"><img src="http://cloudrop.jp/wp-content/uploads/2009/09/openid_comment-300x170.png" alt="コメント欄キャプチャ" title="コメント欄キャプチャ" width="300" height="170" class="aligncenter size-medium wp-image-110" /><br />
</a></p>
<p>OpenID認証を利用した場合は、名前とメールアドレスの入力を省くことができる設定にしたので、既存のコメントフォームにOpenIDを入力するフォームだけ追加してもユーザビリティーが悪くなります。</p>
<p>対応策として、「通常のコメントフォーム」と「OpenID対応コメントフォーム」を用意して、デフォルトはOpenID対応、クリックによって通常とOpenID対応がtoggleする仕様にしました。</p>
<p>各(X)HTMLにclassとidを付けます。</p>
<ul>
<li>OpenID対応のコメントフォーム（form）にid=&#8221;openid_commentform&#8221;を設定</li>
<li>OpenID対応のコメント欄（textarea）にid=&#8221;openid_comment&#8221;を設定</li>
<li>各OpenIDプロバイダーの画像にclass=&#8221;openid_submit&#8221;、それぞれ個別にidを付ける</li>
<li>toggleのスイッチになるリンクにid=&#8221;comment_toggle&#8221;を設定</li>
</ul>
<p>javascript(jQuery)を追加します。</p>
<pre class="terminal">
jQuery(document).ready(function(){

    jQuery(&quot;.openid_submit&quot;).click(function(){
        if(jQuery('#openid_comment').val() == ''){
            alert('コメントを入力してください。');
            return false;
        }
        var openid_target= jQuery(this).attr('id');
        var openid_url = '';
        if(openid_target == 'mixi'){
                openid_url = 'https://mixi.jp/';
        }else if(openid_target == 'google'){
                openid_url = 'https://www.google.com/accounts/o8/id';
        }else if(openid_target == 'yahoo'){
                openid_url = 'http://yahoo.co.jp/';
        }else if(openid_target == 'livedoor'){
                openid_url = 'http://livedoor.com/';
        }else if(openid_target == 'hatena'){
                var hatena_id = window.prompt(&quot;はてなIDを入力して下さい。&quot;,&quot;&quot;);
                if(hatena_id == null) return false;
                openid_url = 'http://www.hatena.ne.jp/'+hatena_id+'/';
        }else if(openid_target == 'other'){
                var open_id = window.prompt(&quot;OpenID（URL）を入力して下さい。&quot;,&quot;&quot;);
                if(open_id == null) return false;
                openid_url = open_id;
        }

        if(openid_url == ''){
            alert('不正なOpenIDです。');
            return false;
        }

        jQuery('#openid_identifier').val(openid_url);
        return true;
    });
    jQuery(&quot;.openid_submit&quot;).mouseover(function(){
        jQuery(this).css('border-color','#e6db55 #dfcd2a #dfcd2a #e6db55');
    });
    jQuery(&quot;.openid_submit&quot;).mouseout(function(){
        jQuery(this).css('border-color','#CCCCCC #AAAAAA #AAAAAA #CCCCCC');
    });

    jQuery(&quot;#commentform&quot;).hide();
    jQuery(&quot;#comment_toggle&quot;).toggle(
            function(){
                jQuery(&quot;#openid_commentform&quot;).hide();
                jQuery(&quot;#commentform&quot;).show();
                jQuery('#comment_toggle').text(&quot;OpenID認証のコメント欄に切り換え&quot;);
            },
            function(){
                jQuery(&quot;#commentform&quot;).hide();
                jQuery(&quot;#openid_commentform&quot;).show();
                jQuery('#comment_toggle').text(&quot;通常のコメント欄に切り換え&quot;);
            }
    );
});
</pre>
<h3 id="toc-php5-3-0">PHP5.3.0でハマった</h3>
<p>このサーバーではWordPressをPHP5.3.0で動かしています。<br />
OpenIDプラグインは<a href="http://openidenabled.com/php-openid/" target="_blank">PHP OpenID Library</a>を内包していて、OpenIDにかかわる実装はこのライブラリに依存していますが、これが5.3.0に対応していないため、素のままでは動きません。</p>
<p>問題の解説と解決方法はこちらのブログが詳細ですので、ご覧ください。<br />
<a href="http://d.hatena.ne.jp/sotarok/20090826/1251312215" target="_blank"> PHP 5.3： 参照渡しの関数/メソッドを定義してた人は call_user_func_array に注意 &#8211; 肉とご飯と甘いもの @ sotarok</a></p>
<p>PHP OpenID Libraryのオフィシャルでも5.2.4までしかテストしてないよと言っているので仕方ないところです。<br />
修正箇所が3箇所なので、パッチを作成しました。パスを変えれば、PHP OpenID Libraryのパッチとしても動くはずです。<br />
<a href='http://cloudrop.jp/wp-content/uploads/2009/09/wordpress-openid-3.2.3-cloudrop-090907.patch.tar.gz'>wordpress-openid-3.2.3-cloudrop-090907.patch.tar.gz</a></p>
<p>それから、<a href="http://d.hatena.ne.jp/sotarok/" target="_blank">id:sotarok</a>さんが触れられている時とドキュメントが変わってましたので、触れておきます。</p>
<p><a href="http://www.php.net/manual/ja/migration53.incompatible.php" target="_blank">下位互換性のない変更点</a></p>
<p>旧ドキュメント</p>
<blockquote><p>引数を参照渡しする関数に値を渡した場合の振る舞いが変更されました。 以前は値渡しとして引数を受け取っていましたが、5.3.x からは warning が生成され、 全ての参照渡しのパラメーターが NULL となります。 </p></blockquote>
<p>現在のドキュメント</p>
<blockquote><p>
引数を参照渡しする関数に値を渡した場合の振る舞いが変更されました。 以前は値渡しとして引数を受け取っていましたが、今は fatal error が発生するようになりました。 参照渡しを期待している関数に定数やリテラルを渡していたコードは、 いったんその値を変数に代入してから関数に渡すよう書き換える必要があります。</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://cloudrop.jp/wordpress/corresponded_to_openid/feed</wfw:commentRss>
		<slash:comments>25</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://cloudrop.jp/wordpress/corresponded_to_openid" />
	</item>
	</channel>
</rss>
