
I’m Marcin 'newman' Nowakowski, a father, old muscle cars fan, webdesigner & coder from Poznań, Poland. I coded mostly in XHTML/CSS, ActionScript, JavaScript, Ruby On Rails. You can track me online: Blip, GoldenLine, LinkedIn or mail me:
Masz ciekawy pomysł lub realizujesz projekt i jest Ci potrzebna osoba do współpracy? Pisz śmiało, jestem otwarty na nowe wyzwania i chętnie odpowiem na każdy (poważny!) mail - .
Postanowiłem, że mój nowy serwis w RoR wzbogacę o treści z innych serwisów na których się udzielam. W tym przypadku wziąłem na warsztat Blip. Oczywiście można skorzystać z gotowych skryptów jakie są udostępniane przez serwisy tego typu, jednak ja chciałem to jak najbardziej dostosować do moich potrzeb (potrzeb mojej aplikacji).
Pierwszy krok to zerknąłem do (=caps)API. Blip udostępniam dosyć obszerną i czytelną dokumentację (=caps)API.
Kolejny krok to protokół (=caps)HTTP w Ruby. Temat jak do tej pory bardzo mało eksploatowany w moich projektach jeśli chodzi o połączenie z (=caps)API. Dużą pomocą okazała się książka (=caps)TAO no i Google.
Stworzyłem testowy kod w Ruby, który pewnie nie jest doskonały, ale na początek wystarcz. Następnie dodam to do mojej aplikacji RoR i przygotuję odpowiedni helper, który zwróci mi ładnie sformatowany kod (=caps)HTML.
Oto w pełni działający kod, może komuś się przyda (oczywiście trzeba mieć konto na Blip.pl). Inspiracją był post na blogu kosmaczewski.net. Warto jeszcze pobawić się ustawianiem statusów (POST), ale to potem…
require 'rubygems'
require 'net/http'
require 'uri'
require 'json'
require 'base64'
class BlipRequest
def self.config
{
"server" => "api.blip.pl",
"username" => "your_username",
"password" => "your_password"
}
end
def self.request(verb, url, parameters = nil)
Net::HTTP.start(config["server"]) do |http|
headers = {
"Accept" => "application/javascript",
"User-Agent" => "your_username",
"X-Blip-api" => "0.02",
"Authorization" => "Basic " + Base64.b64encode(config["username"] + ":" + config["password"])
}
path = "/" + url
req = nil
case verb.upcase
when "GET":
req = Net::HTTP::Get.new(path, headers)
when "POST":
req = Net::HTTP::Post.new(path, headers)
when "PUT":
req = Net::HTTP::Put.new(path, headers)
when "DELETE":
req = Net::HTTP::Delete.new(path, headers)
else
raise Exception.new("Invalid HTTP verb")
end
req.basic_auth config["username"], config["password"]
req.set_form_data(parameters) if !parameters.nil?
response = http.request(req)
if response.code == "200" && verb.upcase == "GET"
JSON.parse(response.body)
else
print response.code + " " + response.message + " " + response.body
end
end
end
end
answer = BlipRequest.request("GET", "updates.json?limit=2")
answer.each do |src|
puts src['id'].to_s + ': ' + src['created_at'] + ': ' + src['body'] + ' user: ' + src['user_path'].split("/").last
end