July 03, 2011

Gimme Bar用のChrome Extensionを作りました

Gimme Bar用のChrome Extensionを作ったのでGimme Barユーザーの方は是非ご利用ください。
Unofficial Gimme Bar Extension - Chrome Web Store

……これだけだと、意味が分からない方が大半だと思いますので、Gimme Barについても触れておきます。Gimme BarはEvernoteやCatchなどと同様のオンラインノートサービスです。類似サービスと比較して優れているのは、Web上の動画もダイレクトに取り込むことが可能な点だと思います。個人的には。

YouTubeはもちろん、60 Minuitesなどの動画もクリップできるので、あとで観たい動画をまとめておけば便利です。おそらく、他のサイトに埋め込むことができる形式のものであれば、何でもクリップすることができると思います。SlideShareのドキュメントなんかもクリップできます。

使い方

Gimme BarにログインしてSettingsのページにアクセスすると、このようなブックマークレットが用意してあります。
これをブラウザのブックマークに登録します。

Gimme Barのブックマークレットを実行すると、ページ下部にクリップ用のバーが現れます。ここに選択したテキストなどをドラッグアンドドロップで取り込むことができます。動画の場合は、上部に"Drag Embed"というアイコンが出てくるのでそれをドラッグして取り込みます。

通常はこのような感じの使い方です。自分の場合、ブックマークバーを常時は表示しないので、このやり方はどうしても好きになれませんでした。
ということで、今回Chrome Extensionを作りました。移植しただけなので、大したことはやってませんが。

アイコンをクリックするとGimme Barのクリップ用バーが表示されます。ブックマークレットを使うよりは、スマートなやり方だと思うのですが、どうでしょうか。Gimme Barユーザーの方は是非お試しください。

ユーザーではない方も、この機会にGimme Barを使ってみてはどうでしょうか。お薦めです。
Gimme Bar
posted by kaniwa at 09:05| Comment(4)| TrackBack(0)| Web| RSSを購読

June 29, 2011

Google DocsでWebスクレイピング

最近知ったGoogle Docsのスプレッドシートでの裏技が3つほど。

1.importXMLなどの関数で簡単にWeb上からデータを取得できる
2.作成したスプレッドシートはRSSで出力できる
3.Google Apps Script = JavaScript(Excelのマクロみたいな物だと思ってました)

人によっては、今更感があるかもしれませんが、意外と知らない人が多いのではないかと思います。個人的には、なかなか便利だと思いました。プログラマでなくても、簡単にWeb上からデータを引っ張ってこれます。

……ということで、今回はこれを使って色々やってみました。

1.経済レポート.comでレポート発行元のURLを取得する
2.リアルタイム文書校正ツールを作る
3.特定URLのFacebookシェア数、ツイート数、はてブ数をカウントする
本当に実用的なのは、3くらいじゃないかと思われます。。。

経済レポート.comでレポート発行元のURLを取得する
経済レポート.comの問題は、以前グリースモンキーのスクリプトを作って解決した感じがありますが、やっぱりダイレクトに発行元のURLが取得できれば便利だと思います。
これはimportFeed関数とimportXML関数を使って取得できました。
アルゴリズムは、
1.「経済レポート.comのRSSを取得」
2.「各URLをパースして/jump.php~を取得」
3.「jump.php~をパース、発行元URLを取得」
といった感じになります。
まず、importFeedでRSSを取得します。これは、どこかのセルに「=importFeed("http://www3.keizaireport.com/rss/node_1.xml")」とすればOKです。(importFeed(url)が基本型です。)
次に、クッションページ(jump.php)のURLを取得します。
ページの構造を見ると、
  <h1><a href="取得したいURL">~</a></h1>
となっていて、かつh1タグは1ページに1つしかないようなので
「=importXML(セル;"//h1//a/@href")」で取得できます。(importXML(URL;"クエリ")が基本型です。)セルはRSSから抽出したURLが出力されているセルを指定します。
最後に、jump.phpを解析します。
これは
「=importXML("http://www3.keizaireport.com" & セル;"//body/div['@class=font-size:20px;margin-top:100px;']/a/@href")」
で取得。divに続く[]内ではクラスを指定しています。
完成したページ
RSSも勝手に出力してくれています。

リアルタイム文書校正ツール
これは結局失敗しました。誰か詳しい方がいたら教えてください。一応、どうやろうとしたか載せておきます。
Yahooが提供しているテキスト処理系APIで文書校正支援APIというのがあります。
それを使えば、自動で文書校正をやってくれるツールが作れるのではないかと思ってやってみました。
とりあえず、APIキーを取得しておきます。
APIをリクエストする際に、テキストをエンコードする必要があるので、Script Editorを開き、以下のコードを保存します。
function encode(unencoded) {
return encodeURIComponent(unencoded.toString())
}

「=encode("文字列")」といった感じで使えます。APIの結果はXMLで返ってくるので、importXMLを使います。

