2010年1月アーカイブ

FirefoxのアドオンPearl Crescent Page Saverを使って、コマンドラインからFirefoxの画面キャプチャを撮る方法。
なんかコマンドラインでの利用方法については日本語の紹介ページがないんだよなぁ。。。
ということでまとめてみました。

Pearl Crescent Page Saver
http://pearlcrescent.com/products/pagesaver/

0. FirefoxにPearl Crescent Page Saverをインストールしておく。
Pearl Crescent Page Saverには無料のBasic版と有料のPro版があります。
無料のBasic版ならFirefoxの「ツール」=>「アドオン」でアドオンウィンドウを開いて、「アドオンを入手」タブからPearlで検索すればインストール可。
有料のPro版は、Pearl Crescent Page Saverのサイトで支払い処置をすると(Paypal)、ダウンロード用のURLが来るので、それを保存してインストールします。

1. コマンドラインを立ち上げて、firefoxのインストールディレクトリへ行く。

まぁ、Pathにfirefoxのインストールディレクトリを登録すれば良いんでしょうけど、面倒なので。。。

2. コマンド打つ。
firefox -saveimage http://www.yahoo.co.jp
キャプチャされたファイルは、Firefoxで指定しているダウンロード先に保存されています。
「ツール」=>「オプション」でオプションウィンドウを開いて、「一般」タブにあるダウンロードの設定を確認してください。

まぁ、簡単ですね。
バッチとかで使うとなると、もう少し設定したくなるかと思いますので、そこら辺はコマンドにオプションつけて実行です。
Bacis版ではできないがPro版でできることなどありますので、本格的に利用するならPro版がいいかと思います。

  • キャプチャ先URLにURLパラメータなどがある場合(?や&)は、引用符で囲んでおく。
  • metaタグ内にrefresh指定があった場合、Pearl Crescent Page Saverは10秒待つ。Pro版なら「-saveoptions refreshmaxwait」で指定可能。
  • Pro版なら「-saveas」を付けて保存先を指定可能。
  • -saveas」でファイル名を指定するときには、パターンを使える。
    • %t:ページのタイトル
    • %u:ページのURL
    • などなど。
  • -saveas clipboard」でクリップボードに保存可能。
  • -saveas」にアップロードサーバを指定可能。
  • ブラウザウィンドウを指定するは、「-width」「-height」。単位はpx。
  • キャプチャするタイミングを指定するのは、「-savedelay」。単位はミリ秒。
  • flashをキャプチャするには、「-captureflash」。
  • flashのキャプチャを遅らせるには、「-saveoptions flashdelay」。Pro版。
  • -saveoptions」はPro版。
  • -saveoptions visible」:ブラウザで見えている範囲をキャプチャする。
  • -saveoptions maxwait=ms」:待機時間(ミリ秒)を指定する。
  • -saveoptions refreshmaxwait=ms」:refreshでの待機時間(ミリ秒)を指定する。
  • -saveoptions delay」:「-savedelay」と同じ。
  • -saveoptions flashdelay=ms」:上述。読み込み後にさらに待機するのと同じことかな。。
  • -saveoptions top=pixelval」「-saveoptions bottom=pixelval」:キャプチャ範囲で刈り取るの上/下を指定。
  • -saveoptions left=pixelval」「-saveoptions right=pixelval」:キャプチャ範囲で刈り取る左/右を指定。
  • -saveoptions element=elementID」:DOMのIDを指定できるらしい。
  • -saveoptions scale=scaleval」:保存するファイルのサイズを縮小。
  • -saveoptions format=imagetype」:png、png@transparency=none、jpg、jpeg@quality=Qなどを指定可能。
詳細は公式サイトを確認ください。
http://pearlcrescent.com/products/pagesaver/doc/


# コマンドラインで実行したFirefoxをバックグラウンド実行とかできないのかな。。。
昨日、CSS Nite LP, Disk 8 「Google Analyticsを使ったWebアクセスログ解析とサイトへの反映」に参加しました。

http://lp8.cssnite.jp/
http://cssnite.jp/archives/post_1739.html

以下簡単に感想を。

Google Analytics ベーシック:レポート活用の基本
グーグルの小杉さんがGoogle Analyticsの機能を高速にw、説明。
去年リリースされた新機能の説明では、アユダンテの大内さんも登場。このお二人、インプレスのセミナーでも一緒だったなぁと思い出しました。
http://analytics-ja.blogspot.com/2008/07/ga-public-seminar-with-impress.html

