bhauman-twroute 0.1.10 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +39 -4
- data/VERSION +1 -1
- data/bin/twroute_runner +8 -1
- data/lib/twroute/polling_search.rb +13 -15
- data/test/polling_search_test.rb +1 -8
- data/twroute.gemspec +2 -2
- metadata +2 -2
data/README.rdoc
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
= Twroute - Route Twitter status updates over http to your web app
|
|
2
2
|
|
|
3
3
|
Twroute uses the {Twitter Stream API}[http://apiwiki.twitter.com/Streaming-API-Documentation]
|
|
4
|
+
or the more stable {Twitter Search API}[http://apiwiki.twitter.com/Twitter-Search-API-Method%3A-search]
|
|
4
5
|
to watch status updates and convert them to HTTP post requests.
|
|
5
6
|
|
|
6
7
|
Twoute uses {Delayed Job}[http://github.com/tobi/delayed_job/tree/master]
|
|
@@ -65,8 +66,10 @@ at +tweetrecorder+.+com+, the config would look like:
|
|
|
65
66
|
==== Twitter section
|
|
66
67
|
|
|
67
68
|
This is where you specify the username and password for the twitter
|
|
68
|
-
account that is
|
|
69
|
-
to the senders.
|
|
69
|
+
account that is making the requests to the Twitter Stream or Rest Search
|
|
70
|
+
API and also authoring the replies to the senders.
|
|
71
|
+
|
|
72
|
+
===== Twitter Stream Api Configuration
|
|
70
73
|
|
|
71
74
|
This section also specifies which Twitter stream api to use. Most
|
|
72
75
|
likely +spritzer+, +follow+ or +track+ unless you are privileged.
|
|
@@ -86,6 +89,25 @@ tweets that have the word +shoot+ in them.
|
|
|
86
89
|
stream_api_args:
|
|
87
90
|
track: shoot
|
|
88
91
|
|
|
92
|
+
===== Twitter Search API Configuration
|
|
93
|
+
|
|
94
|
+
See the {Twitter Search API}[http://apiwiki.twitter.com/Twitter-Search-API-Method%3A-search]
|
|
95
|
+
for more information.
|
|
96
|
+
|
|
97
|
+
This section the post query parameters that you want to
|
|
98
|
+
send to the Twitter +search+ api call.
|
|
99
|
+
|
|
100
|
+
The following is an example configuration if you want to see all the
|
|
101
|
+
tweets that have the word +shoot+ in them.
|
|
102
|
+
|
|
103
|
+
twitter:
|
|
104
|
+
user: example_account_name
|
|
105
|
+
password: example_password
|
|
106
|
+
search_params:
|
|
107
|
+
q: 'shoot' # search for updates with the text 'shoot'
|
|
108
|
+
rpp: '99' # return 99 results on one page : limit is 100
|
|
109
|
+
|
|
110
|
+
|
|
89
111
|
==== Database section
|
|
90
112
|
|
|
91
113
|
This section should be ready to go as is. If you want to use MySQL
|
|
@@ -264,6 +286,7 @@ the routes are ignored.
|
|
|
264
286
|
When a route is finally selected and a path is chosen three hashes get
|
|
265
287
|
posted to the selected url:
|
|
266
288
|
|
|
289
|
+
|
|
267
290
|
==== The Parsed Hash
|
|
268
291
|
|
|
269
292
|
In our example this will be:
|
|
@@ -272,7 +295,19 @@ In our example this will be:
|
|
|
272
295
|
parsed[who_got_shot]: johnny
|
|
273
296
|
parsed[shot_where]: wild
|
|
274
297
|
|
|
275
|
-
==== The Twitter Tweet Hash
|
|
298
|
+
==== The Twitter Tweet Hash - for Search API
|
|
299
|
+
|
|
300
|
+
tweet[id]: 3317086732
|
|
301
|
+
tweet[source]: web
|
|
302
|
+
tweet[profile_image_url]: http://s.twimg.com/a/1252620925/images/default_profile_normal.png
|
|
303
|
+
tweet[to_user_id]:
|
|
304
|
+
tweet[from_user]: dailydid_dev
|
|
305
|
+
tweet[iso_language_code]: en
|
|
306
|
+
tweet[text]: #test 123 #dailydid
|
|
307
|
+
tweet[from_user_id]: 50354397
|
|
308
|
+
tweet[created_at]: Fri, 04 Sep 2009 17:03:56 +0000
|
|
309
|
+
|
|
310
|
+
==== The Twitter Tweet Hash - for Stream API
|
|
276
311
|
|
|
277
312
|
For example:
|
|
278
313
|
|
|
@@ -286,7 +321,7 @@ For example:
|
|
|
286
321
|
tweet[in_reply_to_status_id]:
|
|
287
322
|
tweet[text]: shoot @johnny in the wild
|
|
288
323
|
|
|
289
|
-
==== The Twitter User Hash
|
|
324
|
+
==== The Twitter User Hash - for Stream API only
|
|
290
325
|
|
|
291
326
|
We pull this out of the tweet[:user] and post it as the sender[] hash:
|
|
292
327
|
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.1.
|
|
1
|
+
0.1.13
|
data/bin/twroute_runner
CHANGED
|
@@ -8,7 +8,14 @@ Daemons.run_proc('twroute_runner.rb', :dir_mode => :normal, :dir => 'log') do
|
|
|
8
8
|
ActiveRecord::Base.logger = Logger.new(File.open(File.join(::Twroute::Application.root_dir, 'log/database.log'), 'a'))
|
|
9
9
|
Twroute::Application.logger = Logger.new(File.open(File.join(::Twroute::Application.root_dir, 'log/twroute.log'), 'a'))
|
|
10
10
|
loop do
|
|
11
|
-
|
|
11
|
+
begin
|
|
12
|
+
Twroute::Application.run
|
|
13
|
+
rescue => e
|
|
14
|
+
puts e.to_s
|
|
15
|
+
Twroute::Application.logger.info e.to_s
|
|
16
|
+
Twroute::Application.logger.info "Application Error sleeping 30 seconds before restart"
|
|
17
|
+
sleep 30
|
|
18
|
+
end
|
|
12
19
|
end
|
|
13
20
|
end
|
|
14
21
|
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
require 'yajl'
|
|
2
|
-
require 'yajl/http_stream'
|
|
3
1
|
require 'observer'
|
|
4
2
|
require 'uri'
|
|
3
|
+
require 'grackle'
|
|
5
4
|
|
|
6
5
|
module Twroute
|
|
7
6
|
class PollingSearch
|
|
@@ -12,21 +11,21 @@ module Twroute
|
|
|
12
11
|
@user = user
|
|
13
12
|
@password = password
|
|
14
13
|
@post_arg_hash = post_arg_hash
|
|
14
|
+
@grackle_client = Grackle::Client.new(:auth=>{:type=>:basic,:username=>@user,:password=>@password})
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
def
|
|
18
|
-
|
|
17
|
+
def query_hash
|
|
18
|
+
@post_arg_hash['since_id'] = @since_id if @since_id
|
|
19
|
+
@post_arg_hash
|
|
19
20
|
end
|
|
20
21
|
|
|
21
|
-
def
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
end.sort_by { |x| x }.join('&')
|
|
22
|
+
def grack_to_hash(grack)
|
|
23
|
+
res = grack.marshal_dump
|
|
24
|
+
res[:id] = grack.id
|
|
25
|
+
res
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def start
|
|
29
|
-
puts twitter_search_uri.to_s
|
|
30
29
|
loop do
|
|
31
30
|
send_query
|
|
32
31
|
sleep 30
|
|
@@ -34,15 +33,14 @@ module Twroute
|
|
|
34
33
|
end
|
|
35
34
|
|
|
36
35
|
def send_query
|
|
37
|
-
results =
|
|
38
|
-
|
|
39
|
-
results = results[:results] || []
|
|
36
|
+
results = @grackle_client[:search].search? query_hash
|
|
37
|
+
results = results.results || []
|
|
40
38
|
results.reverse!
|
|
41
39
|
return if results.empty?
|
|
42
|
-
@since_id = results.last
|
|
40
|
+
@since_id = results.last.id
|
|
43
41
|
results.each do |tweet|
|
|
44
42
|
changed
|
|
45
|
-
notify_observers( tweet )
|
|
43
|
+
notify_observers( grack_to_hash tweet )
|
|
46
44
|
end
|
|
47
45
|
end
|
|
48
46
|
|
data/test/polling_search_test.rb
CHANGED
|
@@ -29,13 +29,6 @@ class PollingSearchTest < Test::Unit::TestCase
|
|
|
29
29
|
{ :q => 'twitter', :rpp => 20 })
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
should "be able to create query string" do
|
|
33
|
-
@tweeter.query_string.should == 'q=twitter&rpp=20'
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
should "be able to create a twitter search url" do
|
|
37
|
-
@tweeter.twitter_search_uri.to_s.should == 'http://bhauman:watertank@search.twitter.com/search.json?q=twitter&rpp=20'
|
|
38
|
-
end
|
|
39
32
|
|
|
40
33
|
should "be able to send query and get results" do
|
|
41
34
|
@listen = TestObserver.new
|
|
@@ -46,7 +39,7 @@ class PollingSearchTest < Test::Unit::TestCase
|
|
|
46
39
|
|
|
47
40
|
@tweeter.since_id.should_not be_nil
|
|
48
41
|
@tweeter.since_id.should == @listen.results.last[:id]
|
|
49
|
-
@
|
|
42
|
+
@listen.results.first[:id].should_not be_nil
|
|
50
43
|
|
|
51
44
|
@listen.results.first[:id].should <= @listen.results.last[:id]
|
|
52
45
|
|
data/twroute.gemspec
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = %q{twroute}
|
|
5
|
-
s.version = "0.1.
|
|
5
|
+
s.version = "0.1.13"
|
|
6
6
|
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
8
8
|
s.authors = ["bhauman"]
|
|
9
|
-
s.date = %q{2009-09-
|
|
9
|
+
s.date = %q{2009-09-16}
|
|
10
10
|
s.description = %q{Twroute listens for Twitter updates and redirects them to HTTP post requests}
|
|
11
11
|
s.email = %q{bhauman@gmail.com}
|
|
12
12
|
s.executables = ["twroute", "twroute_runner", "twroute_worker"]
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bhauman-twroute
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.13
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- bhauman
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
11
|
|
|
12
|
-
date: 2009-09-
|
|
12
|
+
date: 2009-09-16 00:00:00 -07:00
|
|
13
13
|
default_executable:
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|