1381318 ランダム
 HOME | DIARY | PROFILE 【ログイン】

傀儡師の館.Python

PR

Recent Posts

Calendar

Keyword Search

▼キーワード検索

Category

Archives

Freepage List

Rakuten Profile


kugutsushiさん

怠惰な人

フォローする

Free Space

設定されていません。

全1781件 (1781件中 1-10件目)

1 2 3 4 5 6 >

2015年08月21日
楽天プロフィール XML
カテゴリ:Python
私が比較的よく訪れるサイトの一つにthe mouse vs. the pythonpython programming from the frontlinがある。Pythonプログラミングのヒントがいろいろ掲載されるので好きなサイト。

今日は、Getting Your Screen Resolution with Pythonというのが載っていたのでやってみた。

  • Using the Linux Command Line
  • Using PyGTK
  • Using wxPython
  • Using Tkinter
  • Using PySide / PyQt

それぞれの記述がある。いずれにせよ、下回りは、Windowsなら PyWin32 の win32api か ctypes 、Mac なら AppKit とか、プラットフォームに依存しているわけだが、上記のようなクロスプラットフォームな GUI のフレームを使うことによって吸収されるので、意識する必要はない。

ちなみに、最初の Linux の例では、X Window 環境なら xrandr | grep '*' でコマンドの出力から '*' のある行を取り出して、最初の部分に解像度があるので、テキスト処理をしているというもの。コマンド出力をちょっと処理してというのを subprocess.Popen でパイプ処理してという類の参考になる。つまり、こんな感じ、あとでパイプ処理を他の用途に流用できるようにしてみた(1つコマンドを実行して、その結果を2つ目のコマンドで処理してのパターン)。


import subprocess

def command2pipe(cmd1, cmd2):
p = subprocess.Popen(cmd1, stdout=subprocess.PIPE)
p2 = subprocess.Popen(cmd2, stdin=p.stdout, stdout=subprocess.PIPE)
p.stdout.close()
first_line, rest_lines = p2.communicate()
return(first_line, rest_lines)

if __name__ == '__main__':
cmd1 = ['xrandr']
cmd2 = ['grep', '*']
resolution_string, junk = command2pipe(cmd1, cmd2)
resolution = resolution_string.split()[0]
width, height = resolution.split('x')
mesg = "Resolution: %sx%s" % (width, height)
print(mesg)


というのはさておき、それぞれの例をやってみたが、Linux 上では問題なく動いた。 Windows 10 上でも Linux のは別として、すべて問題なく動いた。クロスプラットフォームではなく Windows 上だけで動くことを前提であれば、Win32api や ctypes で呼び出した方が、読み込み時間が少ないので速い。

from win32api import GetSystemMetrics

print "Width =", GetSystemMetrics(0)
print "Height =", GetSystemMetrics(1)

か、もっと最低限の読み込みだと、

import ctypes
user32 = ctypes.windll.user32
screensize = user32.GetSystemMetrics(0), user32.GetSystemMetrics(1)

How do I get monitor resolution in Python? を見ると、もうちょっと、正確にやるにはどうしたらよいかというのも色々議論がある。例えば、Windows 上で DPI やデスクトップスケーリングを考慮した場合にはどうなるとか。(dpi_and_the_desktop_scaling_factor)。

ところで複数のモニターとか接続してたらどうなるのか。あれこれ考慮し始めると面倒なことになる。なので、先人の成果をいただいて、

pip install screeninfo


from screeninfo import get_monitors
for m in get_monitors():
print(str(m))

でよいかと。すばらしい。





楽天SocialNewsに投稿!

Last updated  2015年08月21日 05時22分11秒
コメント(0) | コメントを書く

2015年08月06日
カテゴリ:Python
Pascal van Kooten さんの yagmail (Yet Another GMAIL client) を使ってみた。

インストール

pip install yagmail
~/.yagmail にアカウント名だけ1行入力しておき、メールを送信してみる。

import yagmail
yag = yagmail.SMTP()
contents = ['This is the body, and here is just text http://somedomain/image.png',
'You can find an audio file attached.', '/local/path/song.mp3']
yag.send('to@someone.com', 'subject', contents)
そうすると、パスワードを入力できるのだが、入力しても、

smtplib.SMTPAuthenticationError: (534, '5.7.9 Application-specific password required. Learn more at\n5.7.9 https://support.google.com/accounts/answer/185833 jdddddddddddddd.96 - gsmtp')
のようなエラーが表示されてメールを送信できない。

