nDiki : WWW::Mechanize
WWW::Mechanize
Perl モジュール。 LWP::UserAgent のサブクラス。
ページをキャッシュする機能を持つ WWW::Mechanize のサブクラスとして WWW::Mechanize::Cached がある。
スポンサード リンク
Related term
2004年11月26日 (金)
■ HTTP::Daemonベースのプログラムのテスト

make test でテストしておけるようにしておきたい。
ということで王道。fork して daemon プログラムを exec。 WWW::Mechanizeで daemon に HTTP でアクセスし各種テスト。
終わったら kill。
Win32 (ActivePerl)では fork + exec で起動できるのだけれど kill では死なない。 ということで Win32::Process::Create で直接起動して、Win32::Process::Kill で終了させるという別解で。
HTTP + HTMLのテストは、以前ちょっと使ったことのあるHTTP::WebTestを使おうかと思ったが、なんだかんだいって WWW::Mechanize の方が好きなように書けそうなのでこちらをチョイス。
- XMLRPC::Lite + 自前の HTTP::Daemon サーバ (2004-09-14)
- ActivePerl 5.6.1 Build 638 にバンドルされている... (2004-08-19)
- iモードHTMLシミュレータ Version 7.2 (2005-05-10)
- WiKicker の Win32 対応 (2005-04-04)
- Perl CGI プログラムのテストには WWW::Mechanize::... (2006-02-18)
2005年9月30日 (金)
■ mixi のプロフィールをランダム更新

mixi であるが、何だかんだといって登録以来定期的に巡回している。
あたり。
mixi で残念なのは、マイミクシィとコミュニティの紹介文を、(他人からみた)自分のトップページに表示できないこと。 マイミクシィの紹介文は相手のところに書くことができるけれど自分のところでは紹介できない。 コミュニティも「なぜ参加(登録)してみた」のか一言書いてみたい。
今の mixi だとトップページで比較的自由になるのは、写真と自己紹介の欄ぐらい。 写真は既に一言コメントを画像に埋め込んでいるから、あとはいじるとしたら自己紹介。
ということで、この部分を定期的にランダムに更新できるように、スクリプトを書いてみることにした。
最初は WWW::Mixi で行こうと思ったが、フォームの一部分だけ変更してPOSTするには LWP::RobotUA のサブクラスである WWW::Mixi より WWW::Mechanize の方が楽そうなので、そちらでスクリプトを書くことにした。 ログイン後の refresh あたりの処理以外は面倒なこともなく、さらりと。
あるディレクトリの下にあるテキストファイルからランダムに1つ選び、その内容で*1自己紹介を更新するスクリプトを書き cron で定期的に更新するようにしてみた。
今のところテスト的なテキストしかないのでランダムといってもほとんど変わらないけれど、そのうちマイミクシィの紹介とかネタとかを増やしていく予定。
*1実際にはフッタとヘッタをつけて
- mixipress でコミュニティ掲示板もチェック (2005-10-01)
- mixi 用画像アップローダ (2004-11-21)
- mixi の写真にメッセージを (2004-11-28)
- 今日のさえずり - 「はてなMobileGateway」かましてから、OK... (2008-01-03)
- Firefox mixiツールバー 0.0.4 (2005-02-04)
2005年10月29日 (土)
■ 他の Web サイトの情報を URI::Fetch でキャッシュ付き取得

