2012-02-15 1 views
0

Я пытаюсь сохранить XML-файл пользователя Twitter в файл, а затем попытаюсь прочитать его снова для разбора на экране.Запись в файл, затем попытка открыть его снова для синтаксического анализа

Это то, что я вижу курицу я пытаюсь запустить его ..

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"] 

ответ

3

Вы звоните read на local_file, который является строкой, содержащей имя файла. Вы хотели набрать my_local_file.read, я думаю, использовать объект IO, который вы получили от open. (... или File.read local_file.)

Не то, чтобы это была лучшая форма: почему вы так или иначе пишете во временный файл? У вас есть данные в памяти, поэтому просто передайте их напрямую.

Если вы хотите записать в локальный файл, предает блок из открытых:

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

Таким образом Рубин будет заботиться о закрытии файла для вас и все, что.