Ever since Twitter decided to close their Jabber-gateway I was looking for a solution that allowed me to use Twitter over Jabber again. Same days ago I stumbled over a ruby
script by
dkam, that perfectly fits my needs. Because I'm following quite a few german Twitterers I had some problems with ugly HTML entities like:
Weiß hier jemand ob der iPod Touch 1G Mikros unterstützt?
So I decided to take my non-existent ruby skils and extend
dkam's script to jabber me the full UTF8 glory. So here's my result of a little bit of hacking:
#!/usr/bin/ruby
require 'rubygems'
require 'xmpp4r-simple'
require 'twitter'
require 'benchmark'
require 'cgi'
require 'htmlentities'
jabber_user="jabber-user@luusa.org"
jabber_pass="password"
$receiving_jabber = "user@jabber.ccc.de"
twitter_user="obama"
twitter_pass="change!"
jabber = twitter = nil
cj = Benchmark.realtime {jabber = Jabber::Simple.new(jabber_user, jabber_pass)}
puts "Connecting to Jabber: #{cj}"
ct = Benchmark.realtime {twitter = Twitter::Base.new(twitter_user, twitter_pass) }
puts "Connecting to Twitter: #{ct}"
def filters(status)
if status.user.name == "MelbTransport"
yield if status.text =~ /Craigieburn|Broadmeadows|Upfield/
else
coder = HTMLEntities.new
status.text = coder.decode(status.text)
yield
end
end
def get_tweets(twitter, tweets, jabber)
begin
twitter.timeline.reverse.each do |s|
if tweets[s.id].nil?
filters(s) { jabber.deliver($receiving_jabber, "#{s.user.screen_name} says: #{s.text}") }
tweets[s.id] = "Sent"
end
end
rescue Twitter::CantConnect
puts "Can't connect. Sleeping."
sleep 120
retry
end
end
def post_tweets(twitter, jabber)
jabber.received_messages { |msg| twitter.post(msg.body) if msg.type == :chat }
end
def main(twitter, jabber)
tweets = {}
while true
puts "Action!"
get_tweets(twitter, tweets, jabber)
post_tweets(twitter, jabber)
sleep 60
end
end
main(twitter, jabber)