「=importXML(「リクエストURL」;"//Result")」
こんな感じでいけるかと思ったら、パースできませんでしたというエラー……


importFeedも試しましたが、ダメでした。ということで失敗。

特定URLのFacebookシェア数、ツイート数、はてブ数をカウントする
これは、我ながらなかなか良くできたと思います。
Facebook、ツイート数、はてブカウント、どれもapiの結果がjson形式なので、自作関数を作りました。
基本型がこんな感じです。
function fb(uri) {
var json = UrlFetchApp.fetch("http://graph.facebook.com/" + uri);
var item = Utilities.jsonParse(json.getContentText());
return item.shares;
}

使い方は、「=fb("http://~")」とセルに入力するだけです。
URL部分と最後のshares部分(キーを指定しています)を変更すれば、Twitter、はてブで使えます。
ということで、全部まとめたのがこちらです。
ToolsからScript editorを開いて保存すると使えます。
function fb(uri) {
var apiuri = "http://graph.facebook.com/";
var key = "shares";
return fetchapi(apiuri, uri, key);
}

function hatena(uri) {
var apiuri = "http://b.hatena.ne.jp/entry/json/";
var key = "count";
return fetchapi(apiuri, uri, key);
}

function twitter(uri) {
var apiuri = "http://urls.api.twitter.com/1/urls/count.json?url=";
var key = "count";
return fetchapi(apiuri, uri, key);
}

function fetchapi(apiuri, uri, key) {
var json = UrlFetchApp.fetch(apiuri + uri);
var item = Utilities.jsonParse(json.getContentText());
return eval("item." + key);
}


fetchapiで共通する処理をまとめています。apiとkeyの部分を変更すれば、他のapiにも対応可能だと思います。
以下、使用例です。

まあ、私のブログの場合、頑張ってこの程度ですが笑
importXMLでRSSと組み合わせても良いかもしれません。

参考
外部データに対する関数 : 関数 - Google ドキュメント ヘルプ
こちらにimport〜関数の詳しい説明が載っています
text decode - Google Docs Help
posted by kaniwa at 22:31| Comment(0)| TrackBack(0)| Web| RSSを購読

June 20, 2011

絶好の購入時期を教えてくれるサービス: Shopobot

日本向けのサービスではないのですが、恐ろしいポテンシャルを秘めていると感じたので紹介します。
Shopobot
先週からBeta版として公開されました。Shopobotは主要ECサイトをクロールして価格を調査、ユーザーにどのタイミングで商品を購入したらよいかを教えてくれるサービスです。Shopobotのブログによると、Google Venture, AOL Ventureからのシード投資を受けているようで、このことからも今後が期待されるサービスだということが分かります。

Shopobotでは、ユーザーが興味のある特定の商品をフォローすることができます。そうすることで、その商品の価格が下落した際に、アラートを受け取ることができます。また、Shopobot独自の分析によるベストな購入時期を教えてくれたりもします。


MacBook Proをフォローした例です。見づらいかもしれませんが、商品画像の隣には、「これは適正価格ですよ。」といったことが書いてあります。「Fair Price」意外にも、特にお買い得な時は、「Nice」などのコメントが付いたりします。商品価格の分析の際には、価格の変動率を特に考慮しているようです。

それにしても、消費者にとってはものすごいイノベーションになるのではないでしょうか。リテーラーにとっては厄介な代物になるのかもしれませんが。。。
日本上陸を期待したいです。

Shopobot Receives Seed Funding From Google Ventures and AOL Ventures to Launch Online Shopping Service : Shopobot Blog
Google and AOL venture arms fund tool to track retail price changes | MediaFile
posted by kaniwa at 23:08| Comment(0)| TrackBack(0)| Web| RSSを購読

June 19, 2011

象を保護したいなら狩りを推奨すべし

そのうち書こうと思っていたらすっかり遅くなってしまいました。
ケニアとジンバブエにおける象の個体数の遷移に関する興味深い記事がありました。
Shoot an Elephant, Save a Community:  Defining Ideas home About Defining

以下では、かみ砕いて解説してみます。
1970年代、ケニアにおける象の個体数はジンバブエにおけるそれの6倍であったそうです。
しかし、現在の両国の象の個体数を比較してみると、ジンバブエの象の個体数はケニアの3倍以上の数になっています。

After Kenya banned all hunting in 1977, its population of large wild animals declined between 60 and 70 percent.
何があったのかというと、ケニアでは動物擁護団体PETAの活動もあり、1977年に全面的に狩りが禁止されます。それ以降、大型動物の個体数は60~70%減少しました。密猟の影響が主です。
象の個体数は、1973年に167,000頭であったのが、'89年に16,000頭ほどに落ち込み、現在では多少回復し、32,000頭程になっているようです。ただし、そのほとんどは自然公園の保護下にあるといった状況です。
Wildlife imposes real costs on African communities.
狩りの禁止以降、密猟による被害が増えた理由としては、地主にとっての象の経済的価値が無くなったということが大きいようです。象牙を売ることもできなくなった象は農村に住む人たちにとっては作物を食い荒らす害獣でしかありませんよね。こうして、保護するインセンティブも無くなってしまったようです。

