Roflcopter i flaker.pl

O ile przy blipie problemów nie było – serwis jest również napisany w Railsach, więc cała obsługa sprowadzała się do wykorzystania biblioteki Active Resource. W przypadku flakera było troszkę trudniej… ale na szczęście Ruby radzi sobie ze wszystkim 😉

Jak czytamy w dokumentacji:
curl -u login:hasło -d 'text=test&link=http://blog.flaker.pl' http://api.flaker.pl/api/type:submit

Pierwszy „genialny” pomysł zakładał wykorzystanie curla, poprzez zrobienia czegoś w rodzaju:
command = "curl -u login:hasło -d 'text=#{tekst}&link=#{link}' http://api.flaker.pl/api/type:submit
eval command

Pomysł przestał być genialny, po ok 3 sekundach zastanawiania się nad nim 😉
Ostatecznie wykorzystałem model, nie dziedziczący jednak po żadnym innym, o następującym kodzie:
class Flaker
require "net/http"
require 'uri'
def self.flac(text, link)
url = URI.parse("http://api.flaker.pl/api/type:submit")
req = Net::HTTP::Post.new(url.path)
req.basic_auth 'login', 'haslo'
req.set_form_data({'text'=>text, 'link'=>link}, '&')
res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
end
end

Status na flakera wrzucamy używając linijki:
Flaker.flac('text', 'link')

Czyli bez praktycznie żadnej magii, wysłanie żądania post na zadany adres, z odpowiednimi parametrami. I działa świetnie 🙂 Oczywiście można by narzekać, że tylko wysyłanie, że nie da się odczytać statusów etc. Ale cóż – miał wysyłać status? Wysyła 😉 Zgodnie z zasadą YAGNI (You Ain’t Gonna Need It) takie rozwiązanie jest jak najbardziej wystarczające.

Reklamy

6 Responses to “Roflcopter i flaker.pl”


  1. 1 Ravicious 6 czerwca 2009 o 10:29
    def self.flac(text, link)

    self jest IMHO niepotrzebne, tylko zaśmieca kod 😉

    Swoją drogą, kiedyś napisałem coś podobnego (funkcjonalność z założenia miała być całkiem inna, nie chodziło o proste wysłanie wiadomości) http://github.com/ravicious/flip/tree/master ale patrząc na to z perspektywy czasu, przydałaby się to napisać jeszcze raz. Jakimś pr0coderem nie jestem, więc żadnego gema na razie nie będzie.

  2. 2 Esse 6 czerwca 2009 o 15:36

    dlaczego? self jest po to, żebym nie musiał tworzyć instancji tej klasy, co tylko zabrałoby pamięć i troszkę czasu 😉

  3. 3 Ravicious 6 czerwca 2009 o 16:41

    A, już rozumiem. Takiego tricku jeszcze nie znałem 😉

  4. 4 Ravicious 16 czerwca 2009 o 15:09

    Hm, a jak tutaj dodać jakieś walidacje? Przy Blipie można użyć HyperactiveResource, a w tym przykładzie nie wykorzystuje się ARes.

    Walidacje są dla mnie ważne, bo dane będzie wprowadzał user.

  5. 5 Esse 16 czerwca 2009 o 15:19

    tutaj nie ma, bo nie były mi potrzebne 😀

  6. 6 Ravicious 16 czerwca 2009 o 15:26

    Ale da się je dodać w przystępny sposób?


Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s





%d blogerów lubi to: