にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

Ruby

ニコニコ動画ダウンロードAPI:「この動画を登録しているマイリスト」取得機能

動画IDを指定して、その動画を登録しているマイリストの一覧を取得することができます。 nv = Nicovideo.new(account['mail'], account['password']) # Nicovideoオブジェクトの生成 openlist = nv.openlist(video_id) # OpenListオブジェクトの取得 1ページ…

ニコニコ動画ダウンロードAPI:マイリスト取得機能

以下のように、マイリストIDを公開マイリストのIDを指定することで、当該マイリストIDのMyListインスタンスを取得します。 nv = Nicovideo.new(account['mail'], account['password']) # Nicovideoオブジェクトの生成 mylist = nv.mylist(mylist_id) # MyLis…

ニコ動ダウンロード用gem更新(ver 0.0.6)

新しい機能を追加する前にサンプルを書こうと思ったらバグがあったのでアップデートしました。 マイリスト経由で動画をダウンロードするときにできない場合があった 変更履歴など こちらを参照ください→ニコ動ダウンロード用ライブラリがgemコマンドでインス…

ニコ動ダウンロード用gem更新(ver 0.0.4->0.0.5)

※追記とコメント欄での報告の2点を修正して0.0.5として追加リリースしました。 以下の機能を追加しました。gem install nicovideo(または、gem update nicovideo)で最新版を取得できます。 マイリスト取得機能 「この動画を登録しているマイリスト」の取得…

オンラインの正規表現エディタ

Rubular: a Ruby regular expression editor 正規表現をマッチ対象の文字列を書くと、マッチするかしないかを判定してくれます。 片方(正規表現or対象文字列)を入力すると、もう一方を入力するごとに自動で判定してくれるので、結構便利そうです。 ちょっ…

UDPSocket#recvfromの逆引きタイムアウト待ちをなくす

DNSのない閉じたネットワークでUDPSocketを使ったプログラムを動作させていると、パケットが届いてからrecvfromメソッドで読み込まれるまで数秒間の遅延が発生していました。 調べたところ、Rubyのソケットではデータ受信時に送信アドレスのホスト名の逆引き…

ニコ動ダウンロード用gem更新(ver 0.0.3)

ニコニコ動画ダウンロード用gemの動画FLVをダウンロードするメソッドにおいて、サンプルコードと実装に齟齬があり、きちんと動画ファイルを保存できていなかった問題を修正しました。 ニコニコダウンロードうまくいかず - はけの徒然日記 Re: ニコニコダウン…

ニコ動ダウンロード用ライブラリがgemコマンドでインストールできるようになりました

http://rubyforge.org/projects/nicovideo/ 昨日の記事で書いていたRubyforgeへの登録の件が完了したので、gemコマンドでインストールできるようになりました。 # gem install nicovideo初めてのRubyforgeへの登録なのでなんとなく嬉しいですが、しっかりメ…

ニコニコ動画のFLVやコメントをダウンロードするためのGEMの適当なまとめ

トラックバック(ニコニコ動画のコメントを取得するクラス - A More Beautiful day)を頂いたので久しぶりに自分の作った野良GEMを使ってみると、意外としっかり動いてくれるのでRubyforgeに登録しようと申請を出してみました。今は返事待ち。 本ブログでこ…

1.9.0がリリースされたそうな

まつもと ゆきひろですRuby 1.9.0をリリースしました。入手先は ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.0-0.tar.bz2 407cc7d0032e19eb12216c0ebc7f17b3 ruby-1.9.0-0.tar.bz2 ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.0-0.tar.gz b20cce98b2…

UDPで通信する

なんかややこしかったのでメモ。 受信側 require 'socket' u1 = UDPSocket.open() u1.bind("0.0.0.0", 10000) p u1.recvfrom(65536) 送信側 require 'socket' u2 = UDPSocket.new() u2.connect('localhost', 10000) u2.send('Hello world!' , 0) 実行結果 先…

REXMLで同名の要素を全部まとめて取り出す

例えば、 <foo> <bar attr="1"/> <bar attr="2"/> <bar attr="3"/> </foo> みたいなXMLがあって、名前がbarの要素を取り出すには当然の如く、 require 'rexml/document' doc = REXML::Document.new(File.open("sample.xml").read) elems = doc.root.elements["foo/bar"] # なんかの処理 とすれば、elemsにはbar要素が…

配列をデータベースっぽく使うときは排他制御が必要ですかね

はてな?Rubyグループ - Rubyの魔神 - rubyの配列、ハッシュでデータベースっぽく データベースを使うほどのことでもない時に配列・ハッシュでできればなと 上記の状況ってどんな場合だろう?と考えると、リクエストごとにプロセスが起動するWebアプリじゃな…

mixiのデザイン変更にしたがって

Publish::mixi_diary_writerも修正しなければいけなさそう。 というわけで、近いうちにやる。(まだやってない) 追記 修正不要でした。問題なくPOSTできた。

CEATECのブース配置図を一枚画像化した

CEATECのウェブページでのブース配置図がGoogleマップベースになっていました。 ブラウザで見る分には使いやすいんですが、印刷してルートを考えたりするのには向いていないと思ったので一枚画像にしました。 画像はこちら きっと会場に着いたら紙の配置図を…

