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使ってるのも気になるなぁ。