アプリ パスワードでログインのページを参照する。2 段階認証プロセスを使用してあるアカウントから送信したので、このエラーとなったと分かる。Google のアプリパスワードを設定してやり、表示されたコードをパスワードに設定すると、メールが送信できるようになった。

まずは、アプリパスワードを生成して、上記のコードの一部を

yag = yagmail.SMTP('GMAILのアカウント', 'アプリパスワード')
と書き換えてメールを送信すると、送信成功。

そのままスクリプトの中に入れておくのは、よろしくないので、keyring に登録し直す。

yagmail.register('GMAIL のアカウント', 'アプリパスワード')
を実行して、keyring に登録し直す。これで、設定スクリプトは削除して、最初のスクリプトでメールが送信できるようになった。HTML メールも、画像の添付も簡単なので便利。yagmail の使い方。yagmail 素敵。

スクリプトから生のパスワードを追い出すには、keyringを使うのがいいなと改めて認識。次のページも参照。


















楽天SocialNewsに投稿!

Last updated  2015年08月06日 08時56分39秒
コメント(1) | コメントを書く

2015年07月14日
カテゴリ:どうでもいいこと
最近、忙しくてブログの更新ができない。買い物でちょっと気分転換。

SoundLink Mini Bluetooth speaker II を買った。なかなかいい。気に入った。小さいけど、いい感じの音が出る。スマホや MacBook Air から音を出すときには、これを使っている。Bluetooth で簡単に接続できるので、ちょっと別室に持って行ってとかするときも便利。ちなみに、衝動買いしたので、直販で購入した。楽天のショップで買ったほうがポイントがついてよかったかなとか思いつつ、まあ、そういう小さいことはどうでもいいや。楽しい。


【新品/送料無料:沖縄・離島を除く】【新品・送料無料】BOSE ボーズ SoundLink Mini Bluetooth speaker II [パール]






Last updated  2015年07月14日 23時20分42秒
コメント(0) | コメントを書く

2015年05月21日
カテゴリ:どうでもいいこと
日本の高密度集積技術は中国の足元にも及ばない。




日本の満員電車もすごいけど

なんか違う世界。


このぐらだとほのぼのしてる。






楽天SocialNewsに投稿!

Last updated  2015年05月22日 01時23分30秒
コメント(0) | コメントを書く

2015年04月12日
カテゴリ:Python
以前、Python のファイル参照や操作は面倒だというあなたに path モジュール という記事を書いた。標準ライブラリの os.path はイマイチ使いにくい。

Python を使ってディレクトリやファイルをたどりながら何かするのは面倒。たとえば、このディレクトリの下のファイル名が「~」で終わっているファイルを削除したいとかいうのを書こうとすると、unix だったら find コマンドを使って、find . -name \*~ -print -exec rm {} \; とかあるわけで、そんな風にもっと簡単にできないかなぁと思う人も多いだろう。で、path モジュールを使えば、この手のものも簡単に書けるようになる。

path だと、

import path

d = '/var/apache/htdocs'
for f in d.walkfiles('*~'):
f.remove

のような書き方ができた。ちなみに、os.path (python 2) を見ると os.path.walk があるが os.path (python 3) にはない。os.walk が残っている。python 3 では、pathlib — オブジェクト指向のファイルシステムパス が追加されているが、やっぱりもっと直感的に使えるようなものが欲しい。

そこで、pyfs の登場となる。"pip install pyfs" でインストール。

import fs

target_path = /var/apache/htdocs

# 一ファイルずつ削除
for f in fs.find('*~', target_path):
fs.rm(f)


# あるいは、まとめて削除

to_delete = fs.find('*~', target_path)
fs.rmfiles( to_delete )

path や pathlib のようにファイルパスをオブジェクトとして、それを使って操作するという感じではなく、直接的に UNIX のコマンドのような感じで操作できる。ということで、気に入ってしまった。

ソースを見てみればわかるが、かなりの部分が os.path や os をラップしているだけなので、基本を覚えるのは簡単。

fs.exists(path) : os.path.exists(path)
fs.isfile(path) : os.path.isfile(path)

