Otóż ostatnio, tak dla ćwiczeń, postanowiłem napisać prosty skrypt pobierający powiedzmy 3 ostatnie statusy z blipa. Z samym kodem nie miałem większych problemów:
url = URI.parse("http://api.blip.pl/statuses/")
req = Net::HTTP::Get.new(url.path)
req.basic_auth 'sebcioz', '****'
req.set_form_data({'limit'=>3}, '&')
res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
Pobierać, pobiera natomiast mam problem z samym parsowaniem. Mniej więcej taka forma.
puts res.class #=> Net::HTTPOK
puts res #=> #<Net::HTTPOK:0xb7c992a0>
[{"type":"Status","body":"#drogiblipie czy tylko ja nie mam obs\u0142ugi gg w nowym kopete (z kde 4.2.87)?","created_at":"2009-06-13 12:52:08","user_path":"\/users\/sebcioz","id":11057415,"transport":{"name":"www","id":6}},{"type":"Status","body":"#drogiblipie czy jest jaka\u015b gotowa biblioteka do #ruby do obs\u0142ugi api blipa? W #ror mo\u017cna \u0142atwo ob\u0142ugiwa\u0107 via \"ActiveResource::Base\"...","created_at":"2009-06-12 21:18:10","user_path":"\/users\/sebcioz","id":11036756,"transport":{"name":"www","id":6}},{"type":"Status","body":"#drogiblipie je\u015bli korzystasz z fbsplasha, framebuffera lub innego podobnego cuda przy panoramicznym ekranie prosz\u0119 o kontakt xD","created_at":"2009-06-12 16:23:07","user_path":"\/users\/sebcioz","id":11024493,"transport":{"name":"www","id":6}}]
Nie za bardzo wiem jak do tego podejść. Niby są metody each, to_a, to_ary itp ale nic dobrego nie dają.
Na razie korzystam z httparty. Naprawdę duże możliwości przy prostocie pisania Narazie takie cuś skleciłem, w 100% spełnia moje wymagania Mam tylko zastrzeżenie co do tych warunków, muszę coś ładniejszego wymyśleć ;p
[code]require ‘rubygems’
require ‘httparty’
class Blip
include HTTParty
base_uri ‘api.blip.pl’
basic_auth ‘sebcioz’, ‘****’
def self.create(text)
self.post('/updates', :query => {:body => text})
end
def self.statuses(user, limit = 5)
self.format :json
if user.blank? then
self.get("/statuses.json?limit=#{limit}")
else
self.get("/users/#{user}/statuses.json?limit=#{limit}")
end
end
def self.dashboard(user, limit = 5)
self.format :json
if user.blank? then
self.get("/dashboard.json?limit=#{limit}")
else
self.get("/users/#{user}/dashboard.json?limit=#{limit}")
end
end
def self.bliposphere(limit = 5)
self.format :json
self.get("/bliposphere.json?limit=#{limit}")
end
[quote=sebcioz] if user.blank? then
self.get("/statuses.json?limit=#{limit}")
else
self.get("/users/#{user}/statuses.json?limit=#{limit}")
end
[/quote]
Jak nie piszesz jednolinijkowego ifa to nie potrzebujesz then po warunku.