<?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/"
	>

<channel>
	<title>Blog &#8211; My Favorites</title>
	<atom:link href="https://blog.iwh12.jp/tag/blog/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.iwh12.jp</link>
	<description>writing when I feel like it. since 2017</description>
	<lastBuildDate>Wed, 17 May 2017 16:59:41 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.9</generator>
	<item>
		<title>サイトをリニューアル！</title>
		<link>https://blog.iwh12.jp/2017/05/17/%e3%82%b5%e3%82%a4%e3%83%88%e3%82%92%e3%83%aa%e3%83%8b%e3%83%a5%e3%83%bc%e3%82%a2%e3%83%ab%ef%bc%81/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Wed, 17 May 2017 00:58:31 +0000</pubDate>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[Blog]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=1858</guid>

					<description><![CDATA[今年1月後半から復活したBLOG。そろそろデザインにも飽きてきたのでテーマを検索したところ、面白そうなのを発見！リニューアルした。ついでにテーマのfunctions.phpやcssへ直書きしていた変更・追加分は子テーマ化]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/renew1705.jpg" alt="サイトをリニューアル！" width="100%" class="alignnone size-full wp-image-1859" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/renew1705.jpg 1024w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/renew1705-300x226.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/renew1705-768x579.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/renew1705-30x23.jpg 30w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/renew1705-663x500.jpg 663w" sizes="(max-width: 1024px) 100vw, 1024px" /><br />
今年1月後半から復活したBLOG。そろそろデザインにも飽きてきたのでテーマを検索したところ、面白そうなのを発見！リニューアルした。ついでにテーマのfunctions.phpやcssへ直書きしていた変更・追加分は子テーマ化へ…。<span id="more-1858"></span></p>
<p>今回使ったテーマは「<a href="https://themegrill.com/themes/envince/" target="_blank" class="external ext_icon">Envince</a>」。管理画面、外観/テーマの検索で普通に見つかるものだ。Proバージョンは$69だが、こちらはフリーで使用可能。</p>
<p>選んだ理由として、前のテーマ「twentyseventeen」は、レスポンシブとは言えBootstrapではなく手を入れ辛かったので、今回はBootstrap対応のものを。次にこのTopページを見ればお分かりだと思うが、少し変わったレイアウト編集機能を持つものにした。この手の機能は有料テーマでは一般化しているものの、購入する前に（自作するコストより明らかに安い）少し試して見たかった…と言うのが本音だ。</p>
<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/edit_layout.jpg" alt="Envinceのレイアウト編集画面" width="100%" class="alignnone size-full wp-image-1860" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/edit_layout.jpg 842w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/edit_layout-300x183.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/edit_layout-768x468.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/edit_layout-30x18.jpg 30w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/05/edit_layout-821x500.jpg 821w" sizes="(max-width: 842px) 100vw, 842px" /></p>
<p>これがTopページのレイアウト編集画面。固定ページを一枚作り、そこへご覧にWidgetを配置していく感じとなる。投稿一覧だけだと単に日付順に数枚並ぶだけだが、これならカテゴリやタグ、そしてBLOGには無いものさえも意図的に配置できる。少しMagazine風にしてみたが如何だろうか！？</p>
<p>テーマを変更するにあたって最大の問題は、functions.phpに直書きしたshare用のショートコード。metaタグを触る関係でheader.phpにも入っているのでたちが悪い（笑）小テーマのルールに基づき少し変更し無事移植完了。これでテーマの更新があっても上書きされる事もなく、他のテーマにも簡単に引越しできる。</p>
<p>このテーマ、結構気に入っているのだがBUGが一点。ソーシャルメニューをヘッダーもしくはフッターに配置すると、一定の幅以下になった時、右に余白が入る。cssが悪いようだが、直すのは面倒なので使わないことで回避（笑）</p>
<p>仕様として惜しいのは、Widget名の色。テーマ標準とカテゴリ毎でしか設定することができない。タグや別件などはそのままだと標準の色になってしまうのだ。これに関してはcssでダイレクトに色指定することで対応した。</p>
<p>手を入れ易くなったので、このテーマが何日持つかは不明…。そう言えば、<a href="http://collabo.iwh12.jp" target="_blank" class="external ext_icon">複数WordPress一本化サイト</a>も、4つの合体に加えデザインも少し触ったので興味があれば是非！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPress 4.7のREST APIを使った記事閲覧プログラム、Post数無制限版</title>
		<link>https://blog.iwh12.jp/2017/02/28/wordpress-4-7%e3%81%aerest-api%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e8%a8%98%e4%ba%8b%e9%96%b2%e8%a6%a7%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%80%81post%e6%95%b0%e7%84%a1%e5%88%b6%e9%99%90/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Tue, 28 Feb 2017 12:44:37 +0000</pubDate>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Program]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=769</guid>

					<description><![CDATA[少し前に掲載した「WordPress 4.7のREST APIを使った記事閲覧プログラム」は、簡易版ということもあり、記事数は最大100件まで。これはREST APIの最大100件/回の制限からきたものだ。このBLOGだ]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp_post_list_unlimited_ver.jpg" alt="wp_post_list_unlimited" width="100%" class="alignnone size-full wp-image-782" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp_post_list_unlimited_ver.jpg 991w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp_post_list_unlimited_ver-300x238.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp_post_list_unlimited_ver-768x609.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp_post_list_unlimited_ver-30x24.jpg 30w" sizes="(max-width: 991px) 100vw, 991px" /><br />
少し前に掲載した「<a href="https://blog.iwh12.jp/2017/02/14/wordpress-4-7%e3%81%aerest-api%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e8%a8%98%e4%ba%8b%e9%96%b2%e8%a6%a7/">WordPress 4.7のREST APIを使った記事閲覧プログラム</a>」は、簡易版ということもあり、記事数は最大100件まで。これはREST APIの最大100件/回の制限からきたものだ。このBLOGだとまだ40件にも満たないので100件超えは数カ月後になるが、記事数無制限版に改良した。<span id="more-769"></span></p>
<p>ポイントはper_pageパラメータnの時に、何ページ分の記事があるかを知る方法と（＝ajaxを実行する回数）、非同期でajaxを使う場合、Callbackの中でしか値を参照できず、ページ分ループし得た値をマージするにはちょっとしたコツが必要となる（同期でajaxを使う場合は普通のループで問題無い）。</p>
<p>主要部分のコードは以下の通り。キーは、レスポンスヘッダにあるX-WP-TotalPagesと、ファンクションの再帰呼出し（recursive call）。</p>
<p></p><pre class="crayon-plain-tag">var posts_per_page = 10;
var url_base = 'http://blog.iwh12.jp/wp-json/wp/v2';
var url_posts = url_base + '/posts?per_page=' + posts_per_page;

// get Posts
function getPosts() {
    var posts_all = [];
    var max = 0;

    getPages(0);

    // get n page until max
    function getPages(n) {
        $.ajax({
            type: 'get',
            url: url_posts + '&amp;page=' + (n + 1),
            dataType: 'json'
        })
        .done(function(data, textStatus, jqXHR) {
            Array.prototype.push.apply(posts_all, data);
            if (max == 0)
                max = parseInt(jqXHR.getResponseHeader('X-WP-TotalPages'));
            if (n + 1 == max)
                setDataTables(posts_all);
            else
                getPages(n + 1);
        });
    }
}</pre><p> </p>
<p>コードから分かるように、全てのデータをマージするため、Callback内でgetPages()をページ数だけ再帰呼出ししている。また初めの一回目にレスポンスヘッダから最大ページ数を保存、その値と、カレントのページ数を比較して、同じになるまで配列のマージを繰り返し、同じになったらDataTablesに値をセットして戻る…といった感じだ。これで記事数が100件超えてもいくらでも読み込める（最大何件まで行けるかは不明）。</p>
<p>ただ以前のコードは、そもそもWPがJSONを組み立てるのが遅く（ショートコードやfunctions.phpも展開するため）、それを解決するのにcrontabへcurlを仕込み、ファイルでのやり取りをしていたが、この手が使えなくなってしまった。最初に全件ロードするのでそれなりに時間がかかるものの、一旦ロードすれば、後はオンメモリなので、動作は非常に速く快適に操作可能だ。</p>
<p>こうしてpostに関しては無制限になったが、category（子category未対応）とtagは最大100件のまま。これに引っかかることはあまり無いと思われるので省略した（同じ方法で対応は可能）。</p>
<p>改良版の記事閲覧プログラムは<a href="https://blog.iwh12.jp/test/wp_posts_list_unlimited.html" target="_blank">こちら</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Node.js+Express+EJSとWordPress REST APIでViewを再構築する実験</title>
		<link>https://blog.iwh12.jp/2017/02/26/node-jsexpressejs%e3%81%a8wordpress-rest-api%e3%81%a7view%e3%82%92%e5%86%8d%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b%e5%ae%9f%e9%a8%93/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Sun, 26 Feb 2017 00:22:12 +0000</pubDate>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Program]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=728</guid>

					<description><![CDATA[少し前に「WordPress 4.7のREST APIを使った記事閲覧プログラム」を掲載したが、これはクライアント側（ブラウザ）のみでの実験。今度はサーバー側にNode.jsを使ってBLOGのViewを再構築することに…]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/nodejs.jpg" alt="Node.js+Express+EJS" width="100%" class="alignnone size-full wp-image-729" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/nodejs.jpg 1024w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/nodejs-300x200.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/nodejs-768x511.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/nodejs-30x20.jpg 30w" sizes="(max-width: 1024px) 100vw, 1024px" /><br />
少し前に「<a href="https://blog.iwh12.jp/2017/02/14/wordpress-4-7%e3%81%aerest-api%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e8%a8%98%e4%ba%8b%e9%96%b2%e8%a6%a7/">WordPress 4.7のREST APIを使った記事閲覧プログラム</a>」を掲載したが、これはクライアント側（ブラウザ）のみでの実験。今度はサーバー側にNode.jsを使ってBLOGのViewを再構築することに…。<span id="more-728"></span></p>
<p>これまでNode.jsはメッセージング系で少し触ったことがあるものの、Webサーバー、つまりApacheの替わりとしては使ったことがなかったので、WordPress 4.7のREST APIがある程度分かったついでに実験したくなった（笑）。</p>
<p>但し、管理画面も実装するならともかく、Viewだけだとクライアント側のみで出来るので、わざわざサーバー側でやることもなく、あくまでも遊びだ。</p>
<h3>全体の概要</h3>
<p>Node.jsの開発環境はググるといろいろ出てくるので省略。当初はWindowsのBashを使用したものの、WindowsからBashへのファイルのやり取りが面倒（逆はOK）だったので<sup>*追記あり</sup>、後半はmacOSへ移行した。どちらも<a href="https://github.com/hokaccha/nodebrew" target="_blank" class="external ext_icon">nodebrew</a>を使えば簡単に環境を構築できる。</p>
<p>npmでインストールしたモジュールは以下の通り。</p>
<ul style="padding-left: 1em;">
<li><a href="http://expressjs.com/ja/" target="_blank" class="external ext_icon">express</a></li>
<li><a href="https://github.com/mde/ejs" target="_blank" class="external ext_icon">ejs</a></li>
<li>http</li>
<li>compression</li>
<li>memory-cache</li>
<li>lru-cache</li>
</ul>
<p>最後の3つは軽くパフォーマンスアップするもので無くても作動する。またサイトがhttpsの場合は、http（http.get）モジュールではなくhttpsモジュール（https.get）を使用する。</p>
<p>ここにコードを載せても載りきらないので要点はこんな感じだ。</p>
<ul style="padding-left: 1em;">
<li>Expressでのルーティング<br />
app.get(&#8216;/&#8217; &#8230;<br />
app.get(&#8216;/page/:pages&#8217; &#8230;<br />
app.get(&#8216;/tag/:tags/page/:pages&#8217; &#8230;<br />
app.get(&#8216;/category/:categories/page/:pages&#8217; &#8230;<br />
app.get(&#8216;/post/:postId&#8217; &#8230;<br />
※例えば/pageといった、1ページだけのルーティングは省略<br />&nbsp;
</li>
<li>各ルーティングで必要なデータをREST APIで得る<br />&nbsp;</li>
<li>
一覧表示の各内容は、content.renderedにimgなどタグも含めそのまま入っているので、&lt;!&minus;&minus;more&minus;&minus;&gt;までで切り出す<br />&nbsp;
</li>
<li>
paginateで必要な最大件数/最大ページ数はJSONにはなく、レスポンスヘッダのX-WP-TotalとX-WP-TotalPagesに入っているので、例えばhttp.get(url, (d)とすると、d.rawHeaders[]のn番目に先の文字列があり、n+1が欲しい値となる<br />&nbsp;
</li>
<li>REST APIで得たデータを加工してテンプレートejsへ渡す<br />
index.ejs（他の一覧も兼ねる）<br />
post.ejs
</ul>
<p>テンプレートはこの2本だけだが、実際はヘッダー、サイドバー、フッターなどを別ejsにしてincludeするよくあるパターン。htmlのフレームワークはお馴染み<a href="http://getbootstrap.com/" target="_blank" class="external ext_icon">Bootstrap</a>だ。</p>
<h3>API仕様の気になる点</h3>
<p>プログラム自体は簡単だが、実際に動かして思ったのは、純粋に一覧だけ（title、date、categories、tags、featured_media程度のみ）得るAPIが無いため、何をするにしてもpostsでデータを得る必要がり、JSONのデータ量と、それを作るときのサーバー側の負荷（ショートコードやfunctions.phpの内容も展開する）が結構かかる。</p>
<p>加えてサムネイル画像を一覧に出そうとすると_embedオプションを付けなければならず、更にデータ量が増す。ここのように遅いサーバーだとその差は体感ではっきりわかるほどだ。</p>
<p>本家はたまたまアイキャッチ画像（featured_media）を使わず、記事の頭に大き目の画像を入れてあるので、これには引っかからなかったが、一般的には重い処理となるだろう。</p>
<p>本家にあって、こちらに無いのは「前後記事へのリンク」と「Archivesの年月一覧」。今の<a href="https://developer.wordpress.org/rest-api/reference/posts/" target="_blank" class="external ext_icon">API仕様</a>ではどうみても全件データを引っ張って解析しない限りこの2つには対応できないように思う。</p>
<h3>一部クライアント側でレンダリング</h3>
<p>一点手抜き（？）したのは、サイドバーの各一覧。これはサーバー側ではなく、クライアント側で書いている。もともとウィジェットを置く場所なのでこれもありかなと…。</p>
<p>ちょっとアクロバティックなのはPopular Posts。これは<a href="https://ja.wordpress.org/plugins/wordpress-popular-posts/" target="_blank" class="external ext_icon">WordPress Popular Posts</a>がウィジェットとして表示しているもので、実体はadmin-ajax.php?action=wpp_get_popularを呼ぶとリストのhtmlが戻ってくる形になっている。ただそのまま呼ぶとクロスドメイン制約で値を得られない。</p>
<p>そこで同じサーバー内にあるのを利用して、curlを使い一定間隔でそのhtmlをファイルへ保存、参照する形にしている。</p>
<p>これで無事表示は出来るのだがリンク先は本家。実験サイトではないため、このままだとあまり意味がない。また本家のURLはタイトルベース、実験サイトはIDベースなので、ドメインの部分だけ置換しても作動しない。</p>
<p>「うーん」と思っていたところ、表示するサムネイル画像のファイル名にIDが入っていることが分かり、それを使って実験サイトへのURLになるよう書き換えた（笑）</p>
<h3>雑感</h3>
<p>仕上げはサーバーへの設置だ。Proxyを設定するのが面倒なので、iptablesでポート3000を開けそのまま外に出している。この時、スクリプトをデーモン化する必要があり、<a href="https://github.com/foreverjs/forever" target="_blank" class="external ext_icon">forever</a> -w start app.jsで起動。無事、外からアクセスできるようになった。</p>
<p>一式やってみた感想は、当初Node.jsの話を聞いたとき、既にいろいろあるのに何故今更JSと思ったが、サーバー側もクライアント側も全てJSで書け分かり易い上にデバックもし易く、これはありだ。</p>
<p>またテンプレートエンジンのEJSは、htmlそのまま&lt;% %&gt;の中だけJSの世界となりとっつき易い。つまり普段、LAMPを使っていれば、ベースの部分は何も学ぶ必要がなく、各モジュールの仕様だけ理解すれば（しかもJS）即扱える。これはなかなか楽しいかも知れない。</p>
<p>Node.js+Express+EJSで再構築したBLOGのViewは<a href="https://blog.iwh12.jp:3000" target="_blank" class="external ext_icon">こちら</a>。</p>
<h3>追記</h3>
<p>「WindowsからBashへのファイルのやり取りが面倒」と書いたが、/mnt/c/Users/にWindowsのファイルシステムがマウントされているので、ここならどちらからでも普通にアクセスできる。</p>
<p>更にVisual Studio Codeの総合ターミナルをBashに変更すればかなりGoodな環境となる。</p>
<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/vsc_on_bash.jpg" alt="Visual Studio Codeの統合ターミナル" width="100%" class="alignnone size-full wp-image-761" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/vsc_on_bash.jpg 1016w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/vsc_on_bash-300x233.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/vsc_on_bash-768x596.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/vsc_on_bash-30x23.jpg 30w" sizes="(max-width: 1016px) 100vw, 1016px" /><br />
Visual Studio Codeの総合ターミナルでBashが作動中</p>
<p>方法はメニューのファイル/設定/基本設定/ユーザー設定で、</p><pre class="crayon-plain-tag">{
&quot;terminal.integrated.shell.windows&quot;: &quot;C:\\Windows\\sysnative\\bash.exe&quot;,
&quot;termnial.integrated.shell.unixlike&quot;: &quot;bash.exe&quot;
}</pre><p>これを追加すればOK。もちろんviやnode app.jsもこの中でそのまま作動！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPressのAMPプラグインを使って特定の記事のみAMPを無効にする</title>
		<link>https://blog.iwh12.jp/2017/02/18/wordpress%e3%81%aeamp%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e7%89%b9%e5%ae%9a%e3%81%ae%e8%a8%98%e4%ba%8b%e3%81%ae%e3%81%bfamp%e3%82%92%e7%84%a1%e5%8a%b9/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Sat, 18 Feb 2017 11:21:52 +0000</pubDate>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Program]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=622</guid>

					<description><![CDATA[Search Consoleを見るとAMP関連で何やらエラーが出ている。記事はこれ。単にInstagramを張り付けて少しコメントを入れただけのもの。エラー内容はImageObjectに値が無い…っと言われても。 Ins]]></description>
										<content:encoded><![CDATA[<p><article class="shortcode_share"><figure><a href="https://ikisakianco.com/wordpress-disable-amp-with-plugin" target="_blank" class="external"><img src="" alt="image" class="share_pict" border="0" width="100%" /></a></figure></article>Search Consoleを見るとAMP関連で何やらエラーが出ている。記事は<a href="https://blog.iwh12.jp/2017/01/12/遂に♪/">これ</a>。単にInstagramを張り付けて少しコメントを入れただけのもの。エラー内容はImageObjectに値が無い…っと言われても。<span id="more-622"></span></p>
<p>Instagramを張り付けた時、ImageObjectを付加しないよう、エラーを根本的に修正するにはAMPプラグインの内部を触らないとできないため＝無理（笑）。この記事だけAMPを除外する必要がある。いろいろググったところ発見！</p>
<p>記事編集画面で個別にAMPをON/OFFできるので非常に便利。コードをそのままfunctions.phpにコピペして、問題無く作動している。感謝♪</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPress 4.7のREST APIを使った記事閲覧プログラム</title>
		<link>https://blog.iwh12.jp/2017/02/14/wordpress-4-7%e3%81%aerest-api%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e8%a8%98%e4%ba%8b%e9%96%b2%e8%a6%a7/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Tue, 14 Feb 2017 02:00:25 +0000</pubDate>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Program]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=517</guid>

					<description><![CDATA[昨日「もう少し本格的なのを作ってみるかな…。」と書いたので、少し実用的（？）なものを作ってみた。APIから得たJSONをJQuery DataTablesへセット、記事の一覧、検索、表示ができるように…。 一覧は画面キャ]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp_post_list.jpg" alt="wp_post_list.html" width="100%" class="alignnone size-full wp-image-518" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp_post_list.jpg 1024w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp_post_list-300x172.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp_post_list-768x441.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp_post_list-30x17.jpg 30w" sizes="(max-width: 1024px) 100vw, 1024px" /><br />
昨日「もう少し本格的なのを作ってみるかな…。」と<a href="https://blog.iwh12.jp/2017/02/13/wordpress-4-7のrest-api/">書いた</a>ので、少し実用的（？）なものを作ってみた。APIから得たJSONをJQuery <a href="https://datatables.net/" target="_blank" class="external ext_icon">DataTables</a>へセット、記事の一覧、検索、表示ができるように…。<span id="more-517"></span></p>
<p>一覧は画面キャプチャから分かるように、Id|Date|Title|Category|Tagsが並び、選ぶと下にcssのcolumnsを使った三段組のViewが表示される。こうしたのは出来るだけスクロールして読みたくなかったから。妙な部分で切れるケースもあるが、実験的な意味合いなので気にしないことにする。</p>
<p>検索は、一覧の項目内容に加え、実際のContentの内容も対象になっている。これはDataTablesにデータを渡しているが、 { data: &#8220;content&#8221;, visible: false }と、非表示にしているので一覧では見えないだけだ。</p>
<p>ContentをDataTablesへセットする時の肝は、JSONで得られるContentはhtmlがそのまま入っているので、imgがあった場合（srcset=も含む）、テーブルロード時に、imgデータも一緒にGETしに行き、余計にロード時間がかかってしまう上、非表示なので何の役にもたたない。</p>
<p>escape／unescapeを自作するのは面倒なので、<a href="http://underscorejs.org/" target="_blank" class="external ext_icon">Underscore.js</a>を使った。これでテーブルロード時、記事中にあるimgをGETしなくなる。もちろんViewに書くときはunescapeしなければならない。</p>
<p>30件未満の記事をロードしてこの待ち時間。基本テキストデータと言うこともあり、1000件程度はオンメモリでも大丈夫だと思うが、待ち時間が長くなる。実用的にする場合はpaginateの実装が必要だろう。ただそうすると検索が一覧にある範囲しか効かなくなるので痛し痒し…。</p>
<p>とは言え、APIの仕様上、最大100件／回なので、いずれにしても件数が増えればpaginateするか、JSONを分割してそれをマージする必要がある。</p>
<p>しかしこれ、サーバー側で対策しておかないと、複数のWPサイトからJSONをGETしてマージすれば、簡単にキュレーション（と言うよりパクリ）サイトができてしまう。流石に企業は無いと思うが、個人レベルなら技術的にも簡単なので実在するかも！？</p>
<p>デモサイトは<a href="https://blog.iwh12.jp/test/wp_posts_list.html" target="_blank">こちら</a>。ついでに上のメニューにも追加（笑）</p>
<p>追記1：どうやらJSONのやり取り以前に、WordpressがJSONへ値を作り込む方が時間がかかっているので、crontabにcurlをセット、一定間隔でJSONファイルを作成、それを読み込むように変更した。</p>
<p>多少本家のBLOGとタイムラグが発生するものの、毎日何本も書かないので問題無い。大幅に速くなった♪（キャッシュ更新のタイミングでcurl動かす手もあるか…。）</p>
<p>追記2：<a href="http://getbootstrap.com" target="_blank" class="external ext_icon">Bootstrap</a>を使って書き換え、幅によって、Contentを3段2段1段表示へ</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPress 4.7のREST API</title>
		<link>https://blog.iwh12.jp/2017/02/13/wordpress-4-7%e3%81%aerest-api/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Mon, 13 Feb 2017 05:39:11 +0000</pubDate>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Program]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=503</guid>

					<description><![CDATA[最新の4.7.2では修正されているものの、今、世間を騒がしているREST APIの脆弱性を使ったサイトの改ざん。頻繁にアップデートしないサイトも多いので、総数で数百万単位のページが影響を受けたようだ。もちろん、このサイト]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp47_rest_api.jpg" alt="Wordpress 4.7 REST API" width="100%" class="alignnone size-full wp-image-504" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp47_rest_api.jpg 1024w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp47_rest_api-300x153.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp47_rest_api-768x392.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp47_rest_api-30x15.jpg 30w" sizes="(max-width: 1024px) 100vw, 1024px" /><br />
最新の4.7.2では修正されているものの、<a href="http://www.itmedia.co.jp/enterprise/articles/1702/13/news045.html" target="_blank" class="external ext_icon">今、世間を騒がしているREST APIの脆弱性を使ったサイトの改ざん</a>。頻繁にアップデートしないサイトも多いので、総数で数百万単位のページが影響を受けたようだ。もちろん、このサイトはアップデート済だが、少し気になったので、REST APIを調べてみた。<span id="more-503"></span></p>
<p>REST APIの仕様は<a href="https://developer.wordpress.org/rest-api/reference/" target="_blank" class="external ext_icon">ここ</a>にあるので、ざっと眺めたところ、結構遊べそうな内容が書かれている。例えば記事の情報を得たければ、</p>
<p><a href="https://blog.iwh12.jp/wp-json/wp/v2/posts/428" target="_blank">https://blog.iwh12.jp/wp-json/wp/v2/posts/428</a></p>
<p>428は記事のid。「<a href="https://blog.iwh12.jp/2017/02/06/asynchronous-javascript%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e3%82%92%e6%9c%89%e5%8a%b9%e3%81%ab%e3%81%99%e3%82%8b%e3%81%a8srcundefined%e3%82%92%e8%bf%bd%e5%8a%a0%e3%81%99%e3%82%8bbug/">Asynchronous Javascriptプラグインを有効にするとsrc=undefinedを追加するBUG修正</a>」に相当する。またidが無ければ全ての記事が対象となる（デフォルト10件）。</p>
<p>これをJQueryの$.ajaxでやり取りすれば、本来のデザインとは違う別のページを簡単に表示することが可能だ。テストで軽く作ってみたのが<a href="https://blog.iwh12.jp/test/rest_api_test.html" target="_blank">こちら</a>。コードは以下の通り。</p>
<p></p><pre class="crayon-plain-tag">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset="utf-8"&gt;
&lt;title&gt;Wordpress REST API TEST&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div style="width: 600px;"&gt;
    &lt;div id="title" style="font-weight: 800;"&gt;&lt;/div&gt;
    &lt;div id="date" style="text-align: right;"&gt;&lt;/div&gt;
    &lt;div id="content"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
$(document).ready(function() {
    $.ajax({
        type: 'GET',
        url: 'http://blog.iwh12.jp/wp-json/wp/v2/posts/428',
        dataType: 'json'
    })
    .done(function(data, textStatus, jqXHR) {
        console.log(data);
        $('#title').html(data.title.rendered);
        $('#date').html(data.date);
        $('#content').html(data.content.rendered);
    })
    .fail(function(jqXHR, textStatus, errorThrown) {
        console.log('fail');
    });
});
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre><p>もう少し本格的なのを作ってみるかな…。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPress Popular Postsプラグインで任意のIPアドレス除外する</title>
		<link>https://blog.iwh12.jp/2017/02/13/wordpress-popular-posts%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e3%81%a7%e4%bb%bb%e6%84%8f%e3%81%aeip%e3%82%a2%e3%83%89%e3%83%ac%e3%82%b9%e9%99%a4%e5%a4%96%e3%81%99%e3%82%8b/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Mon, 13 Feb 2017 00:43:07 +0000</pubDate>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Program]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=492</guid>

					<description><![CDATA[WordPress Popular Postsプラグインは、人気のある記事一覧をサイドバーなどに置けて便利なのだが、ログインユーザーしかカウントから外すことができず、スマホなど別の端末で自分が確認も含めアクセスすると有効]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp_popular_posts.jpg" alt="WordPress Popular Posts" width="100%" class="alignnone size-full wp-image-493" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp_popular_posts.jpg 767w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp_popular_posts-300x97.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/wp_popular_posts-30x10.jpg 30w" sizes="(max-width: 767px) 100vw, 767px" /><br />
<a href="https://ja.wordpress.org/plugins/wordpress-popular-posts/" target="_blank" class="external ext_icon">WordPress Popular Posts</a>プラグインは、人気のある記事一覧をサイドバーなどに置けて便利なのだが、ログインユーザーしかカウントから外すことができず、スマホなど別の端末で自分が確認も含めアクセスすると有効になってしまう。そこまで厳密にアクセスを数える必要も無いと思うが、たまたま仕事場が固定IPアドレスなので、除外することにした。<span id="more-492"></span></p>
<p>プラグインの設定で「visitors」があったので、これをキーワードにコードを検索すると該当箇所を発見。</p>
<p></p><pre class="crayon-plain-tag">// wordpress-popular-posts/wordpress-popular-posts.php 
if (
(0 == $this-&gt;user_settings['tools']['log']['level'] &amp;&amp; !is_user_logged_in()) || 
(1 == $this-&gt;user_settings['tools']['log']['level']) ||
(2 == $this-&gt;user_settings['tools']['log']['level'] &amp;&amp; is_user_logged_in())
) {
  add_action( 'wp_head', array(&amp;$this, 'print_ajax') );
  // Register views from everyone and/or connected users
  if ( 0 != $this-&gt;user_settings['tools']['log']['level'] )
    add_action( 'wp_ajax_update_views_ajax', array($this, 'update_views_ajax') );
  // Register views from everyone and/or visitors only
  if ( 2 != $this-&gt;user_settings['tools']['log']['level'] )
    add_action( 'wp_ajax_nopriv_update_views_ajax', array($this, 'update_views_ajax') );
}</pre><p> </p>
<p>ここを</p><pre class="crayon-plain-tag">if ($_SERVER['REMOTE_ADDR'] != 'xxx.xxx.xxx.xxx') { // 任意のIPアドレス
}</pre><p> </p>
<p>で囲めばいい。仕事場のルーターからログインせずアクセスしてもカウントされず、4Gでスマホからアクセスするとカウントされ、作動を確認。但しプラグインの更新で戻ってしまうので要注意！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AMPプラグイン有効後のエラー対策</title>
		<link>https://blog.iwh12.jp/2017/02/11/amp%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3%e6%9c%89%e5%8a%b9%e5%be%8c%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc%e5%af%be%e7%ad%96/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Sat, 11 Feb 2017 04:00:08 +0000</pubDate>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Program]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=459</guid>

					<description><![CDATA[Wordpressで作ったサイトを簡単にAMP（Accelerated Mobile Pages）化できるAMPプラグイン。有効にしてテストサイトで確認するとエラーだらけ。どうもBJ Lazy Loadプラグインとmod]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/amp_plugin.jpg" alt="AMP Plugin" width="100%" class="alignnone size-full wp-image-460" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/amp_plugin.jpg 767w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/amp_plugin-300x97.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/amp_plugin-30x10.jpg 30w" sizes="(max-width: 767px) 100vw, 767px" /><br />
Wordpressで作ったサイトを簡単にAMP（Accelerated Mobile Pages）化できる<a href="https://ja.wordpress.org/plugins/amp/" target="_blank" class="external ext_icon">AMPプラグイン</a>。有効にして<a href="https://search.google.com/search-console/amp" target="_blank" class="external ext_icon">テストサイト</a>で確認するとエラーだらけ。どうもBJ Lazy Loadプラグインとmod_pagespeedが合わないようだ。対策は…。<span id="more-459"></span></p>
<p>まずmod_pagespeedをOFFにしなければならないが、OFFにすると全てのページに影響するので、/ampのあるurlだけOFFにする。以下を.htaccessへ追加。</p>
<p>ModPagespeedDisallow  &#8220;*/amp/*&#8221;</p>
<p>次に、BJ Lazy Loadプラグインも無効にすると全ての画像に影響するので、function.phpへ以下のコードを追加。AMPプラグインが生成したページのみ無効とする。</p><pre class="crayon-plain-tag">function bjll_compat_amp() {
  if (function_exists('is_amp_endpoint') &amp;&amp; is_amp_endpoint()) {
    add_filter('bjll/enabled','__return_false');
  }
}
add_action('bjll/compat','bjll_compat_amp');</pre><p> </p>
<p>これで取りあえず投稿ページのみがAMP対応となる（urlの後ろへ/ampを付ける）。</p>
<p><a href="https://search.google.com/structured-data/testing-tool" target="_blank" class="external ext_icon">構造化データ</a>でもlogoとショートコードshareを使った時のimageでエラーがあったのでコードを追加。</p>
<p></p><pre class="crayon-plain-tag">add_filter('amp_post_template_metadata','amp_modify_metadata',10,2);
function amp_modify_metadata($metadata,$post) {
  global $share_image_url;

  $metadata['publisher']['logo'] = array(
    '@type' =&gt; 'ImageObject',
    'url' =&gt; 'http://blog.iwh12.jp/wp/wp-content/uploads/2017/02/amp_logo.jpg',
      'height' =&gt; 60,
      'width' =&gt; 600
  );

 if(empty($metadata['image'])) {
    $image_info = getimagesize($share_image_url);
    $metadata['image'] = array(
      '@type' =&gt; 'ImageObject',
      'url' =&gt; $share_image_url,
      'height' =&gt; $image_info[1],
      'width' =&gt; $image_info[0]
    );
  }

  return $metadata;
}</pre><p> </p>
<p>logoは元々無いので作ってアップロード（幅600px以下、高さ60px以下）。ショートコードでshareした時の画像urlはglobal $share_image_urlに入っているので、そこから値をセット。これでエラーは無くなった。余談になるが、このコード、あっちこっちで同じものを見かけるが、arrayの最後は,不要。</p>
<p>この他、Google AnalyticsとGoogle AdSense、フォントの設定なども別途必要となるものの、これはググれば山のように出てくるので省略。</p>
<p>AMP化したこのページは<a href="https://blog.iwh12.jp/2017/02/11/ampプラグイン有効後のエラー対策/amp/" target="_blank">こちら</a>。しかし、古のiモード時代ならともかく、4G回線とパフォーマンスやメモリ、パネル解像度などが一般的なPCに追いつけ・追い越せ状態のスマホで、少し速いだけの（画像を数枚貼れば誤差の範囲）こんな味も素っ気もないページを見る（もしくは作る）必要あるのだろうか？</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mobile Website Speed Testing Toolのスコア</title>
		<link>https://blog.iwh12.jp/2017/02/05/mobile-website-speed-testing-tool%e3%81%ae%e3%82%b9%e3%82%b3%e3%82%a2/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Sun, 05 Feb 2017 02:22:33 +0000</pubDate>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[Blog]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=418</guid>

					<description><![CDATA[アクセスが少ないので拘ってもほとんど意味が無いものの、一応IT系の仕事をしている関係上、みっともないスコアも…と言うことで、時間の合間を見て細々Tuneしていたところ上記の通り。設定は…。 Nginx/fastcgi_c]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/think_with_google.jpg" alt="Mobile Website Speed Testing Toolのスコア" width="100%" class="alignnone size-full wp-image-419" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/think_with_google.jpg 1024w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/think_with_google-300x198.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/think_with_google-768x508.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/02/think_with_google-30x20.jpg 30w" sizes="(max-width: 1024px) 100vw, 1024px" /><br />
アクセスが少ないので拘ってもほとんど意味が無いものの、一応IT系の仕事をしている関係上、みっともないスコアも…と言うことで、時間の合間を見て細々Tuneしていたところ上記の通り。設定は…。<span id="more-418"></span></p>
<p>Nginx/fastcgi_cacheなど大したこと（？）をする前にこのスコアが出てしまったのでもういいか！？と言うところ。Googleには好かれたらしい（笑）設定は以下の通り。</p>
<p>Server Side<br />
・PHP 7.1.1（FastCGI/mod_fcgid）<br />
・mod_pagespeed（apache module）</p>
<p>WordPress Plugin<br />
・WP Fastest Cache<br />
・BJ Lazy Load<br />
・Asynchronous Javascript<br />
※速度に関係しそうなPluginのみ記載</p>
<p>たったこれだけ。</p>
<p>基本的に画像やjs/cssのオプティマイズはmod_pagespeedに任せて、Pluginはキャッシュと、遅延/非同期の読み込みを担当。PHPは7系になっているが、管理画面以外の表示はほぼキャッシュなので、ほとんど関係無いと思われる。</p>
<p>この結果を見る限り、サーバーの反応速度より（正直このサーバーは速くない）、html/js/css/imgの最適化、見えないエリアで画像を表示しない、JavaScriptの非同期…など、スマホ重視で今どきのチェック項目を優先しているようだ。</p>
<p>自分のサイトはどうなのか？気になる方は<a href="https://testmysite.thinkwithgoogle.com/" target="_blank" class="external ext_icon">Mobile Website Speed Testing Tool</a>でチェック！</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>BLOG再開！？</title>
		<link>https://blog.iwh12.jp/2017/01/18/blog%e5%86%8d%e9%96%8b%ef%bc%81%ef%bc%9f/</link>
		
		<dc:creator><![CDATA[knishika]]></dc:creator>
		<pubDate>Wed, 18 Jan 2017 03:44:02 +0000</pubDate>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[Blog]]></category>
		<guid isPermaLink="false">http://blog.iwh12.jp/?p=102</guid>

					<description><![CDATA[旧BLOGを年末に確認すると、ほぼ2年放置していた。理由は単純で、記事1つシェアするにしても、サムネイル画像を作って手動でリンクして…と、それなりに手間がかかったから。またsbという古いシステムだったこともある。 そこで]]></description>
										<content:encoded><![CDATA[<p><img src="https://blog.iwh12.jp/wp/wp-content/uploads/2017/01/20170118.jpg" alt="BLOG再開！？" width="100%" class="alignnone size-full wp-image-106" srcset="https://blog.iwh12.jp/wp/wp-content/uploads/2017/01/20170118.jpg 1067w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/01/20170118-300x225.jpg 300w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/01/20170118-768x576.jpg 768w, https://blog.iwh12.jp/wp/wp-content/uploads/2017/01/20170118-1024x768.jpg 1024w" sizes="(max-width: 1067px) 100vw, 1067px" /><br />
旧BLOGを年末に確認すると、<a href="http://www.iwh12.jp/blog/log/eid1253.html" target="_blank" class="external ext_icon">ほぼ2年放置</a>していた。理由は単純で、記事1つシェアするにしても、サムネイル画像を作って手動でリンクして…と、それなりに手間がかかったから。またsbという古いシステムだったこともある。<br />
<span id="more-102"></span><br />
そこで旧BLOGは放置のまま、新規に今どきの（笑）Wordpressを設置。ショートコードでOGPが設定してあるサイトなら、自動的に読み込んで表示するようにした。なるべく手間をかけない作戦だ。Wordpress自体のカスタマイズは、標準テーマのまま、OGPの関係でheader.phpとfunctions.phpを触った程度。プラグインもあまり入れず、素に近い状態となっている。</p>
<p>日頃Facebookには結構な量を書き込んでいるので（友人限定）、その中から公開しても問題無さそうなネタだけ、こちらでもピックアップしつつ、補足コメントなどを入れたいと思ってる。また三日坊主になるかも知れないが、取りあえずメモ替わり。</p>
<p>下のブロックはAmazonJSプラグインのテスト。うまく作動してるようだ。<iframe src="https://rcm-jp.amazon.co.jp/e/cm?t=knishika1-22&o=9&p=8&l=as1&asins=B00M939Y0I&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p>　</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
