· 7 years ago · Dec 10, 2017, 08:54 PM
1#!/usr/bin/env ruby
2
3require "yaml"
4require "twitter"
5require 'ruby-growl'
6
7if $0 == __FILE__
8 g = Growl::GNTP.new( "localhost", "ruby-growl" )
9 if g.notifications.empty?
10 g.add_notification( "notification" )
11 g.register
12 end
13
14 q = ARGV[0] || "#klis_stat"
15 STDERR.puts "Query: #{ q }"
16 config_file = "twitter.yml"
17 config = YAML.load( open( config_file ) )["test"]
18 username = config["login"]
19 client = Twitter::REST::Client.new do |c|
20 c.consumer_key = config[ "oauth_consumer_token" ]
21 c.consumer_secret = config[ "oauth_consumer_secret" ]
22 c.access_token = config[ "oauth_token" ]
23 c.access_token_secret = config[ "oauth_token_secret" ]
24 end
25 since_id = nil
26 while true
27 results = begin
28 client.search( q, since_id: since_id, count: 10, exclude: "retweets" )
29 rescue Twitter::Error, Twitter::Error::RequestTimeout
30 STDERR.puts "#{ $!.class }: #{ $!.message }"
31 STDERR.puts "skip... (#{ Time.now })"
32 sleep 60
33 next
34 end
35 since_id = results.attrs[:search_metadata][:max_id] if not results.attrs[:statuses].empty?
36 results.take(20).each do |r|
37 g.notify( "notification", "Tweet from @#{r.user.screen_name} (#{ r.user.name })",
38 r.full_text, 0, false, nil, r.url )
39 puts r.created_at.strftime( "%Y-%m-%d %H:%M:%S" )
40 puts r.url
41 puts "From @#{r.user.screen_name} (#{ r.user.name }):"
42 puts r.full_text
43 end
44 puts
45 puts since_id
46 STDERR.puts "next... (#{ Time.now })"
47 sleep 6
48 end
49end