fs.rename(oldPath, NewPath, **kwargs) : os.rename(oldPath, newPath, **kwargs)
fs.chdir(path, **kwargs) : os.chdir(path, **kwargs)
fs.stat(path) : os.stat(path)
fs.ctime(path) : os.stat(path).st_ctime
fs.atime(path) : os.stat(path).st_atime
fs.mtime(path) : os.stat(path).st_mtime
fs.abspath(path, **kwargs) : os.path.abspath(path, **kwargs)
fs.normalize(path, **kwargs) : os.path.normpath(path, **kwargs)
fs.rm(path, **kwargs) : os.unlink(path, **kwargs)
fs.unlink(*args, **kwargs) : os.unlink(path, **kwargs)
fs.rmdir(path, recursive=True, **kwargs) : shutil.rmtree(path, **kwargs)
fs.rmfiles(paths, **kwargs) : os.unlink(path, **kwargs)
fs.exists(path, **kwargs) : os.path.exists(path, **kwargs)
fs.cwd() : os.getcwd()
fs.basename(path, ext="") : os.path.basename(path).replace(ext, "")
fs.dirname(path) : os.path.dirname(path)
fs.sep : os.path.sep

これらに加えて、

fs.truncate(path, **kwargs) : path 以下のすべてのファイルとディレクトリを削除
fs.rmdir(path, recursive=True, **kwargs) : path のディレクトリを削除
(再帰的に削除は、recursive=True を指定。
os.rmdir か os.rmtree で削除している)
fs.rmfiles(paths, **kwargs) : リストで渡されたファイルを削除
fs.rmdirs(paths, **kwargs) : リストで渡されたディレクトリを削除
fs.mkdir(path, recursive=True, **kwargs) : Unix コマンドの mkdir と同じ。
recursive=True で、mkdirs
fs.touch(path) : Unix のタッチコマンドと同じ。
fs.list(path='.') : os.listdir(path) の結果を isfile してファイルだけ残して、
iterable にしている。
fs.listdirs(path='.') : os.listdir(path) の結果を isdir してディレクトリだけ残して
iterable にしている。
fs.find(pattern, path='.', exclude=None, recursive=True) : パターンに指定されたファイルを
iterable に返す。
exclude で除外ディレクトリも指定できる。再帰的適応も可。
os.walk で走査して、fnmatch.filter でフィルタしている。
fs.finddirs(pattern, path='.', exclude=None, recursive=True) : find のディレクトリ版。
fs.join(*args, **kwargs) : os.path.join(*args, **kwargs) と同じ。
+リストで引数を渡すことができる。
fs.extname(path, **kwargs) : name, ext = os.path.splitext(path, **kwargs) の ext を返す。
fs.open(path, mode='r', **kwargs) : 標準の open(path, mode, **kwargs)
fs.write(path, content, encoding="UTF-8", append=False, raw=False) : 標準の open を使って
エンコード指定で書き込む。
fs.read(path, encoding="UTF-8") : 標準の open を使って、エンコード指定で読み込む。
fs.append(*args, **kwargs) : fs.write(*args, append=True, **kwargs)
fs.get(*args, **kwargs) : fs.read(*args, **kwargs)
fs.put(*args, **kwargs) : fs.write(*args, **kwargs)
fs.filename(*args, **kwargs) : fs.basename(*args, **kwargs)
fs.extension(*args, **kwargs) : fs.extname(*args, **kwargs)

要するに、

a pythonic file system wrapper for humans

An easy to use file system wrapper for Python that aims to simplify os, os.path, os.walk, shutils, fnmatch, etc

ということ。

サンプルを少し見てみる。

*.xls か、*.xlsx を探してきて何かしたい。

for filename in fs.find(['*.xls', '*.xlsx']):
pass

config ディレクトリにある *.ini ファイルを local_* 以外取り出して何かしたい。

for filename in fs.find('*.ini', path='config', exclude='local_*'):
pass

Vagrantfile を config ディレクトリから探して何かしたい。見つからなければ None。

filename = next( fs.find('Vagrantfile', path='config'), None)

backup ディレクトリにある *.sql のうち最新のアクセス時刻があるファイルを取り出して何かしたい。

filename = max( fs.find('*.sql', path='backup'), key=fs.ctime)

.git ディレクトリを見つけて削除したい。

for dir in fs.finddirs('.git'):
fs.truncate(dir)

なくても困らないけど、あれば、便利で、書くコードが短くて済むし、可読性もよくなるので、ちょっとツールを作るときに重宝すると思う。





