Home / Diary / タグ: ruby

123

目次

  1. OperaUserJavascriptManager v0.30
  2. Operaのキャッシュを見る試み
  3. OperaUserScriptManager v0.20
  4. Ruby製ニコニコ動画用ダウンローダー for Operaとか
  5. Operaのユーザースクリプトを管理するツールをVisualuRubyで作った
  6. ニコニコ動画の動画ファイルとコメントをダウンロードするRubyスクリプト for Operaとか
  7. oAutoPagerize.jsのSITEINFOを更新するスクリプト
  8. Pragger用プラグインを公開
  9. Pragger始めた
  10. Ruby on Railsに手を出してみた その後

OperaUserJavascriptManager v0.30

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
0125

Tagsoperarubyuserjs

Operaのキャッシュを見る試み

OperaCacheExplorer(opcacheexplorer.zip)

起動したら一番左上のボタンでOperaのキャッシュディレクトリ(Opera/profile/cache4)を指定すると、ずら~~~~っとファイルが表示される。カラムでソート、URLで絞込み、適当にファイルを選択してデスクトップやらフォルダにD&Dでコピーも可能。

メインはサルベージ補助。Opera9.5以降はキャッシュファイルの拡張子が無くなるので、地味に使えるかもしれない。

他には、ニコニコ動画のダウンローダーに組み込んで、ダウンロードする前に、まずキャッシュを見て、見つかったらサルベージしてサーバーにアクセスしなくても済むようにするつもり。

キャッシュの操作にあたって、Ashula.Info / dcache4.urlを参考にした。バイナリ処理は経験が浅いので、今はとりあえず動く程度。9.5が出たらもちょっとまともにする。

Info

SBM Comments

asiamoth
お、del.icio.usってURLが変

2008
0121

Tagsoperaruby

OperaUserScriptManager v0.20

userjsmanager.zip

アップデート機能

スクリプトのURLを設定すると、サーバーのファイルと更新時間を比較して、ローカルが古いようならダウンロードしてくれる。

今のところLast-Modifiedしか見てないので、これを吐いていないサーバーのスクリプトは一切アップデートできないことになる。次あたりで対策するつもり。

コマンドラインオプション対応

いちいち起動してウインドウ表示してられないので。-uで更新確認⇒ダウンロードまで一気に。

また、-dに続いてスクリプトのURLを渡すとダウンロードしてフォルダに格納してくれるようにした。

レイアウト変更

GreaseMonkeyの猿真似を止めて、もちっと使いやすい形に。

注意

まだまだ不安定なので、スクリプトを操作する場合は予めバックアップを取ってほしい。

Info

2008
0115

Tagsoperarubyuserjs

Ruby製ニコニコ動画用ダウンローダー for Operaとか

地味に更新。

nicovideo_download.zip

変更点

本当はダウンロードしている動画をOperaのキャッシュから探して無駄なダウンロードを省くようにするつもりだったが、土壇場でバグが見つかったので見送り。

nicovideo_download.rb(ソース)

Info

2007
1225

Tagsoperaruby

Operaのユーザースクリプトを管理するツールをVisualuRubyで作った

RubyでGUIが作れるというので勉強も兼ねてVisualuRubyに挑戦。

userjsmanager.zip
2007/12/20:エディタが正確に開けない不具合が早速出たので修正。

userjsmanager.exeを実行すると、GreaseMonkeyほぼまんまの管理画面が現れるので、そちらを弄ったことがあるなら操作上迷うことは無いだろう。詳しくは同梱のテキストを参照。

VisualuRubyの利点

VisualuRubyの不満点

開発途中だから仕方が無いか。一応気合でなんとかなる。

コントロールの配置については、Formdesignerを使えばある程度は解消するが、配置したコントロールをクリックすると大きさが変わってしまったり、出力するとウインドウスタイルが全部整数になってしまうので、若干手直しが必要になる。

原因不明というか、結局分からなかったもの

やりたいこと

雑感

簡単にGUIが書けるのは確かだが、結局はWindowsのコントロールを使うので、構築上ある程度の縛りは受ける。

それはいいんだが、現時点ではWindowsAPIの資料を漁るのが必須なのが正直めどい。そこまで凝ったGUIを作れなくてもいいので、Rubyの知識だけで書ける様になるのが一番の理想か。

余談

exerbのguiモードでコンパイルしたらAVGが反応したので思わず吹いた。久々にAVGのダイアログ見たわ。

cuiにしたら反応しなくなったので良かったが。ってか、コードのどこに反応したんだ?

Info

SBM Comments

as365n2
_[skin]

2007
1219

Tagsoperarubyuserjs

ニコニコ動画の動画ファイルとコメントをダウンロードするRubyスクリプト for Operaとか

実行ファイル形式になっているので、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

SBM Comments

edvakf
はてなスター10個ぐらいあげたい。

2007
1209

Tagsoperaruby

oAutoPagerize.jsのSITEINFOを更新するスクリプト

