Twitter의 검색 API에서 RubyMotion 클래스를 읽어서 아래와 같이 Tweet
개체를 만듭니다.RubyMotion을 사용하여 JSON 구문 분석
(main)> 2012-11-08 17:01:32.634 Hello[39940:c07] -[__NSCFString bytes]: unrecognized selector sent to instance 0xea1f800
2012-11-08 17:01:32.685 Hello[39940:c07] json.rb:20:in `parse:': NSInvalidArgumentException: -[__NSCFString bytes]: unrecognized selector sent to instance 0xea1f800 (RuntimeError)
from tweets_controller.rb:11:in `create_tweets'
from tweets_controller.rb:7:in `tweets'
from twitter_view_controller.rb:21:in `tableView:numberOfRowsInSection:'
from app_delegate.rb:10:in `application:didFinishLaunchingWithOptions:'
2012-11-08 17:01:32.686 Hello[39940:c07] *** Terminating app due to uncaught exception 'RuntimeError', reason: 'json.rb:20:in `parse:': NSInvalidArgumentException: -[__NSCFString bytes]: unrecognized selector sent to instance 0xea1f800 (RuntimeError)
from tweets_controller.rb:11:in `create_tweets'
from tweets_controller.rb:7:in `tweets'
from twitter_view_controller.rb:21:in `tableView:numberOfRowsInSection:'
from app_delegate.rb:10:in `application:didFinishLaunchingWithOptions:'
가 어떻게이 JSON을 구문 분석해야합니다
은 내가이 오류를 언제 실행?
class TweetsController
def initialize
@twitter_accounts = %w(dhh google)
end
def tweets
@tweets ||= create_tweets
end
def create_tweets
BW::JSON.parse(twitter_search_results)["results"].each do |result|
@tweets << Tweet.new(result)
end
@tweets
end
def twitter_search_results
query = @twitter_accounts.map{ |account| "from:#{account}" }.join(" OR ")
url_string = "http://search.twitter.com/search.json?q=#{query}"
url_string_escaped = url_string.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
url = NSURL.URLWithString(url_string_escaped)
request = NSURLRequest.requestWithURL(url)
response = nil
error = nil
data = NSURLConnection.sendSynchronousRequest(request, returningResponse: response, error: error)
##raise "BOOM!" unless (data.length > 0 && error.nil?)
json = NSString.alloc.initWithData(data, encoding: NSUTF8StringEncoding)
end
end
class Tweet
attr_reader :created_at, :from_user, :text
def initialize(tweet_result)
@created_at = tweet_result["created_at"]
@from_user = tweet_result["from_user"]
@text = tweet_result["text"]
end
end
내 질문에 가장 간결하게 답변하므로 직접 답변을 수락했습니다. 스티브 로스 (Steve Ross)의 대답과 블로그 게시물은 훌륭하고 읽기에도 가치가 있습니다. http://sxross-blog.herokuapp.com/2012/11/11/how-to-build-a-twitter-search-client-in-ruby -운동/ – Mike