Google Crisis Response(Google)
災害に関する情報源や、行方不明者情報の収集と検索を行う『パーソンファインダー』を初めとするツールの提供が行われています。

2008年3月19日 水曜日

Yahoo! Japan がアクセス解析サービスを開始

Filed under: インターネット
時間:0時02分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 Yahoo! Japan が、個人サイト向けのアクセス解析ツールのサービスを開始しました。

 サービスの名前は「Yahoo! ログール」。単なるアクセス解析ではなく、ほかのユーザーを登録する「お気に入り」機能などを持ち、SNS のようなコミュニティーとしての面が強く出ています。利用には、Yahoo! Japan のアカウントが必要です。

 アクセス解析ツールと言うと、Google Analytics を無視することは出来ません。Google Analytics は Urchin がベースとなっているためか、SEO を目的としたプロ向けツールのイメージが抜けません。各項目名も「参照元」のように硬い感じのものが多いです。

 これに対して、Yahoo! ログールは一般向けのイメージです。導入説明ではキャラクターが使用され、ファンシーですらあります。
 項目名も、「ここから来ました」や「ここに行きました」のような、やわらかい言葉が使われています。アバターの設定が出来たり、自分をお気に入りに登録した人がわかる「ファンリスト」などもあります。いわゆる「足跡」機能もあり、アクセス解析というよりも SNS のようです。

 ベータ版というこもあり、機能の充実と言う点では Google Analytics に負けています。しかし、はてなブックマークの登録数がわかるなど、注目されそうな機能もあります。アクセスは気になるけど、Google Analytics は難しくてよくわからないと言う人にはいいかもしれません。将来は、マニアックな Google Analyics と手軽な Yahoo! ログールといったようになり、2大アクセス解析サービスと言うことになるかもしれません。ちょっと注目して見たいと思います。

Comments (0)

2008年3月14日 金曜日

管理者なのに新規にページが公開できない原因

Filed under: WordPress,ハック
時間:1時10分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 先週の記事でも書きましたように、Google AdSense の規約変更のためにプライバシーポリシーの掲載が必要となりました。いろいろと考えて自力で作ったのですが、なぜか肝心のページの公開ができません。

 公開するには、ステータスを「公開」にすればいいはずですが、私の場合はなぜかその項目が表示されていません。その部分のコードを探して確認してみることに。久しぶりのハックです。バージョンは ME2.1.3。ME2.0 からアップグレードしてあります。

解析編

 ページ編集画面のアドレスからファイルを推測したどっていくと、wp-admin/edit-page-form.php に該当箇所が見つかりました。

[php num=60]





[/php]

 63行目が公開とする項目で、62行目のところで権限の有無によって処理を分岐しているようです。管理者アカウントで作業しているので権限がないとは思えないのですが。

 今度は条件式に使われている関数 current_user_can() を調べます。まずは定義場所を見つける必要があります。ファイル群から検索という方法でもいいのですが、試しに Google で検索してみることに。キーワードは「WordPress current_user_can」。
 capabilities.php というファイルにあるという情報が見つかりました。コアファイルの置かれているところを探してみると、wp-includes/ にありました。

[php num=444]
// Capability checking wrapper around the global $current_user object.
function current_user_can($capability) {
$current_user = wp_get_current_user();

$args = array_slice(func_get_args(), 1);
$args = array_merge(array($capability), $args);

if ( empty($current_user) )
return false;

return call_user_func_array(array(&$current_user, ‘has_cap’), $args);
}
[/php]

 446行目で wp_get_current_user() が返す値を変数に入れています。変数の値を調べてみると、クラス WP_User のインスタンスが入っていました。このクラスも、capabilities.php に定義があります。長いのでコードは省略します。

 448行目の処理は、この関数の2番目以降の引数を要素として持つ配列を取得しています。今回引数は1つだけなので、当然この行の直後では $args は要素を持たない配列です。449行では配列の結合をしていて、変数 $args には array('publish_pages') に相当する値が入ります。

 454行目では、コールバック処理の結果を返しています。変数 $current_user にはクラス WP_User のインスタンスが入っていますので、コールバック関数は WP_User のメンバ関数 has_cap() と言うことになります。定義は次のようになっています。