楽天SocialNewsに投稿!

Last updated  2015年04月13日 03時14分29秒
コメント(0) | コメントを書く

2015年03月25日
カテゴリ:Raspberry Pi
Raspberry Pi 用 PoE基板があればイーサネットケーブルから電源供給できるから電源を気にしなくて済むようになる。あちこちしかけるのにちょうどいい。とはいえ、Raspberry Pi 本体と合わせて 1万円ぐらいになっちゃうけど。

無線LANの AP をつくるかな。これにセンサーをつけたり、カメラをつけて防犯カメラとかにするとか、いろいろできそう。そういえば、まだカメラをつけてあれこれしてなかった。





楽天SocialNewsに投稿!

Last updated  2015年03月26日 02時30分27秒
コメント(0) | コメントを書く

2015年03月23日
カテゴリ:Python
処理したいファイルを GUI で選んで、何かするというのは、よく使うと思うので書いておく。

ファイルを選択するには、

GetFile(directory='', filename='', multiple=False, wildcard='All Files (*.*)|*.*', title="Select file(s)")

multiple=False だと、1つのファイルだけ選択でき、multiple=True だと複数ファイルを選択でき、リストが返される。

ディレクトリを選択したいときは、

GetDir(path="", title='Select a directory')

保存したいときは、

SetFile(directory='', filename='', overwrite=False, wildcard='All Files (*.*)|*.*', title="保存する"):

例えば、こうやって、ファイルを選択する。1つの場合と、複数の場合を試す。加えて、*.py だけ対象にするとかフィルタをかけられるのでやってみる。

# -*- coding: utf-8 -*-

import quickgui as q

filename = q.getfile(directory='/etc', multiple=False, wildcard='All Files (*.*)|*.*', title="ファイルを選択してください")
print(filename)
filename = q.getfile(directory='.', multiple=True, wildcard='Python sources (*.py)|*.py', title="ファイルを選択してください")
print(filename)

/etc を指定して、開いたところ。

カレントディレクトリを指定して開いたところ。


/etc/ntp.conf
[u'/home/kafka/work/quickgui/sample103.py']







楽天SocialNewsに投稿!

Last updated  2015年03月23日 06時07分52秒
コメント(0) | コメントを書く

カテゴリ:Python
以前、Python のファイル参照や操作は面倒だというあなたに path モジュール という記事を書いた。標準ライブラリの os.path はイマイチ使いにくい。

Python を使ってディレクトリやファイルをたどりながら何かするのは面倒。たとえば、このディレクトリの下のファイル名が「~」で終わっているファイルを削除したいとかいうのを書こうとすると、unix だったら find コマンドを使って、find . -name \*~ -print -exec rm {} \; とかあるわけで、そんな風にもっと簡単にできないかなぁと思う人も多いだろう。で、path モジュールを使えば、この手のものも簡単に書けるようになる。

path だと、

import path

d = '/var/apache/htdocs'
for f in d.walkfiles('*~'):
f.remove

のような書き方ができた。ちなみに、os.path (python 2) を見ると os.path.walk があるが os.path (python 3) にはない。os.walk が残っている。python 3 では、pathlib — オブジェクト指向のファイルシステムパス が追加されているが、やっぱりもっと直感的に使えるようなものが欲しい。

そこで、pyfs の登場となる。"pip install pyfs" でインストール。

import fs

target_path = /var/apache/htdocs

# 一ファイルずつ削除
for f in fs.find('*~', target_path):
fs.rm(f)

# あるいは、まとめて削除
to_delete = fs.find('*~', target_path)
fs.rmfiles( to_delete )

path や pathlib のようにファイルパスをオブジェクトとして、それを使って操作するという感じではなく、直接的に UNIX のコマンドのような感じで操作できる。ということで、気に入ってしまった。

ソースを見てみればわかるが、かなりの部分が os.path や os をラップしているだけなので、基本を覚えるのは簡単。

fs.exists(path) : os.path.exists(path)
fs.isfile(path) : os.path.isfile(path)

