ブラウザのページの保存をコマンドで実行する

wgetにはページに含まれる画像とかCSSも含めて保存する機能がある。コマンドにするとこれだけ。

wget -nd -k -p -e robots=off -P ./ http://www.banana.co.jp/

実行するとこのようにファイルを保存してくれる。

$ ls
FooterLogo.gif              Menu02_02_off.jpg           Menu03_07_off.jpg           btn_menu_sp.gif             jquery.easing.min.js        top_blogger2_pc.jpg
GlobalMenuSp_Categori01.gif Menu02_02_sp.jpg            Menu03_07_sp.jpg            btn_n_t_off.gif             jquery.vgrid.min.js         top_blogger3_pc.jpg
GlobalMenuSp_Categori02.gif Menu03_01_off.jpg           Menu04_01_off.jpg           common.css                  kids_banner.gif             top_blogger_pc.jpg
GlobalMenuSp_Categori03.gif Menu03_01_sp.jpg            Menu04_01_sp.jpg            copy.gif                    logo.gif                    top_diet_pc.jpg
GlobalMenuSp_Categori04.gif Menu03_02_off.jpg           Menu04_02_off.jpg           copy_sp.gif                 logo_sp.gif                 top_fatburn_pc.jpg
Grid.css                    Menu03_02_sp.jpg            Menu04_02_sp.jpg            copyright.gif               page_top_off.gif            top_immunity_pc.jpg
Menu01_01_off.jpg           Menu03_03_off.jpg           Menu04_03_off.jpg           defalt.css                  rollover.js                 top_juken_pc.jpg
Menu01_01_sp.jpg            Menu03_03_sp.jpg            Menu04_03_sp.jpg            favicon.ico                 scroll.js                   top_kafun_pc.jpg
Menu01_02_off.jpg           Menu03_04_off.jpg           Menu04_04_off.jpg           form.js                     swfobject.js                top_main_pc.jpg
Menu01_02_sp.jpg            Menu03_04_sp.jpg            Menu04_04_sp.jpg            import.css                  top_3step_pc.jpg            top_morning_pc.jpg
Menu01_03_off.jpg           Menu03_05_off.jpg           SizeLBG.jpg                 index.css                   top_antioxidative_pc.jpg    top_natsubate_pc.jpg
Menu01_03_sp.jpg            Menu03_05_sp.jpg            banner_fieldwork.jpg        index.html                  top_asports_pc.jpg          top_shigaisen_pc.jpg
Menu02_01_off.jpg           Menu03_06_off.jpg           banner_recipe.jpg           jquery-1.9.0.min.js         top_benpi_pc.jpg            top_trend_pc.jpg
Menu02_01_sp.jpg            Menu03_06_sp.jpg            bg_n_t.gif                  jquery-latest.js            top_bihada_pc.jpg           top_uv_pc.jpg

wgetがないなら

brew install wget

JavaScriptで後方置換を行う

無名関数を使いargumentsを使えば良いようだ

console.log('anpan man'.replace(/([a-z]+)\sman/, function() { return arguments[1] + ' woman' }));
console.log('niku man'.replace(/([a-z]+)\sman/, function() { return arguments[1] + ' woman' }));
console.log('pantsu man'.replace(/([a-z]+)\sman/, function() { return arguments[1] + ' woman' }));

以下が結果

anpan woman
niku woman
pantsu woman

Redisで特定のデータベースのキーだけを全て削除する

flushallを使えばRedis全体のデータを消せるが、特定のデータベース番号のキーだけを全て消したいケースがある。それにはflushdbが使える。

127.0.0.1:6379> select 0
OK
127.0.0.1:6379> keys *
1) "index2"
2) "index"
3) "index3"
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) "hoge2"
2) "hoge3"
3) "hoge1"
127.0.0.1:6379[1]> flushdb
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "index2"
2) "index"
3) "index3"

Redisで特定のキーに一致するデータを消す

ポテコは私のものだから消したい

127.0.0.1:6379[1]> keys *
1) "_potelong_1"
2) "_poteko_10"
3) "_poteko_11"
4) "_poteko_12"

一度外に出て取得した値をxargsを経由してdelにかけるという仕組み。例は127.0.0.1のRedisのデータベース[1]に含まれる_poteko_*を削除している。

[vagrant@vagrant-fedora20 ~]$ redis-cli -h 127.0.0.1 -n 1 keys _poteko_* | xargs redis-cli -h 127.0.0.1 -n 1 del
(integer) 3

この通り消えた

127.0.0.1:6379[1]> keys *
1) "_potelong_1"

Thanks

qiita.com

.htaccessでP3Pのheaderを設定する

