Запись в файл, затем попытка открыть его снова для анализа - PullRequest
0 голосов
/ 15 февраля 2012

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

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

    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 Ответ

3 голосов
/ 15 февраля 2012

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

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

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

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

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

...