fs.rename(oldPath, NewPath, **kwargs) : os.rename(oldPath, newPath, **kwargs)
fs.chdir(path, **kwargs) : os.chdir(path, **kwargs)
fs.stat(path) : os.stat(path)
fs.ctime(path) : os.stat(path).st_ctime
fs.atime(path) : os.stat(path).st_atime
fs.mtime(path) : os.stat(path).st_mtime
fs.abspath(path, **kwargs) : os.path.abspath(path, **kwargs)
fs.normalize(path, **kwargs) : os.path.normpath(path, **kwargs)
fs.rm(path, **kwargs) : os.unlink(path, **kwargs)
fs.unlink(*args, **kwargs) : os.unlink(path, **kwargs)
fs.rmdir(path, recursive=True, **kwargs) : shutil.rmtree(path, **kwargs)
fs.rmfiles(paths, **kwargs) : os.unlink(path, **kwargs)
fs.exists(path, **kwargs) : os.path.exists(path, **kwargs)
fs.cwd() : os.getcwd()
fs.basename(path, ext="") : os.path.basename(path).replace(ext, "")
fs.dirname(path) : os.path.dirname(path)
fs.sep : os.path.sep

これらに加えて、

fs.truncate(path, **kwargs) :
path 以下のすべてのファイルとディレクトリを削除
fs.rmdir(path, recursive=True, **kwargs) :
path のディレクトリを削除
(再帰的に削除は、recursive=True を指定。
os.rmdir か os.rmtree で削除している)
fs.rmfiles(paths, **kwargs) : リストで渡されたファイルを削除
fs.rmdirs(paths, **kwargs) : リストで渡されたディレクトリを削除
fs.mkdir(path, recursive=True, **kwargs) : Unix コマンドの mkdir と同じ。
recursive=True で、mkdirs
fs.touch(path) : Unix のタッチコマンドと同じ。
fs.list(path='.') : os.listdir(path) の結果を isfile して
ファイルだけ残して、iterable にしている。
fs.listdirs(path='.') : os.listdir(path) の結果を isdir して
ディレクトリだけ残してiterable にしている。
fs.find(pattern, path='.', exclude=None, recursive=True) :
パターンに指定されたファイルを iterable に返す。
exclude で除外ディレクトリも指定できる。再帰的適応も可。
os.walk で走査して、fnmatch.filter でフィルタしている。
fs.finddirs(pattern, path='.', exclude=None, recursive=True) :
find のディレクトリ版。
fs.join(*args, **kwargs) :
os.path.join(*args, **kwargs) と同じ。
+リストで引数を渡すことができる。
fs.extname(path, **kwargs) :
name, ext = os.path.splitext(path, **kwargs) の ext を返す。
fs.open(path, mode='r', **kwargs) :
標準の open(path, mode, **kwargs)
fs.write(path, content, encoding="UTF-8", append=False, raw=False) :
標準の open を使ってエンコード指定で書き込む。
fs.read(path, encoding="UTF-8") :
標準の open を使って、エンコード指定で読み込む。
fs.append(*args, **kwargs) : fs.write(*args, append=True, **kwargs)
fs.get(*args, **kwargs) : fs.read(*args, **kwargs)
fs.put(*args, **kwargs) : fs.write(*args, **kwargs)
fs.filename(*args, **kwargs) : fs.basename(*args, **kwargs)
fs.extension(*args, **kwargs) : fs.extname(*args, **kwargs)

要するに、

a pythonic file system wrapper for humans

An easy to use file system wrapper for Python that aims to simplify os, os.path, os.walk, shutils, fnmatch, etc

ということ。
サンプルを少し見てみる。
*.xls か、*.xlsx を探してきて何かしたい。

for filename in fs.find(['*.xls', '*.xlsx']):
pass

config ディレクトリにある *.ini ファイルを local_* 以外取り出して何かしたい。

for filename in fs.find('*.ini', path='config', exclude='local_*'):
pass

Vagrantfile を config ディレクトリから探して何かしたい。見つからなければ None。

filename = next( fs.find('Vagrantfile', path='config'), None)

backup ディレクトリにある *.sql のうち最新のアクセス時刻があるファイルを取り出して何かしたい。

filename = max( fs.find('*.sql', path='backup'), key=fs.ctime)

.git ディレクトリを見つけて削除したい。

for dir in fs.finddirs('.git'):
fs.truncate(dir)

なくても困らないけど、あれば、便利で、書くコードが短くて済むし、可読性もよくなるので、ちょっとツールを作るときに重宝すると思う。






楽天SocialNewsに投稿!

Last updated  2015年04月13日 03時09分40秒
コメント(0) | コメントを書く

