Home / Diary / タグ: ruby
userjsmanager.zip
名称が変わりました
OperaUserScriptManagerからOperaUserJavascriptManagerに。ファイル名とかは一切変化無し。
理由:ぐぐったらUserJavascriptが正式っぽかったので。Operaのヘルプにも書いてあるし。
ユーザー JavaScript による制御
というか、UserScriptでぐぐってもGreaseMonkeyのコードばっかりヒットするのよね。
ふと思った
GreaseMonkeyはインストール時にconfig.xmlに色々設定を記録するが、実際に動作する時はgm_script内に保存したスクリプトをそのまま呼び出している。
なので、OperaUserScriptManagerの対象フォルダをgm_scriptに設定すれば、スクリプト情報の変更や無効化が効かなくてもアップデートは有効。
・・・これFirefoxでも使えね?
というわけで
last-modifiedを吐かない(動的にページを作ってるからだと思う)Userscripts.orgから最終更新日を取得できるようにした。
また、スクリプト本体にuserscript.orgのURLを発見したら、自動的にそれをスクリプトのページとして登録して更新前の手間を省くようにした。
さらに、Opera用とFirefox用に使い分ける為に、設定ファイルを指定できるようにした・・・んだけど、これってどうなのかね?
設定ファイルを一元化して、タブあたりでOperaかFirefoxに切り替えられるほうがいいのか。そうすれば、設定ファイル複製⇒コマンドプロンプト経由で起動という2ステップが省略されるんだよな。
だが、そこまでいくと、本来Operaに特化していたはずなのに、Firefoxもサポートしていくようになってgdgdになってしまう恐れがあるので、今はOpera特化ということで見送り。
スクリプトの文字コード
扱いやすいからUTF-8で読んでUTF-8で保存してるんだが、問題はあるのか? 基本的にスクリプト内に2バイト文字を挿入することがほとんどないはずなので大丈夫だとは思うが。
あと、open-uriでダウンロードしたスクリプトの全ての改行に\rが付くのは一体何故だ。とりあえず/\r$/mで対処。
コマンドプロンプトウインドウがウザイ
消すこともできるが、AVGが反応してしまうので仕方なく表示している。
どうも、かの山田オルタナティブがRuby+exerbで作られていたらしく、それで誤検知しているらしい。
参考:ITmedia エンタープライズ:「山田オルタネイティブ」の動作を知る (2/2)
そこで、WindowsAPIを使って、起動後にコマンドプロンプトウインドウだけ消せないかと思って試したら成功したので搭載した。起動後少し表示されるが、すぐに消えるようになった・・・はず。
せっかくだからOperaのユーザースクリプトを探せるとこ一覧
Info
- 投稿日
- 2008年1月25日
- タグ
- opera、ruby、userjs
- このエントリの固定リンク
- http://bmky.net/diary/log/1584.html
- ブックマークに追加する
-
- コメント
2008
0125
Tagsoperarubyuserjs
OperaCacheExplorer(opcacheexplorer.zip)
起動したら一番左上のボタンでOperaのキャッシュディレクトリ(Opera/profile/cache4)を指定すると、ずら~~~~っとファイルが表示される。カラムでソート、URLで絞込み、適当にファイルを選択してデスクトップやらフォルダにD&Dでコピーも可能。
メインはサルベージ補助。Opera9.5以降はキャッシュファイルの拡張子が無くなるので、地味に使えるかもしれない。
他には、ニコニコ動画のダウンローダーに組み込んで、ダウンロードする前に、まずキャッシュを見て、見つかったらサルベージしてサーバーにアクセスしなくても済むようにするつもり。
キャッシュの操作にあたって、Ashula.Info / dcache4.urlを参考にした。バイナリ処理は経験が浅いので、今はとりあえず動く程度。9.5が出たらもちょっとまともにする。
Info
- 投稿日
- 2008年1月21日
- タグ
- opera、ruby
- このエントリの固定リンク
- http://bmky.net/diary/log/1581.html
- ブックマークに追加する
-
- コメント
userjsmanager.zip
アップデート機能
スクリプトのURLを設定すると、サーバーのファイルと更新時間を比較して、ローカルが古いようならダウンロードしてくれる。
今のところLast-Modifiedしか見てないので、これを吐いていないサーバーのスクリプトは一切アップデートできないことになる。次あたりで対策するつもり。
コマンドラインオプション対応
いちいち起動してウインドウ表示してられないので。-uで更新確認⇒ダウンロードまで一気に。
また、-dに続いてスクリプトのURLを渡すとダウンロードしてフォルダに格納してくれるようにした。
レイアウト変更
GreaseMonkeyの猿真似を止めて、もちっと使いやすい形に。
注意
まだまだ不安定なので、スクリプトを操作する場合は予めバックアップを取ってほしい。
Info
- 投稿日
- 2008年1月15日
- タグ
- opera、ruby、userjs
- このエントリの固定リンク
- http://bmky.net/diary/log/1580.html
- ブックマークに追加する
-
- コメント
2008
0115
Tagsoperarubyuserjs
地味に更新。
nicovideo_download.zip
変更点
- 動画がエコノミーだった場合、ファイル名に_lowを追加するようにした。
- プレミアムアカウント時のみ、-aオプションにて全コメントのダウンロードを可能にした。
- 認証用ファイルを指定できるようにした。
- その他細部を調整。
本当はダウンロードしている動画をOperaのキャッシュから探して無駄なダウンロードを省くようにするつもりだったが、土壇場でバグが見つかったので見送り。
nicovideo_download.rb(ソース)
Info
- 投稿日
- 2007年12月25日
- タグ
- opera、ruby
- このエントリの固定リンク
- http://bmky.net/diary/log/1578.html
- ブックマークに追加する
-
- コメント
2007
1225
Tagsoperaruby
RubyでGUIが作れるというので勉強も兼ねてVisualuRubyに挑戦。
userjsmanager.zip
2007/12/20:エディタが正確に開けない不具合が早速出たので修正。
userjsmanager.exeを実行すると、GreaseMonkeyほぼまんまの管理画面が現れるので、そちらを弄ったことがあるなら操作上迷うことは無いだろう。詳しくは同梱のテキストを参照。
VisualuRubyの利点
- Rubyで書ける
- 少ない記述でGUIを簡単に作れる(形だけなら)
- exerbでスタンドアローン化できる
VisualuRubyの不満点
- ウインドウスタイルが一部登録されていない
- カスタムドローが未実装(力技で実装可能)
- ドキュメントが貧弱すぎる
- コントロールの配置が面倒
- 検索しても情報が全然出てこない(マイナーすぎる)
開発途中だから仕方が無いか。一応気合でなんとかなる。
コントロールの配置については、Formdesignerを使えばある程度は解消するが、配置したコントロールをクリックすると大きさが変わってしまったり、出力するとウインドウスタイルが全部整数になってしまうので、若干手直しが必要になる。
原因不明というか、結局分からなかったもの
- ステータスバーの文字コードが不明(何を入れても2バイト文字が化ける)
- Enterキーの入力を取れない。ダイアログのデフォルトボタンを動作させたいのだが。
- グリッドレイアウトで、片方を固定、もう片方を可変にしたい。(ネガティブマージンのように)
- オーナードローボタン上のビットマップの透過色設定。
やりたいこと
- 適用順番の入れ替え(ファイル名が変わってしまうのが難点)
- スクリプトの更新を調べてダウンロード
雑感
簡単にGUIが書けるのは確かだが、結局はWindowsのコントロールを使うので、構築上ある程度の縛りは受ける。
それはいいんだが、現時点ではWindowsAPIの資料を漁るのが必須なのが正直めどい。そこまで凝ったGUIを作れなくてもいいので、Rubyの知識だけで書ける様になるのが一番の理想か。
余談
exerbのguiモードでコンパイルしたらAVGが反応したので思わず吹いた。久々にAVGのダイアログ見たわ。
cuiにしたら反応しなくなったので良かったが。ってか、コードのどこに反応したんだ?
Info
- 投稿日
- 2007年12月19日
- タグ
- opera、ruby、userjs
- このエントリの固定リンク
- http://bmky.net/diary/log/1577.html
- ブックマークに追加する
-
- コメント
実行ファイル形式になっているので、Rubyがインストールされていなくても使うことができる。
nicovideo_download.zip
[Document Popup Menu]
...
Item, "動画とコメントをダウンロード" = Execute program, "C:\nicovideo_download.exe", "%u C:\download -v -c"
Item, "動画をダウンロード" = Execute program, "C:\nicovideo_download.exe", "%u C:\download -v"
Item, "コメントをダウンロード" = Execute program, "C:\nicovideo_download.exe", "%u C:\download -c"
こんな感じで使用しているmenu用設定ファイルに追加すれば、右クリックから開いているページの動画とコメントをダウンロード。動画タイトルと動画IDの名前で保存される。12月9日時点の新コメントサーバー仕様及びマイメモリーにも対応。
この手のツールは探せば他にも大量に見つかるが、「プレイヤー等が絡まないシンプルな構成」「実行ファイル」「修正が容易なもの」。ということで、Rubyの勉強がてら、余所様のコードをパク・・・もとい、参考にして作った。
なお、コマンドプロンプトで色々渡してるだけなので、Opera以外からでも当然使える。
使い方の詳細等はソースを参照してほしい。
nicovideo_download.rb
参考
余談1 どうやって動画タイトルを取得するか
Operaのアクションからはウインドウタイトルはどうやっても取得できない。そこで、常套手段であるAutoHotKey経由でスクリプトを動かそうとしたが、なぜか動かない。
Run, C:\nicovideo_downoad.rb http://www.nicovideo.jp/watch/sm****** C:\download -v -c, C:\, Min
通常ならこれで動くはずだが、なぜかファイルが存在しません、との警告。
どうやらAutoHotKeyはexeやbat以外のものにコマンドラインオプションを指定しても、コマンドラインオプションとして認識してくれず、全て連結したファイル名を探そうとするようだ。
仕方ないので、実行ファイルと同じディレクトリにbatを作った。「Opera⇒ahk⇒bat⇒rb」という過程を得てようやくタイトル取得に成功。
余談2 ぐぐってみる
RubyからWin32API使えるんだから、ウインドウ一覧ぐらい取得できるのでは?
ruby 覚え書き - 現在開いてるウィンドウを調べる
あった。無事にアクティブなOperaウインドウを取得できた。
余談3 その発想は無かったわ
ニコニコ動画の仕様上、一度動画ページにアクセスしてるんだから、その時ついでにHTMLソース取得しとけば良くね?
戦い終わって ~神々の黄昏~
Operaが絡むと毎回ウインドウタイトルで泣かされる。今回は最終的に関係無くなったからいいが、やっぱりタイトルを取得できるようにするべきだ。
あと、せっかくなんで、ウインドウクラスからアクティブウインドウタイトルを取得するスクリプトを置いとく。Win32APIを使ってるんで、ActiveRubyとかじゃないと無理?
get_activewin_title.rb
Info
- 投稿日
- 2007年12月9日
- タグ
- opera、ruby
- このエントリの固定リンク
- http://bmky.net/diary/log/1576.html
- ブックマークに追加する
-
- コメント
2007
1209
Tagsoperaruby
oAutoPagerizeはAutoPagerizeのOpera版。SITEINFOが取得できず、手動で追加しなければいけないのが面倒だったので、SITEINFOを取得して更新してくれるスクリプトを作った。
oaprize_update.zip
元はRubyスクリプトだが、exerbで実行形式のファイルにしてあるので、解凍したファイルの中にあるooprize.exeをooAutoPagerize.jsと同じフォルダにおいて実行するだけで更新してくれる。
他人がコンパイルしたファイルなぞ信用できないという人の為にソースも用意しているので、そういう人は自分でコンパイルするなりそのままRubyで走らせて欲しい。
oaprize_update.rb
なお、自分でもあまり試していないので、動かなかったらごめんなさい。
Info
- 投稿日
- 2007年12月4日
- タグ
- opera、ruby、userjs
- このエントリの固定リンク
- http://bmky.net/diary/log/1575.html
- ブックマークに追加する
-
- コメント
Praggerの動作やらRuby自体に苦戦しつつも、そこそこプラグインを書けるようになってきたので公開。
Pragger用プラグイン
ニッチなプラグインばかりだが、暇を見てちょくちょく増やそうと思う。
とりあえずこしらえたのが下記4本。
- mixiの指定ユーザーの最新日記一覧を取得する
- 最初はマイミクシィだけにしようとしてたが、どうせならID列挙して一括取得でよくね? ということになった。外部ブログには非対応っつーか、そっちのフィードを登録しなさい。
- ニコニコ動画の検索から新着を取得する
- 作者かファンがアップされ次第マイリストに登録するなら、そちらを利用すればいいが、そうでない場合は律儀に検索する必要があるので作成した。
- 音泉から各番組の放送を取得する
- 更新チェックして開くのが面倒になってきたんで、asxファイルへのリンクを付けてRSS化。
- アニメイトTV Webラジオから各番組の放送を取得
- 上と同じ。各話内容をdescriptionに入れようとしたが、どうもHTMLを手書きで作成しているようで、一部タグが抜けていたり、他番組のタイトルがコメントに残ってたりと非常にカオスだったので断念。ぱにらじ二期まだー?
大体のコツを掴めたので、次はRSS非対応サイトからRSSを作ることにする。
Info
- 投稿日
- 2007年11月30日
- タグ
- ruby
- このエントリの固定リンク
- http://bmky.net/diary/log/1574.html
- ブックマークに追加する
-
- コメント
2007
1130
Tagsruby
Rubyの勉強も兼ねてPraggerを弄ることにした。
インストール
PRagger - Tracにある通り、SubversionをインストールしてPraggerをチェックアウト。ActiveRubyも入れて動作確認。が、動かない。なぜだ!?
Rubyのライブラリコードを追うなど、試行錯誤を繰り返したが動作せず、結局ActiveRuby入れなおしたら何事も無かったかのように動いた。所要時間3時間。疲れた。
RSSを置いてないページからRSSを作る
PluginList - PRaggerまとめサイト それPraを参考にしてyamlを記述していく。
custom_feedというプラグインを使えば良いいようだ。
- captureに記事の繰り返しを含む部分を取得する正規表現を記述。
- splitに、記事と記事を分けるための正規表現を記述。
- 記事として分割された部分からtitleとlinkとして抜き出すための正規表現を記述。
- 最後にRSS::saveで保存する。
yamlはこのような感じになった。
- module: Feed::custom_feed
config:
url: http://www.insertcredit.com/
capture: <!-- Begin news segments -->(.*?)<!-- Begin sidebar segments -->
split: ^\s<table border="0" cellspacing="0" cellpadding="2" width="590">(.*?)</table>\s*?</table>\s*?<br>
title: <p id="title" align="left">(.*?)<
date: <p id="date">(.*?)</td>
link: <a href="http://www\.insertcredit\.com/(archives/\d+\.html)"><font color="#EEEEEE">\[p\]</font>
- module: RSS::save
config:
title: insert credit
about: http://www.insertcredit.com/
description: insert credit
link: http://www.insertcredit.com/
filename: insertcredit.rdf
praggerを実行すると見事にrdfファイルが作成された。ちゃんとタイトルとリンクが入ってる。
custom_feedが使いづらい
まず、linkに無駄な#が入る。普通は抽出ページからの相対パスだろうから、#が必要になるとは思えない。
次にdescription。splitで分割した後のものがそのまま入るので、すごい中途半端なHTMLタグが混入して美しくない。
そこでcustom_feedを改造することにした。
custom_feedを改造
plugin/feed/custom_feed.rbをplugin/myplugin/とでもフォルダを作成してコピー。以後、コピー先を弄る。
まずはlinkの調整。#を追加しないようにする。
mylink = config['url'] ? (config['url'] + '#' + $1) : $1
↓
mylink = config['url'] ? (config['url'] + $1) : $1
次にdescriptionで本文っぽいのを取らせたいので
if(config['description'])
description = Regexp.new(config['description'])
items.each do|i|
if i =~ description
mydescription = $1
i.instance_eval do
@description = mydescription
def description
@description
end
end
end
end
end
return items
end
ソースファイルの最後をこのような感じにする。title取得部分をコピペしてdescriptionにしただけだが。
最後にプラグイン名が同じだとアレなのでファイル名をcustom_custom_feed.rbにしてメソッド名も同様に変える。で、yamlも書き換えて完成。
- module: myplugin::custom_custom_feed
config:
url: http://www.insertcredit.com/
capture: <!-- Begin news segments -->(.*?)<!-- Begin sidebar segments -->
split: ^\s<table border="0" cellspacing="0" cellpadding="2" width="590">(.*?)</table>\s*?</table>\s*?<br>
title: <p id="title" align="left">(.*?)<
date: <p id="date">(.*?)</td>
link: <a href="http://www\.insertcredit\.com/(archives/\d+\.html)"><font color="#EEEEEE">\[p\]</font>
description: <p id="text"><font color="#EEEEEE">([\s\S]*?)</font></p>
- module: RSS::save
config:
title: insert credit
about: http://www.insertcredit.com/
description: insert credit
link: http://www.insertcredit.com/
filename: insertcredit.rdf
無事に本文の抽出に成功。んむ、美しい。出来上がったRSSはこんなかんじ。
insertcredit.rdf
感想
仕組みが複雑ではないので、Ruby初心者の自分にとっては勉強用として丁度良い。
WWW::mechanizeを使うことでフォーム等の操作が可能になるので、今度はそっちに挑戦するつもり。
余談
正規表現を記述する際はHTMLソースとにらめっこするわけだが、マッチするはずなのにしないなーと思ったら、ご丁寧にもFirefoxが<br>を<br />に変えてくれてました。余計なことすんな、橙パンダ。
Info
- 投稿日
- 2007年11月17日
- タグ
- ruby
- このエントリの固定リンク
- http://bmky.net/diary/log/1568.html
- ブックマークに追加する
-
- コメント
2007
1117
Tagsruby
utf-8で運用する
を参考にしたら、普通にsjis通った! と思ったら今度はcontrollerが動かん! とりあえずprotected削ったら動いたんで良しとする。
ようやくRails経由でMySQLにsjisで書き込みができるようになったので、ガリガリ書こうと思ったらRailsの解説がほぼ英語なんでわかんね! いや、なんとなくは分かるというか、単純な入出力を備えたアプリはあっという間にできる。これはすごいんだが、局所的にこーゆーことしたい! ってーのを探そうとするとさっぱり。英語読めない俺が悪いんだが。
こりゃもう似たようなアプリのソース落としまくるしかないかね。Ruby自体よーわからんのでさっぱり分からんけど。
つまり、本買えってことか。幸いにも2月末にRailsの本が出ていた。
RailsによるアジャイルWebアプリケーション開発
どーでもいいこと。
10分で作るRailsアプリ アプリケーション編
宣伝文句ってのは重々承知してるが、10分は無理。
Info
- 投稿日
- 2006年4月13日
- タグ
- ruby
- このエントリの固定リンク
- http://bmky.net/diary/log/1364.html
- ブックマークに追加する
-
- コメント
2006
0413
Tagsruby