WiKicker や DiKicker でうまく他のサイトの情報を取り込んで利用できるようにしたい。 相手サイト・自サイトともに負荷をかけないように処理するには、うまくキャッシングする必要がある。
キャッシュ機能のあるPerl用HTTPユーザエージェントには
- WWW::Mechanize::Cached
- LWP::UserAgent::WithCache
- URI::Fetch
などがある。
@ WWW::Mechanize::Cached 1.32
WWW::Mechanize::Cached は1度取得したレスポンスを無条件に1日間キャッシュする。 WWW::Mechanize のサブクラスで、便利な機能が利用できるが、キャッシュは適当。
キャッシュは Cache::FileCache決め打ち。
@ LWP::UserAgent::WithCache 0.03
LWP::UserAgentのサブクラス。 Expires、Last-Modified、Etag ヘッダを考慮して処理する。
キャッシュは Cache::FileCache決め打ち。
@ URI::Fetch 0.04
fetch サブルーチンのみを提供するシンプルなモジュール。
キャッシュは Cache 系APIのモジュールを指定する。実際には Cache::Cache 系でもOK。 Last-Modified、Etag を考慮して処理する。
前回のアクセスから一定時間はキャッシュを返すようにする機能があり、RSS や Atom フィードを取得して利用するのに便利。
@ 今回は
URI::Fetch をチョイス。 our を使っているのでそのままでは Perl 5.005_03 では動かないが、use vars に書き換えれば問題なく動く。
- Perl CGI プログラムのテストには WWW::Mechanize::... (2006-02-18)
- Cache::Memcached 1.13 の Perl 5.005_03 対応 (2004-06-05)
- [ Perl ] Memcached を使ってみる (2004-01-12)
- Twitter ステータスを nDiki サイドバーに表示 (2007-11-09)
- さらにサーバ負荷状態悪化。対応に追われる。 (2006-03-04)
2006年2月18日 (土)
■ Perl CGI プログラムのテストには WWW::Mechanize::CGI を

CGI プログラムを書いていて、いつも困るのがリグレッションテスト。
パッケージのビルド時に実行するテストスーツ (make check / make test 用テストプログラム群) に含めておきたいが、さすがにその場で Web サーバの下へセットアップするわけにもいかない。 ミニ Web サーバを同梱してテストスーツ内で起動する方法はちょっとおおがかかりだし、ポート番号の選択やらサーバの停止の問題もあって、かなり面倒。
結局、テストスーツの中で環境変数や標準入力など CGI リクエスト環境をセットアップして、CGI プログラムを実行するという王道(?)かつ泥臭いテストを書くことになったりする。
何かいいものはないかと探していたところ、WWW::Mechanize::CGI というものをみつけた。
LWP::UserAgent を継承した WWW::Mechanize モジュールは Web ブラウジングを容易にする有名どころのモジュールである。
WWW::Mechanize::CGI モジュールはさらにこれを拡張したモジュールで、HTTP リクエストを、仮想的に CGI プログラムやサブルーチンへの呼出しにしてくれる。 これを用いるとあたかも Web サーバ上の CGI プログラムにリクエストしレスポンスを受けとっているかのように、テストプログラムを書くことができる。
素晴しい。
さっそく WiKicker のテストを書き換えてみた:
use Test::More tests => 2;
use WiKicker::WikICGI::Controller;
use WWW::Mechanize::CGI;
use File::Temp qw(tempdir);
use File::Spec;
my $www_dir = tempdir(CLEANUP => 1);
my $mech = WWW::Mechanize::CGI->new;
$mech->cgi(sub {
$ENV{PATH_INFO} = '' if $ENV{PATH_INFO} eq '/';
WiKicker::WikiCGI::Controller->new->run});
$mech->env($mech->env,
SCRIPT_FILENAME => File::Spec
->catfile($www_dir . '/wiki'),
SCRIPT_NAME => '/wiki');
my $response = $mech->get('http://localhost/wiki');
ok($response->is_success);
like($response->content,
qr|<title>WikiForum\[WiKicker\]: FrontPage</title>|);
WWW::Mechanize::CGI オブジェクトを new した後、cgi メソッドで CGI サブルーチンを指定するか、cgi_application メソッドで外部 CGI プログラムを指定する。 ここでは直接、CGI サブルーチン (WiKicker::WikiCGI::Controller->new->run を実行)を指定した。
なおここで WWW::Mechanize::CGI が使っている HTTP::Request::AsCGI 0.5 における PATH_INFO の扱いが Apache などとは違って、空でも必ず '/' が入るようになっている。 これだと WiKicker では困るので、サブルーチンのところで修正している。
後は必要ならば WWW::Mechanize::CGI::env で、追加の環境変数設定を行っておく。
セットアップが済めば通常の WWW::Mechanize と同様に get 等でリクエストを行いレスポンスを受けとることができるようになる。
いい。しばらく試してみて不具合がなさそうなら、定番のテストスタイルにしたい。
ちなみに Test::Harness 用の Test::WWW::Mechanize にあわせて、Test::WWW::Mechanize::CGI というものもある。 これらを用いるとさらにテストを書くのが楽になるが、依存するモジュールも多いので無理に使わないほうがいいかもしれない。
- Test::WWW::Mechanize で Web アプリケーションをテ... (2006-09-13)
- 一般ユーザで Apache 2.0 を起動する最小限の httpd.conf (2006-07-15)
- 他の Web サイトの情報を URI::Fetch でキャッシュ付き取得 (2005-10-29)
- CGI プログラム、Out of memory! に泣く (2001-01-04)
- [ WiKicker ] 「最近のアクセスログ」処理思案 (2004-01-17)
2006年7月15日 (土)
■ 一般ユーザで Apache 2.0 を起動する最小限の httpd.conf

