Home / Diary / タグ: ruby

1234

目次

  1. Ruby製ニコニコ動画用ダウンローダー for Operaとか
  2. Operaのユーザースクリプトを管理するツールをVisualuRubyで作った
  3. ニコニコ動画の動画ファイルとコメントをダウンロードするRubyスクリプト for Operaとか
  4. oAutoPagerize.jsのSITEINFOを更新するスクリプト
  5. Pragger用プラグインを公開
  6. Pragger始めた

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

amatanoyo
様子見。

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

miya2000
「やっぱりタイトルを取得できるようにするべき」%sからとか。ちがうか。

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

Kuruma
"SITEINFOが取得できず、手動で追加しなければいけないのが面倒だったので、SITEINFOを取得して更新してくれるスクリプトを作った。"
os0x
Adobe Airとかで更新アプリ用意するかもです

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

暴満館

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

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

ページ内の見出し一覧
Ruby製ニコニコ動画用ダウンローダー for Operaとか
Operaのユーザースクリプトを管理するツールをVisualuRubyで作った
ニコニコ動画の動画ファイルとコメントをダウンロードするRubyスクリプト for Operaとか
oAutoPagerize.jsのSITEINFOを更新するスクリプト
Pragger用プラグインを公開
Pragger始めた