2015年03月15日
カテゴリ:どうでもいいこと
最近のアクセス数はこんな感じ。




quickgui について書いた効果なのかな。今はアクセス解析がついてないので、どこからどういうアクセスがあるのか分からないが、それなりに関心を集めたってことだと思うので、もう少し書いてみようかと思う今日この頃。

全然関係ないけど、米軍から動画流出 山城議長逮捕時の基地内映像 の動画が、Youtube にあるけど、挑発しまくり。逮捕してもらいたくてたまらないという感じ。だいたい逮捕されても、仕事に支障ないように老人集めてるし。


なんだかなぁ。

米軍拘束事件 抗議活動への不当介入 日本共産党

とか見たあと、こういう事実を目の当たりにすると、なんなんだろうと思う。事実を知った上で、こういう質問してるんだろうから。煽って、逮捕させて、国会質問って、自作自演の範疇。目的のためなら手段を選ばず。法は、自らのためのみ存在するって感じ。

大阪市、政務調査費領収書公開で、共産党へのカネの流れが明らかにw なんだかなぁ。

だって、党が関わっていない取引(たとえばパソコン購入)とかは別として、資料購入は赤旗、民主商工新聞、生健新聞とか党関係の発行物ばかり。印刷は当然関西共同とかどう見ても相見積もりをとっていると思えないところばっかしとか、党事務所に議員事務所をおいているところは党に家賃を払っているとか、政務調査費を党に入れようと一生懸命に見える、いろいろ楽しい支出が明らかになります。

ちなみに、この記事の掲載されている 日本共産党・民青同盟悪魔の辞典+ キンピー問題笑える査問録音公開中 はおもしろい。

話題はさらに変わって、これもなんだかなぁ。



田母神閣下界隈の赤坂のコリアンクラブが大好きで当然な人々のお里 とか、田母神俊雄ことコリアンクラブ田母神の正体 の記事がある、匿名党 とかも見ておく。

岡田克也氏、メルケル首相の慰安婦発言「日本政府に、とは言ってない」 も分けわからない。メルケル「和解」発言 独政府報道官も「正しくない」

「Appleのエンジニア」、新しいMacBookについて(真相を?!)語る なんだかこういうのを見ている感じ。




嘘字幕の古いの調べたら、総統ものでは 2009/09/16 のがあった。


もっと古いものでは、キーボードクラッシャーの空耳和訳 2007/11/01 が見つかった。

空耳といえば、本家。


嘘も繰り返すと、そう聞こえてくる。オソロシヤ。







楽天SocialNewsに投稿!

Last updated  2015年03月16日 04時06分49秒
コメント(0) | コメントを書く

2015年03月08日
カテゴリ:Python
最近書いた記事をちょっと振り返ってみる。

最近書いた quickgui 関連の記事



以前書いた wxpython 関連の記事


かなり前 (2010年に書いた記事) に wxPython 入門を書いたので、まとめておく。

当サイトでよく読まれている記事


ちなみに、当サイトで今よく読まれているページは、次のものらしい。RaspberryPi 関連の記事が上位にあるようだ。

  1. Raspberry Pi にシャットダウンボタンをつける
    閲覧数 1225 | 2014年12月22日

  2. Raspberry Pi に赤外線モーションセンサーをつないでみた
    閲覧数 905 | 2014年12月21日

  3. Raspberry Pi と Sony RC-S380/P、nfcpy で NFC カードの IDm を読み取る
    閲覧数 2450 | 2014年02月24日


Raspberry Pi 2 買おうかなぁw


【Raspberry Pi 2 ModelB】2015年2月1日発売最近機種!RaspberryPi2(ラズベリーパイ2)モデルB 英国製【Raspberry Pi 2 ModelB】2015年2月1日発売最近機種!RaspberryPi2(ラズベリーパイ2)モデルB 英国製 【売れ筋】【オススメ】






Last updated  2015年03月09日 07時44分16秒
コメント(0) | コメントを書く

このブログでよく読まれている記事

全1781件 (1781件中 1-10件目)

1 2 3 4 5 6 >

総合記事ランキング
Powered By 楽天ブログは国内最大級の無料ブログサービスです。楽天・Infoseekと連動した豊富なコンテンツや簡単アフィリエイト機能、フォトアルバムも使えます。デザインも豊富・簡単カスタマイズが可能!

Copyright (c) 1997-2015 Rakuten, Inc. All Rights Reserved.