- CGI.pm のデバッグ機能を用いたテスト
- WWW::Mechanize::CGI を用いた直接呼出しによるテスト
- WWW::Mechanize のテストのように自前で Perl で書かれたテスト用ミニサーバを立てる
- Apache から実行できるように配置して、Test::WWW::Mechanize でテスト
- Apache から実行できるように配置して、HTTP::WebTest でテスト
などがある。 Apache を使うのがより実際の環境に近いテストができるのだが、通常動いている Apache を使って make test でテストできるようにするとすると「どこに配置するか」などの問題がでてくる。
となればいっその事、自分(一般ユーザ)で専用に Apache を起動した方が良さそうだ。 httpd.conf を用意するのが面倒だが、highperformance.conf 等をみる限り実はそれほど必須の設定は多くないようである。
@ httpd.conf を書く
ということで Debian GNU/Linux sid の Apache (2.0.55-4) で必要な設定は何か試してみた。少なくとも以下の設定は書いておく必要があるようだ。
# httpd.conf for Debian GNU/Linux Apache 2.0.55-4 Listen 9100 ServerRoot . DocumentRoot /home/naney/htdocs ErrorLog error_log TypesConfig /etc/mime.types PidFile apache2.pid
これを httpd.conf として保存して、
/usr/sbin/apache2ctl -f httpd.conf
で起動すればアクセスできるようになる。
/usr/sbin/apache2ctl -f httpd.conf -k stop
で停止。
ServerRoot は起動時の -d オプションでも指定できるのだが、httpd.conf に書いておかないとうまく起動してくれなかった (-X を一緒に指定してデバッグモードにする場合は ServerRoot 無しに -d 指定だけでも動く)。
@ CGI プログラムを動くようにする。
CGI プログラムを動くようにするとすると例えば次のような感じ。
# httpd.conf for Debian GNU/Linux Apache 2.0.55-4 Listen 9100 ServerRoot . DocumentRoot /home/naney/htdocs ErrorLog error_log TypesConfig /etc/mime.types PidFile apache2.pid LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so Options +ExecCGI AddHandler cgi-script .cgi
@ make test で動くようにするには……
ディストリビューション独自のパッケージングなどに対応するように、多少泥臭く環境検出する必要があるが、なんとか make test から呼べそうだな。
最近は WWW::Mechanize::CGI がお気に入りなのだが、2つ以上の CGI プログラムにまたがるようなアプリケーションのテストには向かなさそうなので、今度この方法でも試してみたい。
- Perl CGI プログラムのテストには WWW::Mechanize::... (2006-02-18)
- SpiderMonkey の素のインタプリタでは CGI プログラムには役立たず (2006-12-11)
- [ WiKicker ] SpeedyCGI (2003-10-17)
- ColdSync (2004-05-05)
- mixipress でコミュニティ掲示板もチェック (2005-10-01)
2006年9月13日 (水)
■ Test::WWW::Mechanize で Web アプリケーションをテストファースト開発

テストファースト開発に慣れてしまうと、テストコード無しにプログラムを書くというのは不安でたまらなく感じてくる。
テストが欲しい。安らぎが欲しい。
今開発している WiKicker ベースの Web アプリケーションもだんだん機能が増えてきて、コードを触るのがコワくなってきた。
今回は Basic 認証等もあるので、WWW::Mechanize::CGI ではなくてきちんと deploy してから Test::WWW::Mechanize でテストすることにした。
Test::WWW::Mechanize、使ってみると WWW::Mechanize + Test::More よりテストを書くのも読むのも楽になった。
deploy が必要なリグレッションテストはさすがに t/ の下に入れておくのはどうかと思う。 プロジェクト的にはビルドサーバを用意して、そこで自動的にテストできるような環境を用意するのが良さそうだ。
- Perl CGI プログラムのテストには WWW::Mechanize::... (2006-02-18)
- 一般ユーザで Apache 2.0 を起動する最小限の httpd.conf (2006-07-15)
- SQLite とか DbUnit とか (2005-05-23)
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
- XAMPP で WiKicker を動かしてみた。PPM インストール OK。 (2007-02-09)
2006年12月12日 (火)
■ PAR::Repository でビルド済み Perl モジュールをネットワーク配信