oAutoPagerizeはAutoPagerizeのOpera版。SITEINFOが取得できず、手動で追加しなければいけないのが面倒だったので、SITEINFOを取得して更新してくれるスクリプトを作った。

oaprize_update.zip

元はRubyスクリプトだが、exerbで実行形式のファイルにしてあるので、解凍したファイルの中にあるooprize.exeをooAutoPagerize.jsと同じフォルダにおいて実行するだけで更新してくれる。

他人がコンパイルしたファイルなぞ信用できないという人の為にソースも用意しているので、そういう人は自分でコンパイルするなりそのままRubyで走らせて欲しい。

oaprize_update.rb

なお、自分でもあまり試していないので、動かなかったらごめんなさい。

Info

SBM Comments

edvakf
applicationもstorageも各ウィジェットで一つ。ウィ

2007
1204

Tagsoperarubyuserjs

Pragger用プラグインを公開

Praggerの動作やらRuby自体に苦戦しつつも、そこそこプラグインを書けるようになってきたので公開。

Pragger用プラグイン

ニッチなプラグインばかりだが、暇を見てちょくちょく増やそうと思う。

とりあえずこしらえたのが下記4本。

mixiの指定ユーザーの最新日記一覧を取得する
最初はマイミクシィだけにしようとしてたが、どうせならID列挙して一括取得でよくね? ということになった。外部ブログには非対応っつーか、そっちのフィードを登録しなさい。
ニコニコ動画の検索から新着を取得する
作者かファンがアップされ次第マイリストに登録するなら、そちらを利用すればいいが、そうでない場合は律儀に検索する必要があるので作成した。
音泉から各番組の放送を取得する
更新チェックして開くのが面倒になってきたんで、asxファイルへのリンクを付けてRSS化。
アニメイトTV Webラジオから各番組の放送を取得
上と同じ。各話内容をdescriptionに入れようとしたが、どうもHTMLを手書きで作成しているようで、一部タグが抜けていたり、他番組のタイトルがコメントに残ってたりと非常にカオスだったので断念。ぱにらじ二期まだー?

大体のコツを掴めたので、次はRSS非対応サイトからRSSを作ることにする。

Info

2007
1130

Tagsruby

Pragger始めた

Rubyの勉強も兼ねてPraggerを弄ることにした。

インストール

PRagger - Tracにある通り、SubversionをインストールしてPraggerをチェックアウト。ActiveRubyも入れて動作確認。が、動かない。なぜだ!?

Rubyのライブラリコードを追うなど、試行錯誤を繰り返したが動作せず、結局ActiveRuby入れなおしたら何事も無かったかのように動いた。所要時間3時間。疲れた。

RSSを置いてないページからRSSを作る

PluginList - PRaggerまとめサイト それPraを参考にしてyamlを記述していく。

custom_feedというプラグインを使えば良いいようだ。

  1. captureに記事の繰り返しを含む部分を取得する正規表現を記述。
  2. splitに、記事と記事を分けるための正規表現を記述。
  3. 記事として分割された部分からtitleとlinkとして抜き出すための正規表現を記述。
  4. 最後に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
1117

Tagsruby

Ruby on Railsに手を出してみた その後

utf-8で運用する

を参考にしたら、普通にsjis通った! と思ったら今度はcontrollerが動かん! とりあえずprotected削ったら動いたんで良しとする。

ようやくRails経由でMySQLにsjisで書き込みができるようになったので、ガリガリ書こうと思ったらRailsの解説がほぼ英語なんでわかんね! いや、なんとなくは分かるというか、単純な入出力を備えたアプリはあっという間にできる。これはすごいんだが、局所的にこーゆーことしたい! ってーのを探そうとするとさっぱり。英語読めない俺が悪いんだが。

こりゃもう似たようなアプリのソース落としまくるしかないかね。Ruby自体よーわからんのでさっぱり分からんけど。

つまり、本買えってことか。幸いにも2月末にRailsの本が出ていた。

RailsによるアジャイルWebアプリケーション開発

どーでもいいこと。

10分で作るRailsアプリ アプリケーション編

宣伝文句ってのは重々承知してるが、10分は無理。

Info

2006
0413

Tagsruby

暴満館

最新のエントリ
注目のエントリ(はてな)
ゲーム攻略

暴満館 ~The House of Full Violence~
Powered by WordPress.
About | Contact | 新着のエントリ情報 RSS

ページ内の見出し一覧
OperaUserJavascriptManager v0.30
Operaのキャッシュを見る試み
OperaUserScriptManager v0.20
Ruby製ニコニコ動画用ダウンローダー for Operaとか
Operaのユーザースクリプトを管理するツールをVisualuRubyで作った
ニコニコ動画の動画ファイルとコメントをダウンロードするRubyスクリプト for Operaとか
oAutoPagerize.jsのSITEINFOを更新するスクリプト
Pragger用プラグインを公開
Pragger始めた
Ruby on Railsに手を出してみた その後