ニコニコ動画をダウンロードしたりするgemを作ってみた

といってもrubyforgeに登録したわけじゃないので野良gemですが、 あれこれ機能をつけたりする前にとりあえず使える形にしてしまおうと。 ※追記(2008/01/07):今はRubyforgeに登録してgemコマンドでインストールできるようにしてあります。 - nicovideo-0.0.1…

WWW::MechanizeでPOSTするデータを直接書くための野良拡張

先日のニコニコ動画のコメント取得スクリプトでは、WWW::Mechanizeを使用していましたが、最後にコメントを取得する部分だけはNet::HTTPクラスを直接使用していました。 comments = Net::HTTP.start(comment_host, 80) {|http| response = http.post(path, b…

ニコニコ動画のコメント最新500件を取得する

参考サイトのコードをつぎはぎしたらできました。 #!/usr/bin/env ruby -Ku require 'yaml' require 'rubygems' require 'mechanize' require 'cgi' $KCODE = 'u' video_id = ARGV.first.scan(/sm\d+$/).first agent = WWW::Mechanize.new agent.post('https…

RMagickのFedora Core 7へのインストール

メモリを増設したのでFedora Core 7をVMware上で動かして遊ぼうとしているのだが、RMagickのインストールで少し躓いた。 普通にgem install RMagickすると(もちろんImageMagickはインストールしてある前提)、TTFフォントがないとか怒られるので、手順とし…

rflickrでハマるもちゃんとドキュメント読んでなかっただけという結果

RubyスクリプトからFlickr APIをゴニョゴニョしようと思い、以下を実行。 API Keyを取得 #=> 問題なし rflickrライブラリでトークンを取得 #=> なんか上手く行かない rflickrについてくるGETTING_STARTEDというファイルに書いてあるサンプルファイルを実行し…

ハッシュの中の指定されたキーに対する値がセットされているかチェックする

例えば、 h = {:a => 'aaa', :b => 'bbb', :c => 'ccc', :d => nil} みたいなハッシュがあったとして、:aのキーに対応する値があるかチェックするには puts 'true' if h[:a] みたいにそのままif文に突っ込めばいいのだけれど、それが複数になった場合に一つ…

YAMLのBase64記述をデコードする

Publish系のプラグインでは、YAMLにパスワードの記述を要するものが殆どです。 で、それを使うYAMLを周りに人がいる状況で編集したりするのは気が引けますよね。 Plaggerでは、passwordの項目は一度実行すると'base64::'つきで書き換えてくれます。 なのでPR…

multipart/form-dataのデータを取り出す

画像などのファイルをアップロードできるCGIを作成する場合の書き方。 基本はここのように書けばよい。 常識なのかもしれないが、入力パラメータをファイルと同時にPOSTする場合も、同じ取り出し方をしなければならない、ということに気づかなくてしばらく悩…

JRubyでgem

まずはgemをインストール、かと思いきや、$JRUBY_HOME/bin/gemが既にありました。 しかし、それを実行するには、jrubyを明示的に指定しないといけません。 なので、.bashrcに alias jgem='jruby $JRUBY_HOME/bin/gem' と書いて、以降はjgemでインストールし…

今まで作ったPRaggerプラグインまとめ

PRaggerが近々リリースするとのことなので、これまで作ったプラグインをまとめてみました。 Publish::とかの表記は現在のに合わせて修正(中)。 Publish::mixi_diary_writer フィードをmixiに投稿するプラグイン。 オプションの指定によって、1アイテム1…

ファイル名にタイムスタンプと日付を付与したファイルを作成する

久しぶりにこれの続き。JRubyの動作確認のついでに。 if ARGV.size != 1 then puts "usage: #{__FILE__} [file]";exit end filename = ARGV.shift + Time.now.strftime("-%Y-%m-%d") File.open(filename, "wb").write("Hello!")

Ubuntu7.04でJRubyを使う

JRubyは最新のものを使いたいので、Subversionでとってくることにする。 まずはJDK6とantのインストール。 $ sudo apt-get install sun-java6-jdk ant次に、Subversion経由でJRubyの取得、ビルド。 $ svn co http://svn.codehaus.org/jruby/trunk/jruby $ cd…

ScuttleにもPOST

にたまごほうれん草 - というわけでpublish::deliciousのコード内のpost_urlを、 post_url = 'http://[投稿先のScuttleのパス]/api/posts/add?' に変更。あとはクラス名とかメソッド名を調整しておしまい。 Scuttleは好きなサーバに設置可能なので、そのURL…

フィードの重複を取り除くプラグインFilter::deduped.rb

cronで定期的にフィードを取得して(例えばはてダなどに)投稿する場合、フィードの重複を取り除きたい場合があるかもしれません。 というわけで、名前をPlaggerのDedupedプラグインから拝借して、(かなり手抜きの)deduped.rbを作成してみました。メソッド…

Rubyをソースからインストール@Ubuntu7.04

v1.8.6をソースからインストールして使用していたが、どうやらOpenSSLのライブラリが入っていなかった模様。 トサ日記(tech side): Rubyのインストールによると、ext/Setupをいじる必要があるようす。 というわけで、ext/Setupから opensslの行のコメントア…