@ 実行可能ファイル作成としての PAR
PAR といえば Perl スクリプトを実行可能ファイル(Windows なら EXE 形式ファイル)に変換するモジュールとして有名である。
ちなみに実行可能ファイルを作成する部分はは PAR 0.97 より PAR-Packer パッケージに分けられ、PAR 自体はインストールしやすい pure Perl なパッケージになっている。
@ PAR モジュールアーカイブからのローダとしての PAR
PAR が提供するもう一つの(こちらが本来はメイン?)機能は、プログラムの実行時に必要な Perl モジュールを PAR ファイルと呼ばれる Perl モジュールアーカイブファイルからロードする機能である。 XS モジュールなどもコンパイルすることができるどこかの環境で1度ビルドして PAR ファイルにしておけば、同じアーキテクチャのホスト上でそのまま利用することができる。
@ PAR リポジトリ
ロードしたい PAR ファイルはファイルパスだけではなく URL でも指定することができ、必要な時にオンデマンドでフェッチさせることができる。 これを使えば Perl プログラムの集中管理可能だ。
PAR 0.951 からは PAR リポジトリというコンセプトが追加され、パッケージ毎に作った PAR ファイルをサーバ上(あるいはローカル)のリポジトリに蓄積してオンデマンドでロードできるようになった。
個別に PAR ファイルを指定する従来の方式に比べてかなり便利そうである。 ということで試用してみた。
まずは
- PAR
- PAR::Repository
- PAR::Repository::Client
- PAR::Repository::Query
- PAR::Dist
- PAR::Packker
あたりをインストールし準備 OK。
@ 1. PAR リポジトリを作成する
最初に PAR-Repository に含まれている parrepo で。
parrepo create -r /tmp/PAR
PAR リポジトリファイルの中にはデータベースファイルが作成されるが、これは DBM::Deep というアーキテクチャ非依存のものを使っているので、Linux でも Windows でもどちらからでもアクセス可能である (つまり Linux 上でリポジトリをメンテできるということだ)。
@ 2. Perl パッケージを PAR ファイル化する
次に必要な PAR ファイルを作成する。 作成したいパッケージを展開してビルドし、blib ができている状態で PAR::Dist を使ってパッケージ化する。
perl Makefile.PL make make test perl -MPAR::Dist -e blib_to_par
例えば ActivePerl*1 上で WWW-Mechanize-1.20 を PAR ファイル化すると
WWW-Mechanize-1.20-MSWin32-x86-multi-thread-5.8.8.par
というファイルが作成される。
普段から ActivePerl で必要なライブラリは基本的に自前で PPM パッケージ化して、動作確認した上で PPM リポジトリに蓄積するようにしているので、合わせて次の手順でパッケージを作ることになる。
perl Makefile.PL nmake nmake test perl -MPAR::Dist -e blib_to_par make_ppm
@ 3. PAR リポジトリに PAR ファイルを登録する
PAR ファイルができたら parrepo でリポジトリに登録する。
parrepo inject -r /tmp/PAR -f xxx.par
@ 4. PAR リポジトリ上のライブラリを使用してみる
例えば先ほどの WWW::Mechanize がリポジトリに登録されている状態で
#!/usr/bin/perl
use PAR { repository => 'file:///tmp/PAR/' };
use WWW::Mechanize;
my $mech = WWW::Mechanize->new;
$mech->get('http://www.example.com');
print $mech->content;
というスクリプトを書いて実行すると、PAR リポジトリから WWW::Mechanize がロードされて正しく実行される。
ここでリポジトリを Web サーバへアップロードして、repository のところに URL を指定するようにすることもできる。 例えばリポジトリを http://www.example.com/PAR/ に配置したとすると
#!/usr/bin/perl
use PAR { repository => 'http://www.example.com/PAR/' };
use WWW::Mechanize;
my $mech = WWW::Mechanize->new;
$mech->get('http://www.example.com');
print $mech->content;
と書き換えることで、インストールしていない WWW::Mechanize を使用できるようになる。
@ Perl プログラムを実行形式化する
先ほどの Perl スクリプトを get_top_page.pl という名前で保存して pp で実行可能ファイル化する。
pp -o get_top_page.exe -M PAR::Repository::Client get_top_page.pl
とすれば get_top_page.exe という実行可能ファイルが作成される。 WWW::Mechanize はオンデマンドで http://www.example.com/PAR/ からフェッチされるので、アップデートが必要な場合は新しい PAR ファイルを作成してリポジトリを更新するだけでよい。 EXE ファイルを作成しなおして利用者に配付しなすといった作業も不要だ。
@ スクリプトもリポジトリにおく
さらには実行するスクリプトをも PAR リポジトリに置いておくことが可能だ。
例えば WWW-Mechanize に含まれている mech-dump をオンデマンドにフェッチして実行する実行形式ファイルは以下のコマンドで作成できる。
pp -o mech-dump.exe -M PAR::Repository::Client \
-e "use PAR { repository => 'http://www.example.com/PAR/', \
run => 'mech-dump' }"
@ まとめ
ActivePerl では PPM があるとはいえ、普通のユーザにちょっとしたプログラムを使ってもらうのに「ActivePerl をインストールして、PPM パッケージをインストールして、……」というのは手間すぎる。
pp で プログラムに必要なものを全てバンドルした実行形式化ファイルにするという方法ももちろんあるのだが、頻繁にアップデートするようなスクリプトの場合には、起動のための部分だけ pp で作成しておいてあとは PAR リポジトリで集中管理するというのもちょっと魅力的である。
- [ Perl ] PDL::PP で C extension を書く (2004-02-19)
- 自前 PPM リポジトリの管理 (2006-07-03)
- ActivePerl で Ming (2005-02-23)
- ActivePerl 5.8.8.820 の PPM では ppd/tar... (2007-02-05)
- XAMPP で WiKicker を動かしてみた。PPM インストール OK。 (2007-02-09)
2008年3月13日 (木)
■ Twitter のアイコンを Perl スクリプトで更新する

