« 2010年9月 |
トップページ
| 2010年11月 »
2010.10.31
Adobe Creative Suite 出力対応店一覧をGoogle Mapsで表示させる(10)
アドビのCS5対応プリントショップのリストのページから、Google Mapsに表示させるやつの10回目。
前回 は、Adobe Creative Suite 出力対応店一覧が手入力で作られていることに起因したいろんなノイズに対応したHTML解析スクリプトが完成し、各印刷会社さんのステータスが得られました。
今回は、得られたステータスの住所から、Google Mapsに表示させるため、緯度/経度を取得するウェブサービス、Google Geocoding APIを軽く使ってみたいと思います。
まず、今回は、プログラムを組まないで、ブラウザのみでやってみることにします。
今回の例として、
東京都港区台場2-4-8
を使います。この住所の、緯度/経度が知りたいっていうことです。
さて、Google Geocoding APIの説明をみてみましょう。
Google Geocoding API - Google Maps API Web サービス - Google Code [code.google.com]
まず、「使用制限」の所をよく読んでおいてください。「Google Geocoding API の使用は、1 日あたり 2,500 件までという位置情報リクエストのクエリ制限の対象となります」「Geocoding API は Google マップと組み合わせて使用する場合にのみ使用できます」というあたりに注意しましょう。
次に、「ジオコーディング レスポンス」の所を読みますと、以下のような書式でリクエストすればよいということがわかります。
JSON 出力形式
以下の例では、Geocoding API は、「1600 Amphitheatre Parkway, Mountain View, CA」というクエリに対する json レスポンスをリクエストしています:
http://maps.google.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true_or_false
この例では、パラメータ sensor の値を true または false に明示的に設定する必要があることを強調するため、パラメータの値を変数 true_or_false のままにしてあります。
というわけで、この書式に合わせて、さっきの日本の住所を入れれば良さそうです。
しかし、URLに日本語を入れてもうまく動かないので、パーセントエンコーディングした文字列を用意します。
日本語の文字列をパーセントエンコーディングにするには、ブラウザのURL欄に以下のように入力します(JavaScriptが使えるブラウザで)。
javascript:alert(encodeURI('東京都港区台場2-4-8'));
そうすると、アラートダイアログが表示され、その中にパーセントエンコーディングされた文字列が入っています。
%E6%9D%B1%E4%BA%AC%E9%83%BD%E6%B8%AF%E5%8C%BA%E5%8F%B0%E5%A0%B42%EF%BC%8D4%EF%BC%8D8
あとは、得られた文字列を使い、Google Geocoding APIへのリクエストURLを作ります。
http://maps.google.com/maps/api/geocode/json?region=jp&sensor=false&address=%E6%9D%B1%E4%BA%AC%E9%83%BD%E6%B8%AF%E5%8C%BA%E5%8F%B0%E5%A0%B42%EF%BC%8D4%EF%BC%8D8
ダウンロードされてきたファイルは、以下のようになっていました。
{
"status": "OK",
"results": [ {
"types": [ "sublocality_level_4", "sublocality", "political" ],
"formatted_address": "日本, 東京都港区台場2丁目4−8",
"address_components": [ {
"long_name": "8",
"short_name": "8",
"types": [ "sublocality_level_4", "sublocality", "political" ]
}, {
"long_name": "4",
"short_name": "4",
"types": [ "sublocality_level_3", "sublocality", "political" ]
}, {
"long_name": "2丁目",
"short_name": "2丁目",
"types": [ "sublocality_level_2", "sublocality", "political" ]
}, {
"long_name": "台場",
"short_name": "台場",
"types": [ "sublocality_level_1", "sublocality", "political" ]
}, {
"long_name": "港区",
"short_name": "港区",
"types": [ "locality", "political" ]
}, {
"long_name": "東京都",
"short_name": "東京都",
"types": [ "administrative_area_level_1", "political" ]
}, {
"long_name": "日本",
"short_name": "JP",
"types": [ "country", "political" ]
} ],
"geometry": {
"location": {
"lat": 35.6266777,
"lng": 139.7742960
},
"location_type": "APPROXIMATE",
"viewport": {
"southwest": {
"lat": 35.6235301,
"lng": 139.7711484
},
"northeast": {
"lat": 35.6298253,
"lng": 139.7774436
}
}
}
} ]
}
この中の、results→geometry→locationのlatとlngが、緯度/経度になります。
早速、Google Mapsで表示してみましょう。
Google Mapsの検索欄に、「35.6266777, 139.7742960」と入れてみましょう。
このように、住所から緯度/経度を得る、ジオコーディングが出来ました。
次回は、Perlから、Google Geocoding APIに問い合わせするURLを生成して、レスポンスを取得するところをやってみたいと思います。
2010.10.31
16:24
[GoogleMaps ]
|
固定リンク
|
コメント
(0)
|
トラックバック
(0)
|
2010.10.30
trick() or treat();
#!/usr/bin/perl
trick() or treat();
exit;
sub trick() {
print "いたずらしたなう\n";
return 1;
# print "いたずらしない\n";
# return 0;
}
sub treat() {
print "かまって!\n";
return 1;
}
__END__
$ perl trickortreat.pl
いたずらしたなう
$
「かまってくれないといたずらしちゃうぞ」、ていう意味なら、文法的に逆らしいよね。
よく使うのは、open my $fh, '<'l, 'hoge.txt' or die $!; て言うやつですよね。開けなかったら死ねってやつ。
2010.10.30
18:19
[Perl ]
|
固定リンク
|
コメント
(0)
|
トラックバック
(0)
|
2010.10.29
Alienware M11x r2の外部モニタ接続はDisplayPortとHDMI、VGAはなし
Alienwareを購入しました。
Alienware M17x
2009/6/3発売 パワーと速度を兼ね備えたAlienwareブランドの17インチノートパソコン! 超高性能CPU&最高レベルのグラフィック性能で、ゲームや大量のプログラムも超高速で処理が可能!ハードコアゲーマーに最適の一台です。
Alienware M15x
2009年9月発売 世界で一番パワフルな15インチゲーミングノートパソコン!
Alienware M11x
2010年2月発売 モバイルサイズ&ゲーミングマシンのAlienwareシリーズノートパソコン!場所を選ばずに本格ゲームを楽しめる異次元11インチノート。
参考:
そんで、買ってから気づいたんですが、このAlienware M11x r2(リビジョン上がっている)、VGAポートがないので、直接VGAケーブルにつなげないのですね。あるのは、DisplayPortとHDMI。
そーいうこともあろうかとDisplayPortからVGAに変換するコネクタを……と思ったらこのコネクタ、MacBook用のMini DisplayPort用でした。つながらないじゃん……
変換コネクタ、そのうち買わなきゃいかんな……
2010.10.29
23:23
[パソコン・インターネット ]
|
固定リンク
|
コメント
(0)
|
トラックバック
(0)
|
2010.10.28
MacBook Air 11.6inchがでたので、せっかくだからAlienware M11xを購入した
この前発売されたMacBook Airは、評判いいですね。TwitterのTL(タイムライン)で、MacBook Airをポチッただの、先週金曜日のCSS Niteで鷹野さんがMacBook Air早速買ったとかだのいろいろみているわけですけれども、せっかくなので僕はAlienware M11xを購入したわけです。
Alienware M17x
2009/6/3発売 パワーと速度を兼ね備えたAlienwareブランドの17インチノートパソコン! 超高性能CPU&最高レベルのグラフィック性能で、ゲームや大量のプログラムも超高速で処理が可能!ハードコアゲーマーに最適の一台です。
Alienware M15x
2009年9月発売 世界で一番パワフルな15インチゲーミングノートパソコン!
Alienware M11x
2010年2月発売 モバイルサイズ&ゲーミングマシンのAlienwareシリーズノートパソコン!場所を選ばずに本格ゲームを楽しめる異次元11インチノート。
参考:
Alienwareといえば、今はDELLから販売されています。僕は、DELLから買うのは、会社のサーバをちゃんと設定する勉強するために、会社と同じ型のSC420サーバを購入した以来です(こういうことしているから金がなくなる……)。
M.C.P.C.: Mac miniが出たが、せっかくだから俺はDELLを選ぶぜ!
そんで、早速届いたので、起動する前に、いつも行う行事をしました。
▲裏蓋をあけます
▲HDDを取り出します
▲これdo台セットと500GBHDDです
▲バックアップします
〜〜〜
夜9時に届いたのですが、最初の3時間半はバックアップに費やされましたとさ。
2010.10.28
22:12
[パソコン・インターネット ]
|
固定リンク
|
コメント
(0)
|
トラックバック
(0)
|
2010.10.27
Adobe Creative Suite 出力対応店一覧をGoogle Mapsで表示させる(9)
アドビのCS4対応プリントショップのリストのページから、Google Mapsに表示させるやつの9回目。
前回 は、HTMLからスクレイピングした内容をうまく置換して、住所とTELとFAXが混ざった文字列からそれぞれを切り出そうと試みましたが、失敗。そして、いつの間にか元のAdobe Creative Suite 出力対応店一覧がCS5対応になってしまっていたので、対応しなければ行けないなーて言うところまでやりました。
今回は、Adobe Creative Suite 出力対応店一覧を改めてサイトから取得し直して、そのHTMLから、整理したデータが取れるように書き換えてしまいます。
さて、いままで、アドビシステムズさんのサーバに負荷をかけないように、ローカルにHTMLを取得して、それをWeb::Scraperで解析していたのですが、アドビシステムズさんのページがかってにCS5対応のリストに変わってしまっていましたので、これを取得し直します。
Adobe Creative Suite 出力対応店一覧をGoogle Mapsで表示させる(5)
と同じように、wgetで持ってくればいいので、こんな感じで。
$ rm printshop.html
$ wget http://www.adobe.com/jp/print/printshop/ -O printshop.html
あと、今回取得したHTMLに対応したスクリプトを書きます。
Filename: test9.pl
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Web::Scraper;
use YAML::Syck;
use Encode;
open my $fh, '<', 'printshop.html';
my $html = decode_utf8(do { local $/; <$fh> });
close $fh;
my $s = scraper {
process '//div[@class="tabcontent"][1]//table[@class="data-bordered max"]/tbody/tr', 'codes[]' => scraper {
process '//td[1]', pref => [ 'TEXT', sub { s/\s//g; } ];
process '//td[2]', company => [ 'TEXT', sub { s/\s//g; } ];
process '//td[3]', address => [ 'TEXT', sub { s/\s//g; s/TEL:.+$//i; return $_; } ];
process '//td[3]', phone => [ 'TEXT', sub { s/\s//g; if(m/TEL:([\d-]+)/i){return $1;};}];
process '//td[3]', fax => [ 'TEXT', sub { s/\s//g; s/:/:/g; if(m/FAX:([\d-]+)/i){return $1;};undef;}] ;
process '//td[4]', illustratorcs5 => [ 'TEXT', sub { return $_ =~m|yes|i ? 1 : undef; } ];
process '//td[5]', indesigncs5 => [ 'TEXT', sub { return $_ =~m|yes|i ? 1 : undef; } ];
process '//td[6]', pdfx1a => [ 'TEXT', sub { return $_ =~m|yes|i ? 1 : undef; } ];
process '//td[7]', pdfx4 => [ 'TEXT', sub { return $_ =~m|yes|i ? 1 : undef; } ];
};
};
my $scraped = $s->scrape($html);
print Dump($scraped);
exit;
__END__
実行結果はこんな感じ。
---
codes:
-
address: 北海道札幌市西区二十四軒2条6丁目1番8号
company: 株式会社須田製版
fax: 011-621-1500
illustratorcs5: 1
indesigncs5: 1
pdfx1a: 1
pdfx4: 1
phone: 011-621-1000
pref: 北海道
-
address: 北海道札幌市白石区菊水2条1丁目4-27
company: 正文舎印刷株式会社
fax: 011-813-2581
illustratorcs5: 1
indesigncs5: 1
pdfx1a: 1
pdfx4: ~
phone: 011-811-7151
pref: 北海道
-
...
-
address: 東京都板橋区志村1-11-1
company: 凸版印刷株式会社情報・出版事業部
fax: ~
illustratorcs5: 1
indesigncs5: 1
pdfx1a: 1
pdfx4: ~
phone: 03-3968-5111
pref: 東京都
-
address: 東京都文京区小石川4-14-12
company: 共同印刷株式会社
fax: ~
illustratorcs5: 1
indesigncs5: 1
pdfx1a: 1
pdfx4: ~
phone: 03-3817-2111
pref: 東京都
-
...
FAXが無い会社は、undefを代入するようにフィルタ内でif文使って分岐してみました。
今回やってみてわかったんですが、アドビシステムズさんは、一覧ページの更新が手動なんですね。FAXとFaxが混在、コロンが全角と半角が混在しとるで……(フィルタ内で対応済み)
次回は、やっと住所が取得できましたので、ジオコーディングに挑戦したいと思います。
2010.10.27
00:39
[GoogleMaps ]
|
固定リンク
|
コメント
(0)
|
トラックバック
(0)
|
2010.10.26
Adobe Creative Suite 出力対応店一覧をGoogle Mapsで表示させる(8)
アドビのCS4対応プリントショップのリストのページから、Google Mapsに表示させるやつの8回目。
前回 は、メインイベントのHTMLからスクレイピングした内容を確認し、文字列でYesなんて入っているところを、1かundefか、というとてもわかりやすい値に変換することをやりました。それを行うには、Web::Scraperでフィルタ機能というのがあって、無名関数で簡単にスクレイピングで得られた値を差し替えることが出来ることをやりました。
今回は、取得したデータのaddressというところに、住所と電話番号とFAX番号が混ざりすぎているので、ここからうまくそれぞれの項目に分離する、ということをやってみたいと思います。
さて、先回、取得したデータは、こんな感じでした。ちなみにこれはYAML::SyckのDumpになっています。
---
codes:
-
address: 北海道札幌市西区二十四軒2条6丁目1番8号 TEL:011-621-1000 FAX:011-621
-1500
company: 株式会社 須田製版
illustratorcs4: 1
indesigncs4: 1
pdfx1a: 1
pdfx4: 1
pref: 北海道
-
address: 北海道札幌市北区北8条西8丁目TEL:011-747-8886 FAX:011-756-7971
company: 北海道大学生活協同組合印刷 情報サービス部
illustratorcs4: 1
indesigncs4: 1
pdfx1a: 1
pdfx4: ~
pref: 北海道
-
...
-
address: 大分県大分市碩田町2-2-13TEL:097-536-4111 FAX:097-538-1149
company: 株式会社 双林社
illustratorcs4: 1
indesigncs4: 1
pdfx1a: 1
pdfx4: ~
pref: 大分県
addressという項目をみると、住所と電話番号とFAX番号が混ざっていますね。このままだと、ジオコーディングも出来ませんので、住所として成立するように分離したいと思います。ついでに、電話番号とFAX番号を独立した項目として取り出したいと思います。
さて、それを行うには、addressを取得するところに、フィルタで何かしてみればいいんじゃね?ていうことなんですけれども、いきなりWeb::Scraperで行うのも大変なので、簡単なテストスクリプトで試しましょう。
Filename: test7.pl
use strict;
use warnings;
use utf8;
binmode STDOUT => ':utf8';
my $address = "北海道札幌市西区○○号TEL:011-000-0000 FAX:011-000
-0001";
$_ = $address;
s/\n//g;
s/\s*?TEL:.+$//;
print;
print "\n\n";
$_ = $address;
s/\n//g;
s/^.+TEL:([\d-]+).+$/$1/;
print;
print "\n\n";
$_ = $address;
s/\n//g;
s/^.+FAX:([\d-]+).*$/$1/;
print;
print "\n\n";
実行結果
北海道札幌市西区○○号
011-000-0000
011-000-0001
あとは、Web::Scraperに組み込んでみますね。
Filename: test8.pl
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Web::Scraper;
use YAML::Syck;
use Encode;
open my $fh, '<', 'printshop.html';
my $html = decode_utf8(do { local $/; <$fh> });
close $fh;
my $s = scraper {
process '//div[@class="tabcontent"][1]//table[@class="data-bordered max"]/tbody/tr', 'codes[]' => scraper {
process '//td[1]', pref => 'TEXT';
process '//td[2]', company => 'TEXT';
process '//td[3]', address => [ 'TEXT', sub { s/\n//g; s/\s*?TEL:.+$//; return $_; } ];
process '//td[3]', phone => [ 'TEXT', sub { s/\n//g; s/^.+TEL:([\d-]+).+$/$1/; return $_;}];
process '//td[3]', fax => [ 'TEXT', sub { s/\n//g; s/^.+FAX:([\d-]+).*$/$1/; return $_;}];
process '//td[4]', illustratorcs4 => [ 'TEXT', sub { return $_ =~m|yes|i ? 1 : undef; } ];
process '//td[5]', indesigncs4 => [ 'TEXT', sub { return $_ =~m|yes|i ? 1 : undef; } ];
process '//td[6]', pdfx1a => [ 'TEXT', sub { return $_ =~m|yes|i ? 1 : undef; } ];
process '//td[7]', pdfx4 => [ 'TEXT', sub { return $_ =~m|yes|i ? 1 : undef; } ];
};
};
my $scraped = $s->scrape($html);
print Dump($scraped);
exit;
__END__
実行結果はこんな感じ。
---
codes:
-
address: 北海道札幌市西区二十四軒2条6丁目1番8号
company: 株式会社 須田製版
fax: 011-621-1500
illustratorcs4: 1
indesigncs4: 1
pdfx1a: 1
pdfx4: 1
phone: 011-621-1000
pref: 北海道
-
address: 北海道札幌市北区北8条西8丁目
company: 北海道大学生活協同組合印刷 情報サービス部
fax: 011-756-7971
illustratorcs4: 1
indesigncs4: 1
pdfx1a: 1
pdfx4: ~
phone: 011-747-8886
pref: 北海道
-
...
-
address: 東京都文京区小石川4-14-12
company: 共同印刷 株式会社
fax: 東京都文京区小石川4-14-12TEL:03-3817-2111
illustratorcs4: 1
indesigncs4: 1
pdfx1a: 1
pdfx4: ~
phone: 03-3817-211
pref: 東京都
-
address: 東京都板橋区志村1-11-1
company: 凸版印刷 株式会社情報・出版事業部
fax: 東京都板橋区志村1-11-1 TEL:03-3968-5111
illustratorcs4: 1
indesigncs4: 1
pdfx1a: 1
pdfx4: ~
phone: 03-3968-511
pref: 東京都
-
...
表記ぶれがあるので、この方法じゃあだめみたいだな、ということです。
次回は、もうちょっと場合分けを考えてみて、変なデータを拾わないようにしますね。あと、いつの間にかCS5対応のリストが出ちゃっていますが、やっぱりアドビさんのウェブサイトでは地図で出すという僕のアイディアが伝わっていないので、このまま作っていってみます。
2010.10.26
23:47
[GoogleMaps ]
|
固定リンク
|
コメント
(0)
|
トラックバック
(0)
|
2010.10.25
PS3でPCエンジンのグラディウスプレイするとセーブできるので余裕でクリアできるよ
PLAY STATION 3で、PCエンジンゲームアーカイブとして、グラディウスが売っていたので買ってみました。
んで、さすがに最近は反射神経が落ちてきているのですが、PCエンジンのゲームアーカイブだと、もともとセーブの無いゲームであってもPS3側で状態を丸ごとセーブできるので、要所要所でセーブしておけば、いくら反射神経だめでも脳みそやっつけることが出来るぞ!
装備はDOUBLEが強い。お勧め。
2010.10.25
23:39
[ゲーム ]
|
固定リンク
|
コメント
(0)
|
トラックバック
(0)
|
2010.10.24
WinBook WA3512Bが熱で落ちやすいのは、放熱フィンにゴミがたまっているためだった
(2010-10-25 18:10追記) このエントリ内で直ったかのように見えたWinBookですが、1時間ぐらい使っているとやっぱり突然停止しちゃいました。やっぱゴミとるぐらいだと直らないんですかね……
最近Winbook WA3512Bが、Windows起動中に熱で落ちてしまうようになったので、頭にきて、Alienware M11xを注文しちゃったんですけれども、ちょっと思いついて、Winbookの裏ぶたを開けて、様子を見てみることにしました。
このマシンは、iPhone製造で有名になったFoxconn製なんですけれども、CPUとチップセットの上部に銅製のヒートパイプを配置し、マシンの隅に配した放熱フィン+空冷ファンで冷やしています。
んで、空冷ファンの隙間から、放熱フィンのほうを覗いてみたら、本来銅製のフィンが見えるはずなのに、今は見えなくなっています。ちょっとこじってみたら、ものすごい量の綿ぼこりが出てきました!
つまり、フィンに空冷ファンの風が通らなくなっていたわけです。どうりで、外部からファンで風をより多く送るようにしたのにやっぱり暴走するはずだ……
というわけで、ごみを除去したので、熱で落ちないマシンになっちゃいました。Alienware、2010/10/28まで今だけローン金利0%だからということで24回分割で申し込んじゃったんだよね。どうしよう……
Alienwareを購入するコツ:まず下のリンクからスペックと価格を見てから、次に家電量販店に行ってみよう。僕はヨドバシカメラに行ったんですけれども、スペックと価格を見比べると、ALIENWAREのほうが安いように見えてくる不思議!
Alienware M17x
Alienware M17x
2009/6/3発売 パワーと速度を兼ね備えたAlienwareブランドの17インチノートパソコン! 超高性能CPU&最高レベルのグラフィック性能で、ゲームや大量のプログラムも超高速で処理が可能!ハードコアゲーマーに最適の一台です。
Alienware M15x
Alienware M15x
2009年9月発売 世界で一番パワフル な15インチゲーミングノートパソコン!
Alienware M11x
Alienware M11x
2010年2月発売 モバイルサイズ&ゲーミングマシンのAlienwareシリーズノートパソコン!場所を選ばずに本格ゲームを楽しめる異次元11インチノート。
参考:
2010.10.24
23:24
[パソコン・インターネット ]
|
固定リンク
|
コメント
(0)
|
トラックバック
(0)
|
2010.10.23
CSS Nite in NIIGATA vol.2行ってきた
新潟市で開催されたCSS Nite in NIIGATA vol.2に行ってきました。
当初、同日に東京で開催されるDTPの勉強会に出ようかと思ったんですけれども、12月に予定されている日本学生支援機構から借りた奨学金の返済金を用意するには、東京に行ってられないので、地元で開催されるCSS Niteにしました。
実は、その後OSC2010 NIIGATAが同日に開催されることが判明し、こちらは参加費無料なんで、しまったこっちにすればよかったとか思ったけれども、こっちは会場が新潟大学五十嵐キャンパスということで、交通の便があり得ないほど悪いとことなので(自動車だとね)、行くのをやめた次第。
CSS Niteですが、益子さんのHTML5+CSS3の講義は、社内でWeb制作の教育訓練を担当したりしなかったりすることがある僕にとっては有益でした。
今後もこういう機会があれば参加したいなあと思います。
2010.10.23
22:42
|
固定リンク
|
コメント
(0)
|
トラックバック
(0)
|
2010.10.22
コンピュータ将棋プロジェクト「あから」が2010年に誕生したのも必然
何も言わずにこれをみてくれ。
情報処理学会-あからのキャラクターができました [www.ipsj.or.jp]
▲あから2010
Amazon.co.jp: アンドロイド・アナ MAICO 2010 DVD-BOX: 舛成孝二, 丹下桜, 緒方恵美, 置鮎龍太郎, 山崎和佳奈, 岸野幸正, 露木茂, 清水としみつ: DVD [www.amazon.co.jp]
▲MAICO 2010のスーパーマイコ
方向性が同じwww
2010.10.22
23:48
[ネタ ]
|
固定リンク
|
コメント
(0)
|
トラックバック
(0)
|