2012-02-15 5 views
0

트위터 사용자의 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"] 

답변

3

당신은을 포함하는 문자열입니다 local_fileread을 요구하고있다 파일 이름. open에서 가져온 IO 객체를 사용하려면 my_local_file.read을 입력해야합니다. (... 또는 File.read local_file)

이것이 가장 좋은 형식은 아닙니다. 어째서 왜 임시 파일에 쓰고 있습니까? 메모리에 데이터가 있으므로 직접 전달하십시오.

로컬 파일에 기록 할 경우

, 나는 오픈에서 블록을 칭찬 :

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

그런 식으로 루비 당신과 모두를위한 파일을 닫는 처리됩니다.

관련 문제