API 経由では Twitter のアイコンを変更できなさそうなので、WWW::Mechanize でアイコン画像をアップロードする Perl スクリプトを書いてみた。
#!/usr/bin/perl
use strict;
use warnings;
use WWW::Mechanize;
die "no file name" if @ARGV == 0;
my $file_name = $ARGV[0];
my $name = 'ユーザ名';
my $password = 'パスワード';
my $mechanize = WWW::Mechanize->new();
$mechanize->get('http://twitter.com/');
die unless $mechanize->success;
$mechanize->submit_form(form_number => 1,
fields => {
username_or_email => $name,
password => $password});
die unless $mechanize->success;
$mechanize->follow_link(text => 'Settings');
die unless $mechanize->success;
$mechanize->follow_link(text => 'Picture');
die unless $mechanize->success;
$mechanize->submit_form(
form_number => 1,
fields => {'profile_image[uploaded_data]' => $file_name}
);
die unless $mechanize->success;
- Twitter を使い始めて1年 (2008-04-06)
- MAILPIA による Twitter リプライチェック (2008-11-18)
- Twitter への書き込みを自動的に Skype ムードメッセージに設定する (2008-02-25)
- Flickr の写真を自動的に Twitter アイコンにする (2008-03-13)
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
2008年3月14日 (金)
■ 今日のさえずり - ホワイトデーはシガールにした

