# Created by Ben Hall - Blog.BenHall.me.uk require 'xml' require 'mscorlib' require 'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' include System include System::Net class IronTwitter def initialize(username, password) @username = username @password = password end def update(msg) url = "http://twitter.com/statuses/update.xml" options = { :status => msg } send_request url, options end alias :t :update def friends_timeline(tweetCount=20, &b) url = "http://twitter.com/statuses/friends_timeline.xml" options = { :count => tweetCount } send_request url, options readStream = System::IO::StreamReader.new(@response.GetResponseStream) doc = Document.new(readStream.read_to_end) if block_given? doc.elements('statuses/status') do |status| b.call status end else raise 'Block required for processing statuses' end end def send_request(url, options) requestUrl = convert url, options request = WebRequest.Create(requestUrl) request.Method = "POST"; request.ContentType="application/x-www-form-urlencoded"; request.ContentLength = 0; request.UserAgent = "IronTwitter" request.Credentials = NetworkCredential.new(@username, @password) puts 'Sending ' << url @response = request.GetResponse puts 'Done ' << @response.StatusDescription end def convert(url, options) first, separator = true, '?' options.each do |key, value| separator = "&" unless first url += "#{separator}#{key}=#{value}" first = false end return url end end