rubyでdeliciousを操作

AVOSへ買収ほやほやのdeliciousですが
APIのwrapperがgemにあったので使ってみました。
weppos/www-delicious - GitHub

install

gem install www-delicious

how to use

readmeそのままですが。

require 'www/delicious'
d = WWW::Delicious.new('user', 'pass')
#d.posts_recent


param = {:url => 'http://www.simonecarletti.com/', 
            :title => 'Cool site!',
            :tags => ['cool','web','いいね'],
            :notes => 'いいんじゃね'}

d.posts_add(param)
こんな感じで登録されます

パラメータの渡し方が若干おかしい

APIドキュメントには、更新時上書きしたくなければ
replace=noを渡せと書いてあります。
つまり更新したけりゃ、replaceパラメータを除外すればいいのですが
www-decliciousを使うと必ずreplaceが渡されています。

初回登録時のパラメータ
"shared=true&url=http://www.simonecarletti.com/&replace=true&description=Cool%20site!&tags=cool%20web%20%E3%81%84%E3%81%84%E3%81%AD&extended=%E3%81%84%E3%81%84%E3%82%93%E3%81%98%E3%82%83%E3%81%AD"

replace=true

更新時のパラメータ
"shared=true&url=http://www.simonecarletti.com/&replace=true&description=Cool%20site!&tags=cool%20web%20%E3%81%84%E3%81%84%E3%81%AD&extended=%E3%81%84%E3%81%84%E3%82%93%E3%81%98%E3%82%83%E3%81%AD"
WWW::Delicious::Error: Invalid response, item already exists

replace=true

ソースを見ると

#www/delicious/post.rb
      def replace
        !(@replace == false)
      end

      def to_params()
        params = {}
        params[:url]          = url
        params[:description]  = title
        params[:extended]     = notes if notes
        params[:shared]       = shared
        params[:tags]         = tags.join(' ') if tags.respond_to? :join
        params[:replace]      = replace
        params[:dt]           = WWW::Delicious::TIME_CONVERTER.call(time) if time
        params
      end


なので、こんな風に修正してやればいけそうです。
ついでにsharedも。

      def to_params()
          #略
        (params[:replace]  = 'no') if replace
        (params[:shared]   = 'no') if shared

追記

rochefort/www-delicious - GitHub
テストコード書いてないんだけど、修正してみた。URI.encode使ってるのも気になるなぁ。