一方、ジンバブエでは、1989年から2005年にかけて、象の個体数は、37,000から85,000頭にまで増えました。
ジンバブエでは、1989年にCAMPFIRE(Communal Areas Management Programme for Indigenous Resourcesの略称)というプロジェクトが開始されました。
CAMPFIREプロジェクトでは、野生動物等の自然資源の管理をローカルのコミュニティに委ねました。狩りも禁止するのでは無く、狩猟しても良い頭数を各コミュニティに割り当て、狩猟権を販売できるようにしました。
こうして、利益を生む構造を作ったおかげで、住民にも象を大切に扱うインセンティブが生まれたようです。狩猟権販売をビジネスとして、サステイナブルなものにするには、ある程度象を保護しなければならないということですね。
こうして、ケニアとは正反対の結果となったようです。

正しい方向に、インセンティブが働いた良い例ですね。何かを禁止する前に、どうすればインセンティブを与えられるか、仕組みを考えてみるのも良いかもしれません。
posted by kaniwa at 01:27| Comment(0)| TrackBack(0)| Uncategorized| RSSを購読

June 18, 2011

Dropboxで何をしたか丸分かりにするツール: Dropbox Readerトレードマーク(TM)

アメリカのIT系企業ATC-NYが"Dropbox Reader"なるツールをローンチしていました。色々やっている会社みたいですが、"cybermarshal"というブランドでサイバー犯罪に対する捜査を補助するツールを提供していたりもします。

Dropbox Readerも本来は捜査目的で使われるツールです。ただ、無償で配布されており、個人でも利用できるようになっています。
Dropbox Readerトレードマーク(TM)
↑こちらからダウンロードできます。中身を開いてみると分かりますが、Pythonのスクリプトです。

中身
・dropbox_contains_file.py
・hash_blocks.py
・LICENSE.txt
・README.txt
・read_config.py
・read_filecache_config.py
・read_filejournal.py
・read_sigstore.py

で、実際に何ができるのかというと、Dropboxの設定ファイル(データベースの形でローカルに保存されています)を読み込んで人が読みやすい形式にフォーマットする、ということをやってくれます。例えば、"read_config.py"を実行すると、Dropboxで使用しているメールアドレスや最終更新日などを確認することができます。
実行例↓


他には、"read_filecache_config.py"を使うと、ファイルごとの更新日などの詳細な情報などがドバッと出てきたりします。

使い方
コマンドプロンプトを開いて、Dropbox Readerの保存場所に移動、以下のコマンドを入力します。
python XXX.py C:\XXX\AppData\Roaming\Dropbox\XXX.db
C:以降はDropboxの設定ファイルがある場所です。Windowsなら大体ユーザーフォルダ直下に"Appdata"というフォルダがあるので、大抵の人はそこに保存しているのではないかと思います。dbはスクリプトによって使用するファイルを適宜変更する必要があります。詳細はREADME.txtに書いてあります。

使いどころは……日々、サイバー犯罪と戦っている人とか……あまりいそうにないですけど。
ちゃんとハッシュ化してるんだなと確認して自己満足したり、あとは、Pythonの勉強であったり(コード自体はものすごい簡単です)、Dropboxの仕組みを知りたい等々。
とりあえず、こんなツールもあるんだということで紹介しました。
くれぐれも、他人のPCのdbファイルをコピーして解析、なんてことはしないようにしましょう。また、そんな人がいるかもしれないので、これを機に設定ファイルの場所を変えるのも良いかもしれません。*

Pythonを入れてない人はこちらからどうぞ。
ActivePython Downloads
参考
ATC-NY Has Just Released a New, Free Forensics Tool: Dropbox Readerトレードマーク(TM) : PR Newswire

*追記【2011/06/21】
設定ファイルに関してのご指摘を頂きましたので追記します。
設定ファイルの場所を変えるということを書いていますが、Dropbox単体で設定ファイル(フォルダ)の場所を変更することはできないようです。私の認識不足です。申し訳ありませんでした。

代わりに、AppData内にある、Local、LocalLow、Roamingのフォルダはそれぞれ移動可能です。ただ、フォルダごとの移動になるので他のアプリケーションの設定ファイルも移動させることになります。
やり方は以下の通りです。
まず、移動させたいフォルダのプロパティ→場所というタブを開きます。
アドレスを設定する項目があるので、移動先を指定、OKを押します。
稼働しているアプリケーションがある場合、一時的に停止する必要があるかもしれません。

ronさん、ご指摘ありがとうございました。これからもよろしくお願いいたします。
posted by kaniwa at 23:37| Comment(0)| TrackBack(0)| Web| RSSを購読