Greasemonkeyで半自動スクレイピング

ログイン認証後のサイトでスクレイピングをする必要があって。しかも結構Ajaxで動的にコンテンツを書きかえたりもしてるので、ちょっと難しいかなーなど思ってたのですが。
FireFoxでユーザー独自のスクリプトを実行するGreasemonkeyアドオン(実は今回初めて触った)
Firefoxでスクレイピングしたいページを表示させて、ユーザースクリプトの中のAjaxでデータを保存するURLに取得したい文字列をPOSTしてあげれば良いかなと。

で、ちょっと実験中なのですが、とりあえずサイトの文字列をPOSTして受ける所まではOKみたい。
Greasemonkeyってユーザースクリプトでサイトの表示を弄るためのモノかと思ってたのですが、結構色々なことに使えそうだなーとか。

XML(RSSとか)をjQueryでParseしてみる

ちょっと色々試してみました。基本的にはRSS2.0前提で。

その1: jQueryの$.Ajax()を使ってベタでやる

$.ajax({
  url: url,
  type: 'GET',
  dataType: 'xml',
  success: function(data){
    feed = $(data).find('item');
    for(var i=0; i<feed.lenth; i++){
      $("#content").append($(feed[i]).find('title').text() + '<br />');
    }
  }
});

…コレでも簡単だけど、個人的にはjQueryのfind()があんまり好きじゃないのと、ちょっと面倒な気がする。

その2: jFeedプラグイン

http://www.hovinne.com/blog/index.php/2007/07/15/132-jfeed-jquery-rss-atom-feed-parser-plugin
RSS1.0/RSS2.0/ATOMのFeedの取得のためのプラグインみたい。

