]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
twitter: filter ret.latest status if non specified
authorMatthias Hecker <apoc@sixserv.org>
Thu, 14 Nov 2013 15:51:26 +0000 (15:51 +0000)
committerMatthias Hecker <apoc@sixserv.org>
Thu, 14 Nov 2013 15:51:26 +0000 (15:51 +0000)
data/rbot/plugins/twitter.rb

index 991b5bd3e48685abe62f26f5184d961107658ed7..3ed8e62c1c432ea3e9303550ed2adc8fb4ca3b45 100644 (file)
@@ -38,14 +38,23 @@ class TwitterPlugin < Plugin
     :default => 3, :validate => Proc.new { |v| v > 0 && v <= 10},
     :desc => "Maximum number of status updates shown by 'twitter [home|mentions|retweets] status'")
 
+  URL_PATTERN = %r{twitter\.com/([^/]+)(?:/status/(\d+))?}
+
   def twitter_filter(s)
-    loc = Utils.check_location(s, Regexp.new('twitter\.com/(#!/)?.*/status/\d+'))
+    loc = Utils.check_location(s, URL_PATTERN)
     return nil unless loc
-    id = loc.first.match(/\/status\/(\d+)/)[1]
-
-    response = @app_access_token.get('/1.1/statuses/show/'+id+'.json').body
+    matches = loc.first.match URL_PATTERN
+    if matches[2] # status id matched
+      id = matches[2]
+      url = '/1.1/statuses/show/%s.json' % id
+    else # no status id, get the latest status of that user
+      user = matches[1]
+      url = '/1.1/statuses/user_timeline.json?screen_name=%s&count=1&include_rts=true' % user
+    end
+    response = @app_access_token.get(url).body
     begin
       tweet = JSON.parse(response)
+      tweet = tweet.first if tweet.instance_of? Array
       status = {
         :date => (Time.parse(tweet["created_at"]) rescue "<unknown>"),
         :id => (tweet["id_str"] rescue "<unknown>"),