写入文件然后尝试再次打开它进行解析

时间:2012-02-15 07:33:46

标签: ruby rubygems open-uri

我正在尝试将twitter用户的xml Feed保存到文件中,然后尝试再次读取它以便解析到屏幕上。

这就是我看到的母鸡,我试图运行它..

    Wrote to file #<File:0x000001019257c8>
Now parsing user info..
twitter_stats.rb:20:in `<main>': undefined method `read' for "keva161.txt":String (NoMethodError)

这是我的代码......

require "open-uri"
require "rubygems"
require "crack"

twitter_url = "http://api.twitter.com/1/statuses/user_timeline.xml?cout=100&screen_name="
username = "keva161"
full_page = twitter_url + username
local_file = username + ".txt"

tweets = open(full_page).read

my_local_file = open(local_file, "w")
  my_local_file.write(tweets)

puts "Wrote to file " + my_local_file.to_s
sleep(1)
puts "Now parsing user info.."
sleep(1)

parsed_xml = Crack::XML.parse(local_file.read)

tweets = parsed_xml["statuses"]

first_tweet = tweets[0]
user = first_tweets["user"]

puts user["screen_name"]
puts user ["name"]
puts users ["created_at"]
puts users ["statuses_count"]

1 个答案:

答案 0 :(得分:3)

您正在read上调用local_file,这是包含文件名的字符串。您打算输入my_local_file.read,我想,使用从open获得的IO对象。 (...或File.read local_file。)

这不是最好的形式:你为什么要写一个临时文件?你有内存中的数据,所以直接传递它。

如果你想写一个本地文件,我推荐来自open的块:

open(local_file, 'w') do |fh|
  fh.print ...
end

这样Ruby就会为你和所有人关闭文件。