$.getFeed({
  url: url,
  success: function(feed){
    $('#content').append('<h2>' + feed.title + '</h2>');
    items = '';
    for(var i=0; i<feed.items.length; i++){
      var item = feed.items[i];
      items += item.title + '<br />'
    }
    $('#main section').append(items);
  }
);

イイ感じだけどjFeedで取れる要素はchannelのtitle/link/description/language/updatedとitemのtitle/link/description/updated/id(?)のみで固定。item要素のauthorとかcategoryとかは無視されるみたい。(自動的に取ってくれれば良いのに)
それは、ちょっと、困る。

その3: jParseプラグイン

http://jparse.kylerush.net/
elementTagで指定した順番に jpet00, jpet01…って順番で output の中で出力形式決めて、指定した要素に突っ込んでくれます。

$("#content").jParse({
  ajaxOpts: {url: url},
  elementTag: ['title', 'link', 'description'],
  output: '<a href="jpet01">jpet00</a><br />'
});

おお、コレは楽で良いけど・・・channelの要素取るのどうすんだ??

その4: PHPでJSONにして$.getJSON()で受ける

他のドメインのXMLを取る場合どちらにせよProxy的な処理を挟むので、こんなPHP(proxy_parser.php)をローカルに書いて XML をそのまんま JSON に変換します。

$url = $_GET['url'];
$xmlobj = simplexml_load_file($url, 'SimpleXMLElement', LIBXML_NOCDATA);
print(json_encode($obj));

で、jQuery.getJSONを使って取り出します。

$.getJSON('proxy_parser.php',{url: url}, function(data){
  $("#content").append('<h2>' + data.channel.title + '</h2>');
  var items = data.channel.item;
  for(var i=0; i<items.length; i++){
    $("#content").append(items[i].title + '<br />');
  }
});

何でもかんでもJSONで処理する人間としては、自由度も高いしこのやり方が楽で良いかなぁなんて思ってます。
このproxy_parser.phpもちょっと弄ればそのまま ExtJS に流し込めそうな気がする。

2010/07/15 supercutedamfuck, te_ri, すずえり @高円寺円盤

supercutedamfuckってのはサイトウエレトリコ(JONのバックとか)さんのアナログシンセ使ったソロ。KorgのMS-20とRolandのSystem-100m(だったと思う)とを何かどうにか繋いで、変なシーケンスでツマミをウニョニョニョと。
まぁ何だかやたらと上手く行ってなかったようですが、それも含めて面白かった。

te_ri は会場円盤なので、ドラムがいつもより控えめな感じ。Aphex Twin の 「Girl/Boy Song」 なんてモノをギターとドラムでカバーしてました。凄く面白かった。

すずえりさんは…なんかトイピアノを糸で繋いで何かしてたけど、途中で帰ろうかと思った。最後のピアノはちょっと良かったけど。うーん。

2010/07/16 はにわちゃん @新宿PIT-INN

「久米仙3days」の2日目。なんと「はにわちゃん」名義でのライブです。
メンバーとセットリストは以下のような感じ。途中で仙波さんも「何でこんなにしんどいのかと思ったらドラム俺一人しか居ねーんだ」と仰ってましたが「はにわ」だったらもーちょい打楽器が欲しかったかも。
最初3曲は「はにわちゃん」からの3曲。美潮さんのいた頃の「はにわちゃんバンド」は見たことありませんがきっと面白かったんだろうなぁ。
次2曲は「BUSON SENBA」からの曲。なんだかゆっくりとした雰囲気のこのアルバムが大好きだったので、ナマで聴けて嬉しかったです。ハイテンション曲の「ウェイトレス」で前半は終了。

後半「体育祭」からはシークレットゲストとしてピンクレディーの未唯さんがゲストで参加。ライブ通いはしてますがまさかこの人をナマで観る日が来るとは。
美潮さんと一緒に「体育祭」を歌った後はピンクレディー曲を2曲。これがまたひどい(すごい)代物で、「サウスポー」は「サウスポー音頭」みたいな感じでこぶし回った歌い方。「ペッパー警部」はバックの演奏が5拍子!さすがに歌いにくそうでしたが…プログレだったなぁ。
未唯さんと美潮さんは一旦下がってインストの「大魔神」、美潮さんが戻ってきて名曲「水」で、ソロ回しも沢山。
アンコールは未唯さんも一緒に「あいみん」を演奏。ドリフが最後に「いい湯だな」を演奏するように、はにわの最後の曲はやっぱりコレじゃないと。

やっぱりはにわのライブは楽しいなぁと再認識。軽薄でくだらなくて、かつ中身の濃い音楽ってナカナカ出会えないと思います。
はにわオールスターズとは言わないですが、また時々やってほしいです。

  1. かなしばり
  2. たたみほっぺた
  3. 彼は外人
  4. 温泉
  5. ウェイトレス
  1. カタピラの花
  2. 体育祭
  3. サウスポー
  4. ペッパー警部
  5. 大魔神
  6. あいみん (アンコール)
  • 久米大作 (piano)
  • 仙波清彦 (drums)
  • バカボン鈴木 (bass)
  • 白井良明 (guitars)
  • 沼井雅之 (keyboards)
  • 高橋香織 (violin)
  • 小川美潮 (vocals)
  • 未唯 (vocals on ‘体育祭’,’サウスポー’,’ペッパー警部’,’あいみん’)

Google Calender Widgetプラグイン

を突っ込んで、GoogleCalendarで管理してる行きたいライブ をウィジェットにして右側に表示させてみました。

最初はGoogleCalendarのフィードのXMLをWordPress標準のRSSで取り込んで表示させよーと思ってたけど、上手くいかなかったので結局pluginにて。
ちなみにちょっと覚えたこと。公開してるGoogleCalendarのfeedは
http://www.google.com/calendar/feeds/{カレンダーのID}/public/basic
が基本的なURLで、feedの並び替えをする時とかはbasicの後ろに
?orderby=starttime (ソートキー、デフォルトだとlastmodified)
?ordersort=ascending (昇順降順)
?futureevents=true (現時点以降のみを表示するかどうか、デフォルトだとfalse)
みたいな感じで GETメソッドと同じようにくっつければ良いみたい。
GoogleDataAPI とかの呼出も基本的にはコレと同じオプションが有ったような。

http://code.google.com/apis/calendar/data/2.0/reference.html

昔行ったライブのチケットが出てきた。

クローゼットの中を整理してたら、昔行ったライブのチケットが発掘された。
日付はわかるのですが何のライブか分からなかったりとか・・・Providenceは毎年GWにシルエレ来てたもんなぁ。(曜日とかライブ告知ハガキとか見て考えてみた、たぶん1994-1997毎年行ってたみたい)

????/07/28 do Show (太田恵資+吉見征樹) @渋谷ジャンジャン
1993/03/01 Zabadak @中野サンプラザ
1994/05/02 Providence @吉祥寺Silver Elephant
1995/05/04 Providence @吉祥寺Silver Elephant
1995/09/27 Karak @渋谷Egg-Man
1995/09/28 遊佐未森+かの香織+平岩英子 @渋谷公会堂
1995/10/06 King Crimson @中野サンプラザ
1995/11/19 遊佐未森 @東京厚生年金ホール
1995/11/16 ??? @南青山MANDALA
1996/04/04 遊佐未森 @NHKホール
1996/04/16 Madredeus @神奈川県立県民ホール
1996/05/04 Providence @吉祥寺Silver Elephant
1996/05/13 遊佐未森 @日清パワーステーション
1996/06/09 ??? @南青山MANDALA
1996/06/25 ??? @吉祥寺MANDA-LA2
1996/07/11 ALI PROJECT @南青山MANDALA
1996/08/01 PON v.s. Nik Didkovsky @吉祥寺MANDALA-2
1996/09/04 高円寺百景,大陸男対山脈女 @吉祥寺Silver Elephant
1996/10/27 VERMILION SANDS,KBB @吉祥寺Silver Elephant
1997/05/04 Providence @吉祥寺Silver Elephant

2010/07/10 Fantasmagoria,KTG,ZLETOVSKO @吉祥寺Silver Elephant

Fantasmagoria

何だかんだでちゃんと見るのは久しぶりかな?(シルエレでトップだと間に合わないこと多くて…)
バイオリンフロントのプログレバンドです。どーもバイオリンとギター以外の方は今回から代わってしまったようですが、特に違和感無かったかな?「良くも悪くもプログレだなー」って感じの曲調。最後の曲とかイイ曲だなーとか。

  • 藤本美貴 (violin)
  • 尾崎淳平 (guitars)
  • 上田哲也 (bass)
  • 田中敏之 (keyboards)
  • 大菊勉 (drums)

 http://fantasmagoria.info/

KTG (Kawasaki Takao Group)

1曲目は今まで「Lige」って呼んでた曲かな?最初ちょっとピアノが聞き取りづらかったかも。「屋上にて」は割と静かめな曲なのですが、ちょっとシェーンベルグみたいなピアノフレーズが面白かったり。
最後はFLAT122の曲のKTGアレンジ2曲。筒井さんのパートがキッツイことになってる、中島さんのベースも。ピアノ+ドラムだけでほぼ完成されてるよーな形の曲が多いので、クラリネットの音とか乗せづらそうな気がしてましたけど、かなりアンサンブルの中に組み込まれてきた感じでした。
あとこの日面白かったのが、Spiralの即興パートの図形譜面みたいなモノが配られていて、筒井さん作らしいのですが色鉛筆で各パート書き分けられていて、なんというかウニョウニョした変な図形とその注釈(「細分化された記号」とか「エクスプレッション、分解、到達」とか)が書いてあって。

FLAT122の頃からそうだけど、とにかく情報量の多いバンドで、複雑といえば複雑なのですが一つ一つのフレーズとかは割とポップだったりもしていて。毎回思うのですが、こんな洗練されたバンドってなかなか無いよなーとか。
ちなみにFLAT122ですけど、出来れば年内に1回くらいライブしたいとか・・・・期待してます。

  1. Blue MS
  2. 洞窟の森3
  3. 屋上にて
  4. 真冬のTV塔
  5. Neo Classic Dance
  6. Spiral
  • 川崎隆男 (piano)
  • 谷本朋翼 (drums)
  • 中島洋隆 (bass)
  • 筒井香織 (clarinet)

http://music.geocities.jp/ktgsc2009/

ZLETOVSKO

元高円寺百景、Pochakaite Malkoの桑原さんとSherpa,Peach Sunfishの堀越さんに吉田達也さんを加えたトリオ。今回はゲストで伏見さんも参加。すっごい昔に見たような気がするのだけど、あれはInvokeの時だったかもしれない。
堀越さんの所は鍵盤が5台も、MoogとHammondとKORGのSV-1と…あともう2台。こんなに鍵盤が積んであるライブ見るのは難波弘之さん以来かも。
そして想像していたよりも思いっきり轟音プログレでした。やたらと音圧の高い桑原さんのスタインバーガーと、割とアナログっぽい音出すシンセ(Line6のPodも使ってたみたい)に、例の吉田達也さんのドラムで。

そいえばMCで堀越さんが仰ってたのですが、自宅でELPを演奏した映像をYouTubeにアップしたらエマーソンからメールが来てほめられたとか。何個かあるけどこれかな?
ちなみにZletovskoの8年前の映像も2つあります、これこれ

2曲目にはなんと高円寺百景の1stから「Gepek」(これ桑原さんの曲だったのか)を演奏。昔ここ(Silver Elephant)で高円寺百景見たのを思い出しました(1996/09/04なので桑原さん辞めてすぐみたい、しかしWikipediaの高円寺百景の記事詳しすぎ)
アンコールでは去年のLars追悼ライブでもこの編成で演奏した、Zamla Mammaz Mannaの「Five Single Combat」を演奏。

いやでも圧倒されました。4年に1回とかこち亀の日暮警部のような事言わずにまたやって欲しいです。

(追記)1曲目5曲目のタイトルご本人様に教えて頂いたので訂正します。

  1. THRUSH
  2. Gepek (高円寺百景)
  3. プログレ風鍵盤インプロ (堀越+吉田)
  4. 比丘尼
  5. ZELOT
  6. The Golden Apples of The Sun Pt.1/Pt.2
  7. Five Single Combat
  • 堀越功 (keyboards)
  • 桑原重和 (bass)
  • 吉田達也 (drums)
  • 伏見蛍 (guitars)



お茶の水disk union

最近は滅多にCD屋さんに行かないのですが。行かないのですが、一度行くとドッサリかってしまう癖がついてしまって。

  • COS / Babel (初CD化)
  • Hawkwind / Space Ritual (買い直し)
  • 川喜田美子 / Seed Cakes Angel
  • 川喜田美子 / Seed Cakes Petals
  • 4D+平沢進 / 緋色のCrew
  • Pablo Picasso / types 1981-1985
  • optical*8 / gender
  • Harp On Mouth Sextet / 銀盤四季調
  • ハイポジ / 性善説
  • miscorner/c+llooqtortion / view for voices
  • 外間隆史 / 裏庭
  • 藤井郷子Qartet / Minerva

などと言う買い物。最近ディスクレビューみたいなことしてないけど、気に入ったの有ったら書くかも。時間があれば。

ちょっと動画貼り付け

YouTube埋め込みとかって、WordPressだとPlugin使ってるモノなんだろうか。

ちなみにコレは1980年のアメリカのバンド、ポップでちょっとカンタベリーっぽくて凄い気に入ってるのですが、どうやらCDにはなってないみたいです。




ついでにニコニコ動画の貼り付けのテスト。

あと、oEmbed(自動埋め込み)のテスト。

Tracの複数プロジェクトまとめ(TraM)

CentOS5.4+Trac0.11.2.1.ja1 を使って、1サーバで複数のTracを運用しています。
svnのリポジトリは /var/svn/hoge1, /var/svn/hoge2 みたいな感じで
それぞれのsvnに対して /var/trac/hoge1, /var/trac/hoge2 とTracを設定しています。

んで、複数プロジェクトの進行をチェックするのがちょっと面倒なので、Tracの複数プロジェクトをまとめるのをやってみました。
ちょっと調べてみると、こちらのリポジトリからTraM0.3をチェックアウトできるみたい。

svn checkout http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/TraM/branches/genshi-ja
cd genshi-ja
python setup.py install

で、インストール。ここまでは問題なし(本当は別のサイト見て0.2をインストールしちゃったので、一回やり直した)
あとチェックアウトしたリポジトリに入ってた t7823-genshi_modpython-r8333-011.diff を tracのソースにパッチ当て。trac/web/__init__.py のパッチみたいなので、pythonのsite-packagesのtracのディレクトリに移動して

patch < t7823-genshi_modpython-r8333-011.diff

設定ですが、同じくRyuzeeさんの所を参考にして作業。

まとめ用のsvn(/var/svn/all)とまとめ用のtracを作成(/var/trac/all)

svnadmin create /var/svn/all
chown -R apache /var/svn/all
trac-admin /var/trac/all initenv (リポジトリは/var/svn/all を指定、他は適当)
chown -R apache /var/trac/all

まとめたいTracプロジェクトの /var/trac/hoge1/conf/trac.ini とかに

tramplugin.* = enabled

の記述を追加。

最後に httpd.conf の設定ですが、ココでハマりました。

Alias /trac/hoge1 "/var/www/cgi-bin/trac.cgi"
<Location /trac/hoge1>
    SetHandler mod_python
    PythonHandler trac.web.modpython_frontend
    PythonOption TracEnv /var/trac/hoge1
</Location>
Alias /trac/hoge2 "/var/www/cgi-bin/trac.cgi"
<Location /trac/hoge2>
    SetHandler mod_python
    PythonHandler trac.web.modpython_frontend
    PythonOption TracEnv /var/trac/hoge2
</Location>

こんな感じの設定にしておいて、複数Tracのディレクトリを分けて管理してたので。ここにTramの設定を追加。

#All Project (TraM)
Alias /trac/all "/var/www/cgi-bin/trac.cgi"
<Location /trac/all>
    SetHandler mod_python
    PythonHandler tram.web.modpython_frontend
    PythonOption TracEnvParentDir /var/trac
    PythonOption TracUriRoot /trac
</Location>

としたら「Internal Server Error」
ログ見ると 「PythonHandler tram.web.modpython_frontend: ImportError: No module named web」
と。

んで、ココでしばらく悩んだ(setuptools辺りとかclearsilver入れ直したり、思い誤ってweb.pyインストールしたり)のですが。
tramの中見たら、tram直下にmodpython_frontend.pyが有ったので

Alias /trac/all "/var/www/cgi-bin/trac.cgi"
<Location /trac/all>
    SetHandler mod_python
    PythonHandler tram.modpython_frontend
    PythonOption TracEnvParentDir /var/trac
    PythonOption TracUriRoot /trac
</Location>

と変更したらそのまま動いた…
その他使い勝手とかまだ見てないけど、それは後日にしようかと。TracLightningくらい予めプラグイン乗っかってるパッケージ、Linuxに無いのかなぁ。

(追記)
何か統合タイムラインがエンコード関係の問題で動いてなかったので。site-packages/sitecustomize.py に

import sys
sys.setdefaultencoding('utf-8') # cp932 でも良いかな。

を書いて動かした。いやでもこの対応で良いのかな?