@ 2008年03月13日
- 13:01 WWW::Mechanize で Twitter のアイコンを変更するスクリプト書いた。
- 19:00 みんなの写ツ見てた。自分が follow している人だけのバージョンも見てみたい。[mb]
- 19:16 ホワイトデーはシガールにした。[mb]
- 22:40 [photo] SALE http://tinyurl.com/2q6mla
@ 2008年03月14日
- 15:22 さいきんブルーベリーをきらしていたせいか、目がしょぼしょぼする(あるいは寝不足)。
- 16:22 ASHFORD のミニ6穴保存バインダ(20mm)を買ってきたが、ASHFORD のリフィルがスムーズにはいらない。アホか。
- 17:04 Google カレンダーの保存が終わらないと思ったら、Google 系サービス軒並駄目なのか。
- 17:07 Google 復活。
- ほぼ日手帳をやめてミニ6穴見開き1週間ダイアリーに (2008-01-21)
- 今日のさえずり - みどりの窓口で、明日からの乗車券つかまされてた (2008-04-10)
- フレッシュリーダーから Google リーダーに乗り換え (2007-10-29)
- 今日のさえずり - 鳩三郎が会社にきた (2008-09-25)
- 今日のさえずり - 今日から、寄りかからないで生きていく (2008-01-21)
2008年4月29日 (火)
■ 今日のさえずり - 一緒に洗濯機で雑巾を洗ってしまっていた

@ 2008年04月28日
- 11:19 今から行くところ / ジャスコ。 http://logpi.jp/naney
- 12:27 ジャスコ到着。[mb]
- 13:02 ジャスコ満喫中。[mb]
- 13:05 未来屋書店で探していた「2分以内で仕事は決断しなさい」を見つけたので購入。平積みになってた。[mb]
- 14:53 フードコートでジャンク食ってアイスクリーム食って、まだジャスコで遊んでいるところ。[mb]
- 16:12 ようやくジャスコ出た。[mb]
@ 2008年04月29日
- 09:28 今やったこと / Twitter のページ構造変更にあわせて、WWW::Mechanize スクリプトを修正した。 http://logpi.jp/naney
- 13:36 今気づいた事 / 引退した5本指ソックスはワイヤーシェルフの掃除に好適。 http://logpi.jp/naney
- 13:39 今気づいた事 / 他の洗濯物と一緒に洗濯機で雑巾を洗ってしまっていたようだ。 http://logpi.jp/naney
- 18:36 今やったこと / Linux がスワップ使いきってどうにもならなくなったのでリブートしたところ。 http://logpi.jp/naney
- 19:46 気になるモノ / ユニクロのガンダムTシャツ。ズゴック・ゾック・パーフェクトジオング、カッコイイ! http://logpi.jp/naney
- 22:34 ドコモ料金案内iアプリ入れてなかったのでダウンロードした。[mb]
- 今日のさえずり - 4C-0.4 芯って予想以上に細い (2008-02-21)
- 今日のさえずり - スプーのえかきうた騒動について勉強している (2008-10-24)
- 今日のさえずり - 「手鼻をかむ」のはエコだと思う (2008-09-21)
- Twitter への書き込みを自動的に Skype ムードメッセージに設定... (2008-08-05)
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
スポンサード リンク
■よく検索されるキーワード
torrent(109) x31(45) thinkpad(31) 動画(29) 提案書(26) mp980(24) 手帳(24) windows(23) linux(23) 画像(21) 使い方(21) リフィル(21) debian(20) usb(20) tc-1(19) perl(19) 筆まめ(18) 壁紙(17) ほぼ日手帳(16) 冷蔵庫(14) ドラマ(13) wiki(13) 書き方(12) ダイソー(12) システム手帳(12) 宮根誠司(12) ノート(11) so905ics(11) 無印(11) バッグインバッグ(11) 映画(11) 設定(10) 修理(10) 宮根(9) ssh(9) a6(9) ほぼ日(9) 黒田征太郎(9) バッグ(9) gmail(8) 感想(8) 娘(8) f-01a(8) メモリ(8) gtd(8) ブログ(8) nikon(8) allinanchor:*.torrent(8) ボールペン(7) 方眼(7) ポイント(7) 4c(7) ヨドバシカメラ(7) ケース(7) twitter(7) apache(7) ht-01a(7) ヨドバシ(7) ubuntu(7) truecrypt(7) n-02a(7) 作り方(7) minolta(7) af(6) インストール(6) ガントチャート(6) mp3(6) zippo(6) hdd(6) emacs(6) レビュー(6) カバー(6) vq1005(6) 日本語(6) ハクキンカイロ(6) 無印良品(6) グレゴリー(6) 交換(6) nikkor(6) pixus(6)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザイン ビックカメラProcess Time: 0.99755s / load averages: 0.26, 0.23, 0.21
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)





スポンサード リンク