P3Pコンパクトポリシーを設定することがあると思うが、.htaccessでも設定できるようだ。そのホストに対して設定したいだけならアプリケーションより.htaccessに記述する方が管理も楽そうだな。

Header set P3P 'CP="CAO PSA OUR"'

Thanks

stackoverflow.com

rel="canonical" に記述できるURLはhttpから始まるのかなあ

私が悩んでるのはSEOの視点からではなくて、ルール的なところ。

canonicalを読んで調査してたんだけど、canonical/が指定してある、ドメインを含まない絶対パスを指定している例を見かけた。てっきりhttpから始まるURLじゃないとダメだと思っていたので、正確な情報を求めて色々探したが明確な情報がなく。

まあhttpから始めてれば問題ないんだけど、クローラー作ったりする時に困るかなということで私の中で情報を固めてみた。

結果的に参考にしたのはGoogleのウェブマスターツールヘルプ

support.google.com

このページの中に以下のような記述があった

エラーの回避策: rel="canonical" リンク要素では、相対パスではなく絶対パスを使用します。

適切な構造: https://www.example.com/dresses/green/greendresss.html
不適切な構造: /dresses/green/greendress.html

絶対パスを指定するのは分かったけど、例のパスはどっちも絶対パスなのではないかなと思ってしまった。私の中で上記の例は絶対URLと絶対パスという区分けになっていたんだけど、Google的には下のは相対パスってことになるんだろうか。ここは疑問点としていつまでも持っておこうと思う。

とりあえず「絶対パス」という用語を一旦忘れて例をみる限り、httpから始まる指定がいいってことだろうか。

まあ一歩下がって考えれば

読み手としては、このように柔軟にクローラーが処理するようにすれば解決する些細な問題であり、ページ自体の作者としてはhttpから指定しておけば問題ないというだけの話なんだけどねw

JavaScriptでIE8からIE11までを判定する

こんな感じだろうか。参考サイトのコードを私好みに改変して、ロジックについてはIE10とIE11を区別して判定したかったのでdocument.documentModeを使った処理の所を分割してみた程度かなあ。

var UserAgent = {
isIE: function() {
return UserAgint.isIE8 || UserAgent.isIE9 || UserAgent.isIE10;
},
isIE8: function() {
return typeof window.addEventListener == "undefined" && typeof document.getElementsByClassName == "undefined";
},
isIE9: function() {
return document.uniqueID && typeof window.matchMedia == "undefined";
},
isIE10: function() {
return document.uniqueID && document.documentMode === 10;
},
isIE11: function() {
return document.uniqueID && document.documentMode === 11;
}
};
switch (true) {
case UserAgent.isIE8():
console.log('ie8');
break;
case UserAgent.isIE9():
console.log('ie9');
break;
case UserAgent.isIE10():
console.log('ie10');
break;
case UserAgent.isIE11():
console.log('ie11');
break;
}

IE10とIE11っていろいろコード書いてきたけどそんなに挙動変わらなかったかな。だからそこまで区別する必要ないんだろうけど、IE11が出てもなお、ChromeとかFirefoxとかとJSの挙動が違う所があって対応が大変だ。IE12が出たら一週間くらいは検証と対応作業に入るように事前に動かないといけないなw

Thanks

w3g.jp

PHPのビルトインウェブサーバーで簡単動作確認

PHP5.4から使えるビルトインウェブサーバーを使えば、ローカルにApacheを入れたりすることなく、インスタントにサーバーをその都度好きなホストで、好きなディレクトリを指定して起動させることができるらしい。

php -S localhost:8080 -t dir

例えばIEのJSテストをしたい時に、modernIEを複数立ち上げて確認に入るが、静的ファイルではディスクマウントなどしなければいけなくて面倒だしカッコ悪いってことで、ie-testという名のフォルダを作ってファイル設置して実行してみた。

php -S localhost:8080 -t ie-test
PHP 5.5.20 Development Server started at Sat May 23 09:29:00 2015
Listening on http://localhost:8080
Document root is /Users/hoge/apps/ie-test
Press Ctrl-C to quit.

そして指定したホスト&ポートにアクセスしてみると

f:id:hoge:20150523122330p:plain

これでVMIEでもこのホストを入れてチェックできるはず。いちいちファイルをマウントしたり、ちょっとしたテスト専用のホストをローカルのApacheとかに設定する必要がなくて楽だな。ちなみにローカルのVMから読み込ませたい時はIPアドレス直指定で起動する感じかなあ。

ちなみにVMとかからアクセスさせたい時はIPアドレス直指定でやれば良い。自分のPCのローカルIPを調べて、そのIPの8080ポートとかで起動すればいいってこと。