ruby-tumblr

gem update -y ruby-tumblr

read

require "tumblr" 

Tumblr::API.read("tumblr.dynamic-semantics.com") do |pager|
  data = pager.page(0)
  p data.tumblelog
  data.posts.each do |post|
    p post
  end
end

write

require "tumblr" 

Tumblr::API.write($email, $password) do
  regular("test body", "test title")
  quote("test quote", "test source")
  link("http://tumblr.dynamic-semantics.com", "test link")
end

backup

require "tumblr"

Tumblr::API.read("tumblr.dynamic-semantics.com") do |pager|
  data = Tumblr::Data.new
  0.upto(pager.last_page) do |n|
    puts "get #{n}/#{pager.last_page}"
    data << pager.page(n)
  end
  data.save("backup.xml")
end

svn

svn co svn://rubyforge.org/var/svn/ruby-tumblr

実行

  • examples/backup.rbをcopyして、自分のURLに変えて実行してみる。

エラー

  • ../lib/tumblr.rb:215:in `each': wrong number of arguments (1 for 0) (ArgumentError)
  • ../lib/tumblr.rb:163:in `initialize': undefined method `text' for nil:NilClass (NoMethodError)
  • ../lib/tumblr.rb:145:in `initialize': undefined method `text' for nil:NilClass (NoMethodError)
  • ../lib/tumblr.rb:211:in `initialize': undefined method `text' for nil:NilClass (NoMethodError)

patch

Index: lib/tumblr.rb
===================================================================
--- lib/tumblr.rb       (revision 6)
+++ lib/tumblr.rb       (working copy)
@@ -142,7 +142,8 @@
       def initialize(elt, tz)
         super
         @text = elt.elements["quote-text"].text
-        @source = elt.elements["quote-source"].text
+       e = elt.elements["quote-source"]
+        @source = e ? e.text : ''
       end
       
       def to_xml
@@ -160,7 +161,8 @@
       
       def initialize(elt, tz)
         super
-        @caption = elt.elements["photo-caption"].text
+        e = elt.elements["photo-caption"]
+       @caption = e ? e.text : ''
         @urls = Hash.new
         elt.elements.each("photo-url") do |url|
           @urls[url.attributes["max-width"].to_i] = url.text
@@ -206,10 +208,11 @@
       
       def initialize(elt, tz)
         super
-        @title = elt.elements["conversation-title"].text
+       e = elt.elements["conversation-title"]
+        @title = e ? e.text : ''
         @text = elt.elements["conversation-text"].text
         @lines = []
-        elt.each("conversation-line") do |line|
+        elt.elements.each("conversation-line") do |line|
           name = line.attributes["name"]
           label = line.attributes["label"]
           @lines << [name, label, line.text]
Last modified: 2007-08-21