仮説検証型、かつ4つの対顧客戦略でデータを見る:Google Analyticsを使った分析のあるべき流れ
クロス・フュージョンの衣袋さんが、データの見方から説明。
一番気になったのは、「経路分析は困難。だからシナリオ分析にする」というところ。
衣袋さんの言う「経路分析」は、個々の画面遷移を指していて、トップページに流入して、インフォメーションページを見て、商品を見て、、、といった個々の訪問ごとに閲覧した経路の分析。シナリオ分析は、ある一連のフロー(商品購入とか会員登録とか)の中で踏む必要があるページを仮定して、そこをピンポイントで観測して、フローの効果を計測する分析(というまとめでいいかな)。
シナリオ分析は、どれだけ意味のあるシナリオを仮説として立てられるかが重要かなと思います。また、シナリオを外れた動きに訪問者の何かが隠れていると考えれば、シナリオ分析からこぼれるものもどこかで拾わないといけないかなと。

ユーザー行動をセグメント化して、サイト改善:ユーザーの行動と気持ちに寄り添うセグメンテーション分析
アユダンテの大内さんによる、ログの先にいる訪問者を意識した分析の説明。
訪問者を3つのグループ(ブランド指名買い、潜在顧客、調べ物)に分けてモデル化しているのはなるほどですね。

Web制作会社のための、顧客が逃げないGoogle Analyticsレポーティング:成果アップのための解析「報告」の実践
HARMONYの石井さんによる、レポーティングの実践的な紹介がありつつの説明。
最後にレポートのサンプルをさらっと紹介していたのだけれど、写真に撮ればよかった。余所がどういうレポートを出しているかはとても興味ありますw
レポーティングなどの手法は、知識伝達しやすいので、どこまで共有するか/できるかは難しいなぁと。

経営者視点のサイトリニューアル提案:Google Analyticsを使った経営成果の算出法
ゴンウェブコンサルティングの権さんが、Web制作者がアクセス解析を提案に使うための一連の作業を説明。
アクセス解析を、SEO的な視点からどう活かすかという内容をWeb制作の見積もりという視点から説明した内容だったかなと思いました。

----

今回参加するにあたって、アクセス解析書籍の著者の方々のパーソナリティを見たいなぁというのと、どこまで説明するのだろうという業界のデファクトを知りたいという2点を考えていました。
その2点とも達成できて満足しています。
長時間、みなさんお疲れ様でした。
JavaのPOIをJythonから使ってみる方法もいけます。下記にまとめました(2010/7/25)。
Pythonでエクセル操作 その2:Jython + POI

PythonでExcelファイルを読み込むことになったので、pyExceleratorを使ってみました。

■pyExceleratorダウンロード先

■公式ドキュメント
作成中。。といっているが、ソースや例を見るようにとのこと。。。

■雑感
下記参考ページでも書いてありますが、pyExceleratorでは書き込みと読み込みでの作業勝手が違います。
特にExcelファイルの読み込み結果がスパース配列(*)であるため、Excel VBAのようにRangeオブジェクトを利用するようなデータ操作は使えないです。。。(「スパース配列」初めて聞いた。。。)
例えば、アクティブシートのA列から"excel"の文字列を含むセルの位置情報を取得したい場合、vbaだと次のように書けるけれど、これができない。
Debug.Pring Columns("a").Find(What:="excel").Offset(0, 0)
pyExceleratorのparse_xls()関数の戻り値は、セルの位置情報(行と列)をキーとしたディクショナリ型です。
ディクショナリ型なので、値からキーを引くのが面倒。。。なので、関数を作ってみました。
# coding:utf-8
from pyExcelerator import *

def find_key_by_val(search_word, sheet_data):
    def map_find(_x, _y):
        if _y == search_word:
            return _x
    def except_None(_z):
        return _z <> None
    rlist = map(map_find, sheet_data.keys(), sheet_data.values())
    return filter(except_None, rlist)

if __name__ == '__main__':
    print 'start'
    for sheet_name, values in parse_xls(r'C:\Temp\test.xls'):
        key = find_key_by_val(u'検索したい文字列', values)
        
        if len(key) < 1:
            continue
        for row_index, col_index in sorted(values.keys()):
            if col_index == key[0][1]:
                print values[(row_index, col_index)]
    print 'end'
pyExceleratorでのExcelファイルの読み込み操作は、スパース配列の操作に慣れることとイコールなのかも。

■参考ページ