Deprecated: Assigning the return value of new by reference is deprecated in /home/pedant/www/pedant.sk/blog/wp-includes/cache.php on line 103

Deprecated: Assigning the return value of new by reference is deprecated in /home/pedant/www/pedant.sk/blog/wp-includes/query.php on line 61

Deprecated: Assigning the return value of new by reference is deprecated in /home/pedant/www/pedant.sk/blog/wp-includes/theme.php on line 1109
Pedantov tiežblog - Vlastný Jabberbot… trebárs pre Twitter

Vlastný Jabberbot… trebárs pre Twitter

Je to už pomerne dávno, čo Twitter ukončil podporu pridávania “statusov” cez svoj XMPP kanál. Práve tento spôsob interakcie bol pre mna najväčším lákadlom služby. Bez zbytočných reči, poďme si ukázať ako jednoducho naštartovať vlastného Jabber bota. Ten za nás môže trebárs postovať na blog, tvítovať, alebo len tak odpovedať.

Budeme potrebovať základy jazyka Ruby, spolu s funkčným prostredím.
Čerstvé jabber konto (napríklad na jabber.cz vytvoríte pomocou niektorého IM klienta).
A nakoniec trochu trpezlivosti.

Všetky ingrediencie spolu zmiešame, pretrasieme a ideme na to. Nebudem sa podrobne venovať inštaláii Ruby, existuje niekoľko riešení tiež pre OS od Microsoftu, Mac OSX alebo serverové distribúcie linuxu.

Pre Ruby je potrebné pomocou “gem” manažéra nainštalovať knižnicu Brett Stimmermana - “Jabber::Bot“. Použijeme príkaz:

gem install jabber-bot

Odklepneme potrebné závislosti. Vytvoríme spustiteľný súbor napríklad ./jabberbot.rb, a hajde skriptovať.

Skript beziaci na linuxovom (mac) servri by vyzeral takto:

#!/usr/bin/env rubyrequire 'rubygems'
require 'jabber/bot'
require 'net/http'

# Kompletna konfiguracia bota
config = {
  :name      => 'SuperBot',
  :jabber_id => 'superbot@jabber-server.domena',
  :password  => 'heslo',
  :master    => 'moje_jabber@jabber-server.domena',
  :is_public => true,
  :status    => 'Ahoj, som tvoj superbot.',
  :presence  => :chat,
  :priority  => 10
}

# Vytvorime bota
bot = Jabber::Bot.new(config)

# Pridame prikaz
bot.add_command(
    :syntax      => 'twitter ',
    :description => 'Superbot tvitne tvít',
    :regex       => /^twitter\\s+.+$/,
    :alias	 => [:syntax => 't ', :regex => /^t\\s+.+$/]
) do |sender, message|
begin
 	url = URI::parse("http://twitter.com/statuses/update.xml")
 	req = Net::HTTP::Post.new(url.path)
 	# Autentikacia pre konto na Twitteri
 	req.basic_auth 'superbot', 'heslo'
 	req.set_form_data({"status" => "#{message}"})
 	res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
 rescue
 	"Nejaky error #{res.error}"
 end
	"twitnute :)"
end

# Vypustime bota
bot.connect

Bot sa pripojí s svojmu kontu a počúva. V prípade ze mu postnete správu v tvare “twitter Toto je moj novy status…”, regulárnym výrazom ju rozpozná a metódou POST odošle na Twitter API.

Podobným spôsobom je možné obsluhovať akékoľvek API, pričom bot môže ideálne bežať na servri alebo desktope. Protokol XMPP v spojení s webovými službami skrýva fantastické neobmedzené možnosti, nechajte sa inšpirovať ;)

Niektoré jabber instant messengere môžu mať svojský formát odosielaných správ (html tagy, duplikovanie url…) ale o tom niekedy nabudúce, prípadne v diskusii :)

UPDATE:
iChat zdvojuje url adresy do hranatých [] zátvoriek. Pred “begin” pridajte:

# iChat hack
message = message.gsub('/\\[http:\\/\\/.+\\]\\s/', '')

Adium a Pidgin sú nejaké lenivé, zrejme neodosiela.
Psi funguje na 100%, Miranda funguje na 100%.

“Vlastný Jabberbot… trebárs pre Twitter” 2x komentované

  1. eMDi

    skvely clanok, pridavam si ta do citacky a do bookmarks ;-)

  2. P

    Dikes eMDi

Tvoja reakcia

  e-mail a web »