[php num=258]
//has_cap(capability_or_role_name) or
//has_cap(‘edit_post’, post_id)
function has_cap($cap) {
if ( is_numeric($cap) )
$cap = $this->translate_level_to_cap($cap);

$args = array_slice(func_get_args(), 1);
$args = array_merge(array($cap, $this->ID), $args);
$caps = call_user_func_array(‘map_meta_cap’, $args);
// Must have ALL requested caps
$capabilities = apply_filters(‘user_has_cap’, $this->allcaps, $caps, $args);
foreach ($caps as $cap) {
//echo “Checking cap $cap
“;
if(empty($capabilities[$cap]) || !$capabilities[$cap])
return false;
}

return true;
}
[/php]

 引数 $cap には、コールバックで渡された文字列 publish_pages が入ります。数値ではないので、262行目の処理は行われません。264行目と265行目は、current_user_can() の場合と同じですね。$this->ID は、ログイン中のユーザーのID(ログインIDではなく、データベーステーブルの主キー)が入っています。

 266行目で再びコールバックです。この段階 $args には array(‘publish_pages’, ユーザーID) が入っているので、map_meta_cap('publish_pages', ユーザーID) ということをしていることになります。

 関数の定義は、285行目から442行目にかけて記述されています。これもかなり長いですが、やっていることは第一引数の値で switch 分岐処理をしているだけです。publish_pages のところはないので、default 節で次のように処理をしているだけです。

[php num=436]
default:
// If no meta caps match, return the original cap.
$caps[] = $cap;
[/php]

 そして、その戻り値は予想通り array('publish_pages') でした。

 268行目。プラグイン作成ではおなじみの、apply_filters が使われています。以前にもこの関数のハックに挑んだことがありますが、ややこしくて苦手です。面倒なので $capabilities の中身を見てみるだけに。連想配列になっていて、ユーザステータスを記録しているようです。$capabilities['publish_pages'] はありませんでした。

 269~273行目では、値がないか Not true のものが見つかったら false でリターンするという処理です。値がないので false になってしまいます。

解決編

 すっかり弱ってしまいました。散々調べ続けて、わかったのは間違いなくページを公開する権限がないことだけ。(仕組みがわかって勉強になったというのもありますけど・・・)

 方向を変えて、publish_pages について調べてみることに。「WordPress publish_pages」と検索。WordPress Japan のフォーラムに、よく似た不具合のスレッドを発見。

 そこからリンクされているページを見ると、データベースに記録されているシステム設定に問題がある模様。どれどれと確認してみると、$capabilities の内容によく似たデータが。そして、そこには publish_pages はありませんでした。2.0 からアップグレードするときに、スクリプトが修正してくれなかっただけなのではないでしょうか。実際、プラグインチェック用に新規インストールした 2.1 のほうでは次のような内容で、そこにはちゃんと publish_pages があります。

[code]
a:5:{s:13:"administrator";a:2:{s:4:"name";s:27:"管理人 - (Administrator)";s:12:"capabilities";a:47:{s:13:"switch_themes";b:1;s:11:"edit_themes";b:1;s:16:"activate_plugins";b:1;s:12:"edit_plugins";b:1;s:10:"edit_users";b:1;s:10:"edit_files";b:1;s:14:"manage_options";b:1;s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:6:"import";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:8:"level_10";b:1;s:7:"level_9";b:1;s:7:"level_8";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;s:12:"delete_users";b:1;s:12:"create_users";b:1;}}s:6:"editor";a:2:{s:4:"name";s:20:"編集者 - (Editor)";s:12:"capabilities";a:34:{s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:17:"edit_others_pages";b:1;s:20:"edit_published_pages";b:1;s:13:"publish_pages";b:1;s:12:"delete_pages";b:1;s:19:"delete_others_pages";b:1;s:22:"delete_published_pages";b:1;s:12:"delete_posts";b:1;s:19:"delete_others_posts";b:1;s:22:"delete_published_posts";b:1;s:20:"delete_private_posts";b:1;s:18:"edit_private_posts";b:1;s:18:"read_private_posts";b:1;s:20:"delete_private_pages";b:1;s:18:"edit_private_pages";b:1;s:18:"read_private_pages";b:1;}}s:6:"author";a:2:{s:4:"name";s:20:"投稿者 - (Author)";s:12:"capabilities";a:10:{s:12:"upload_files";b:1;s:10:"edit_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:4:"read";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;s:22:"delete_published_posts";b:1;}}s:11:"contributor";a:2:{s:4:"name";s:25:"寄稿者 - (Contributor)";s:12:"capabilities";a:5:{s:10:"edit_posts";b:1;s:4:"read";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;s:12:"delete_posts";b:1;}}s:10:"subscriber";a:2:{s:4:"name";s:24:"購読者 - (Subscriber)";s:12:"capabilities";a:2:{s:4:"read";b:1;s:7:"level_0";b:1;}}}
[/code]

 思い切ってデータを差し替えてみると、見事公開の選択肢が表示されるように。これで、やっとプライバシーポリシーの公開ができます。

Comments (0)

2008年3月6日 木曜日

Amazon.com も動画広告へ参入

Filed under: アフィリエイト
時間:20時31分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 動画用の Google AdSense 広告である「AdSense for video」のベータ版が開始されていますが、Amazon.com も動画広告に参入です。

 このサービスは「Your Video Widget」というウィジェットで、アップロードした動画に広告の好きなコマ位置に広告を掲載し、それをサイトに掲載します。YouTube のように、専用のプレーヤーが提供されます。

Comments (0)

2008年3月3日 月曜日

Google AdSense の規約変更

Filed under: アフィリエイト
時間:23時34分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 このサイトでは Google AdSense によるアフィリエイト広告を掲載しています。最近、このサービスの規約が変更され、その内容が話題となってます。

 話題になっているのは、広告配信の際に Cookieウェブビーコンを使用しており、そのことを一般の閲覧者に対して通知せよという部分。通知するだけならまだしも、プライバシーポリシーとして規定し、その中には Cookie の管理について閲覧者(規約では「ユーザー」)が選択できる手段についての情報も記載する必要があります。

 サービスを利用し続けるにはやるしかないのですが、正直自力で用意できる人はそんなに多くないのではないでしょうか。ほかの人が用意したものを利用するか、それとも諦めるかのどちらかになりそうな気がします。私もその中に入りそうですが、幸い期限まではまだあります。挑んでみるのも悪くないかもしれません。

 なお、ヘルプフォーラムに関連スレッドがあります。プライバシーポリシー作成の際には、ここの内容も参考にしようと思っています。

 法人運営で AdSense 広告を掲載しているサイトも参考になりそうです。株式会社Impress Watch のものがしっかりしていていいですね。

Comments (2)

2008年2月15日 金曜日

Google AdSense のガイドブック登場

Filed under: アフィリエイト
時間:22時53分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 Google AdSense はアフィリエイト広告の定番ですが、日本ではまとまった情報が少ないのが現状です。アフィリエイトの本はあっても、AdSense の本はありません。洋書であれば何冊かあるのですが、言語の壁が大きく立ちはだかります。私自身、導入するときには先人たちがインターネット上で公開している情報にかなりお世話になりました。

 そんな Google AdSense ですが、ついに日本語でまとまった情報を得ることができるようになりました。Google によるガイドブックが公開されたのです。

 残念ながら007年12月の時点の内容となっていますが、申し込みから最適化までを網羅しています。PDF形式のファイルとして公開されていて、総ページ数は60ページ(内2ページは表紙)です。手元の文庫本では厚さが4mmくらいでした。無料で公開されていることを考えれば結構な量ではないいでしょうか。

Comments (0)

2008年1月25日 金曜日

O’Reilly Maker

Filed under: インターネット,書籍
時間:1時15分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 オライリーという出版社があります。IT系書籍の大手で、大きな書店には専用のコーナーがあったりします。そして、その装丁はかなりの特徴があります。名前は知らなくても、見たことがあるのでは?

 たとえば、こんな感じ。

[amazon]4873113296[/amazon][amazon]4873113539[/amazon][amazon]4873113512[/amazon][amazon]4873111269[/amazon]
[amazon]4873110114[/amazon][amazon]4873113393[/amazon][amazon]4873113520[/amazon][amazon]4873112672[/amazon]

 タイトルが大きめで、精密な生物のイラストが添えられています。このデザインが妙に役に立ちそうに見えて、出会うたびに欲しくなってしまいます。

 さて、やっと本題。この特徴的なデザインを再現できるツールが公開されています。その名も O’Reilly Maker。そのままですね。作者はオライリーのファンだそうで、技術思考の人なのではないでしょうか。私も含め、ストレートなネーミングを好む人が多いような気がします。

 作ったものはサイトに保存され、あとから訪れた人が見ることができます。ランキングもあって、現在のトップは『詳説/.J』。スラッシュドット・ジャパンですね。海外サイトなのに、2位との差が4倍以上あります。

 面白そうなので、私も作ってみました。日本語だとフォントがいまいちになるので英文に。

O’Reilly Maker

Comments (0)

2008年1月14日 月曜日

Amazon アソシエイト支援プラグイン AmazonLink 0.9.2 リリース

Filed under: AmazonLink,WordPress,アフィリエイト
時間:15時10分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 Amazon アソシエイト支援プラグイン AmazonLink の0.9.2 をリリースしました。今回はバグの修正のみです。ダウンロードは、いつものように WordPress Plugins/JSeries のページから。

修正内容の解説

 修正したバグは、プラグインファイルを置いてあるディレクトリの名前が正しく取得できないというものです。Windows サーバーでは、そのディレクトリのフルパスとなっていました。

 0.9.1 では、AmazonLink.php の76行目に次のように記述してあります。

[php num=76]
$dirs = explode(‘/’, dirname(__FILE__));
[/php]

 これを、0.9.2 では次のように変更しました。80行目です。

[php num=80]
$dirs = explode(DIRECTORY_SEPARATOR, dirname(__FILE__));
[/php]

 この行の処理は、自分自身(AmazonLink.php)のフルパスからディレクトリ部分を取り出し、それを階層ごとに分割した配列を取得するというものです。Linux などでは階層の区切り文字は /(スラッシュ)ですが、Windows では \(バックスラッシュ。日本語版 Windows では円マークで表示されます)です。区切り文字が正しくなかったため、分割ができていませんでした。

 対応方法として、文字を直接指定するのではなく、定数 DIRECTORY_SEPARATOR を使用するように変更をしました。この定数には実行環境に合わせて階層の区切り文字が入ります。

 ちなみに、次の行で取得した配列の最後の要素を取り出して使用しています。この値が、プラグインファイルの入っているディレクトリの名前となります。

Comments (2)

2008年1月13日 日曜日

Google は、IE7も推奨?

Filed under: インターネット
時間:13時12分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 GoogleFirefox を推奨しています。内部事情はわかりませんが、少なくとも外部からはそう見えます。Google パックという、複数のアプリケーションをセットにした製品にも、Google ツールバーセット済みの Firefox が含まれています。Firefox 愛用者にとって、比較的親しみを感じる企業といえるでしょう。

 そんな Google のサービスの1つに、Google AdSense があります。いわゆるアフィリエイトサービスで、ページにあった広告が自動的に表示されるものです。
 このサイトでも使用していますが、さきほどその中に Internet Explorer 7(以降、IE7と表記します)の広告がありました。マイクロソフトの広告かと思いきや、その広告の文章は Google が IE7 へのアップグレードを推奨するというもの。リンク先のページのアドレスのドメインも www.google.com と、Google のものになっていました。

 Google にとってマイクロソフトはライバル関係にあるわけで、塩を送りまくっているように見えます。とりあえずダウンロードページを見てみることに。クリックだと規約違反になるので、アドレスをコピーペーストしました。

 ダウンロードページは英語ページでした。広告では単に IE7 にしましょうということしか書かれていませんでしたが、そのページには「Google に最適化された IE7 にアップグレードしましょう」と書かれていました。最適化の内容は、ホームページ(スタートページのほうです)が Google になっていること、Google ツールバーがインストール済みであること、IE7 の検索窓から Google の検索ができるようになってることの3点だそうです。

 IE7 を普及させることが目的ではなく、利用者の多い IE を使って Google をもっと認知してもらうのが目的だったようです。これは、Firefox の場合にも同じことが言えそうです。

 Google の戦略は、無料サービスを広告のように使って知名度を高め、そこから有料サービスの導入につなげるというもののように思えます。以前は無料サービスばかりでやっていけるのかと思っていましたが、今はしっかりと稼いでいるようです。多数の無料サービスで消費者は喜び、そこから有料サービスを始める人によって経営者も喜ぶ。ブログなどを見た限りでは、一般従業員も楽しんでいるようです。今のところよい形になっているようですね。

 最近企業視点が多いですが意図はないです・・・。

Comments (0)

2007年12月1日 土曜日

akismet-multibyteview のリンクの修正

Filed under: WordPress,ハック,プラグイン
時間:9時28分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録

 WordPress のアップグレードと一緒に、そのままになっていた akismet-multibyteview のアップグレードもしました。1.20 からはダッシュボードのボックス枠(名前はあるんでしょうか。hook が activity_box_end なので、アクティビティーボックス?)にマルチバイトスパムの数が表示されるようになってさらに便利に。

 サイト内トラックバックが捕獲されてしまったので早速リンクから一覧に飛ぼうとしたのですが、File Not Found になってしまいました。ブラウザのアドレス覧を見ると http://edit-comments.php?page=akismet-admin&multibyte=true となっています。ソースコードでもやはりおかしなことに。

 こういうのを見るとついつい調べてみたくなります。早速ハックです。

ソースを見る

 何はともあれ、ソースコードを見ます。該当の処理は akismet-multibyteview.php の関数 akismet_stats_mbinfo が行っています。1.21 では139行目から始まっていて、目的の場所は156行目です。

[php num=154]
if ( $mbs_count ) {
echo

  • akismet_admin_uri}&multibyte=true”) .
    ‘”>要チェック
    : スパムじゃないかもしれないコメントを ‘ .
    $mbs_count.’ 件捕獲中です。
  • ‘;
    } else {
    echo ‘

  • この中に日本語を含むものはありません。
  • ‘;
    }
    [/php]

     clean_url() という関数が使われています。URL として正しくなるように修正をするもので、WordPress ME2.1.3では wp-includes/formatting.php で次のように定義されていました。

    [php num=1069]
    function clean_url( $url, $protocols = null ) {
    if (” == $url) return $url;
    $url = preg_replace(‘|[^a-z0-9-~+_.?#=!&;,/:%]|i’, ”, $url);
    $strip = array(‘%0d’, ‘%0a’);
    $url = str_replace($strip, ”, $url);
    $url = str_replace(‘;//’, ‘://’, $url);
    // Append http unless a relative link starting with / or a php file.
    if ( strpos($url, ‘://’) === false &&
    substr( $url, 0, 1 ) != ‘/’ && !preg_match(‘/^[a-z0-9]+?\.php/i’, $url) )
    $url = ‘http://’ . $url;

    $url = preg_replace(‘/&([^#])(?![a-z]{2,8};)/’, ‘&$1′, $url);
    if ( !is_array($protocols) )
    $protocols = array(‘http’, ‘https’, ‘ftp’, ‘ftps’, ‘mailto’, ‘news’, ‘irc’, ‘gopher’, ‘nntp’, ‘feed’, ‘telnet’);
    if ( wp_kses_bad_protocol( $url, $protocols ) != $url )
    return ”;
    return $url;
    }
    [/php]

     1078行目で、:// を含まなく / で始まっていなくて半角英数字+拡張子 php になっていない場合に http:// をつけるという処理をしています。

     そして、引数の文字列に含まれる変数 $this->akismet_admin_uri は、同じファイルの62行目で次のように定義されています。

    [php num=62]
    $this->akismet_admin_uri = ‘edit-comments.php?page=akismet-admin’;
    [/php]

     さて、ここで関数に渡される引数を確認してみます。変数が展開されると、引数は edit-comments.php?page=akismet-admin&multibyte=true となります。拡張子は php ですが、半角英数のファイル名ではありません。ハイフン(-)が入ってしまっています。そのため、clean_url() は http:// をつけてしまっていました。

     初めは akismet-multibyteview のバグだと思い解析をしていましたが、実は WordPress 側のバグでした。2.2.1 のコードでは次のように修正されています。

    [php num=1083]
    if ( strpos($url, ‘://’) === false &&
    substr( $url, 0, 1 ) != ‘/’ && !preg_match(‘/^[a-z0-9-]+?\.php/i’, $url) )
    $url = ‘http://’ . $url;
    [/php]

     作者のひろまささんはすでに2.3系になっていますので気が付かなかったのかもしれません。

    修正

     コアファイルのほうを修正してもいいのですが、影響範囲が少ないプラグインのほうを直してしまいます。固定アドレスなので、関数の処理は必要ないと判断。156行目を次のように変更しました。ついでに & を文字参照にしてあります。やらなくても大丈夫ですが、気分的に。

    [php num=156]

  • akismet_admin_uri}&multibyte=true” .
    [/php]

     これによってリンク先が正しくなり、マルチバイトスパムの一覧に飛ぶことができるようになりました。

  • Comments (1)

    2007年11月27日 火曜日

    ページナビゲーションプラグイン入れました

    Filed under: WordPress,プラグイン
    時間:23時40分
    投稿者:よしとも
    AddClips 経由でソーシャルブックマークに登録

     アップグレードによって動かなくなった WP Paginate の替わりとして、WP-PageNavi を入れてみました。WordPress 2.1 に対応した 2.20 を使用しました。

     インストールはいつものようにアップロードして管理画面から有効にするだけ。注意したいのは、アップロード先のフォルダ名が固定であること。プログラム内でファイルパスがハードコーディングされているため、もともとのフォルダ名から変えてしまうといろいろと問題がおきそうです。

     管理画面が日本語じゃないといやだという方は、Masayanさんによる日本語リソースをどうぞ。

     WordPress が 2.1 の場合は対応したファイルを、2.2 の場合は wp-pagenavi-ja.mo を WP-PageNavi のフォルダに入れます。

    Comments (0)
    « 前ページへ次ページへ »

    HTML convert time: 0.309 sec. Powered by