twitter2jabber 0.8.0 → 0.8.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d434391b12803f08dec2790028dccd36ec5db99c
4
- data.tar.gz: 7ab9bac4e82d981f0281f16990ef2fc7ea6d52fb
3
+ metadata.gz: 22d1efa034a7df52c0417d0122d5a6cfc86ac732
4
+ data.tar.gz: 679a722cd4e6384fb5fbd1e52a9ea78d689b867f
5
5
  SHA512:
6
- metadata.gz: f6909849d8bd8705a47aeb84c940841344e4a41f852d349108e0c8c7edd9ae44b78179ec6ccea5cfdbbe9f37f93dd252bcf34cbd549dab9efe42587b31daf1f2
7
- data.tar.gz: ed809ca1fce70a4479d196232d506e4585dd77197e66f6b27b781177ccd6be0abba952c4ecee7b11facf8727a75ed0c719af8070ccbe77711ed19520555227f5
6
+ metadata.gz: 34e9362d7eefa5aeb5fff91f850d0cb08df52e85f3f5855edbd954b00c6fa8b6863d27e6912056d13d711650c1405be210a81f02206956652d889944a05b079d
7
+ data.tar.gz: 85a22de2e19cb87a963b2479da076ca59dda43d3d735e9aeceb8520e607c776d0ee8803939ed989d50096bf60444f6ecc31f400b8b09ad2d9f60a36b79264539
data/ChangeLog CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  = Revision history for twitter2jabber
4
4
 
5
+ == 0.8.1 [2014-04-25]
6
+
7
+ * Exhaust the Twitter stream by buffering all tweets received since the last
8
+ time, or one batch when run for the first time.
9
+ * Relies on the order in Twitter::REST::Client#home_timeline (descending by
10
+ ID).
11
+ * Disconnects Twitter and Jabber clients when finished.
12
+
5
13
  == 0.8.0 [2014-04-15]
6
14
 
7
15
  * Dropped "write" functionality. Only forwards Twitter messages to Jabber.
data/README CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  == VERSION
4
4
 
5
- This documentation refers to twitter2jabber version 0.8.0
5
+ This documentation refers to twitter2jabber version 0.8.1
6
6
 
7
7
 
8
8
  == DESCRIPTION
data/TODO CHANGED
@@ -1,6 +1,4 @@
1
1
  - include_entities=true (http://dev.twitter.com/pages/tweet_entities)
2
2
  - include_rts=true (?)
3
- - use streaming API? (http://apiwiki.twitter.com/Streaming-API-Documentation)
4
- - persistent cache? (friends_timeline: since/since_id?)
5
3
  - SPECS!!!
6
4
  - DOCS!!
@@ -68,6 +68,11 @@ class Twitter2Jabber
68
68
  raise "Can't connect to Jabber with JID '#{spec}': #{err}"
69
69
  end
70
70
 
71
+ def disconnect
72
+ close if @client
73
+ log 'disconnected'
74
+ end
75
+
71
76
  def format(tweet)
72
77
  user = tweet.user
73
78
  text = @erb.result(binding)
@@ -113,14 +118,18 @@ class Twitter2Jabber
113
118
  rescue Errno::EPIPE, IOError
114
119
  raise if attempts > 3
115
120
 
121
+ close
122
+ sleep 1
123
+ retry
124
+ end
125
+
126
+ def close
116
127
  begin
117
128
  @client.close
118
129
  rescue Errno::EPIPE, IOError
119
130
  end
120
131
 
121
132
  @client = nil
122
- sleep 1
123
- retry
124
133
  end
125
134
 
126
135
  def log(msg)
@@ -31,6 +31,8 @@ class Twitter2Jabber
31
31
 
32
32
  class TwitterClient
33
33
 
34
+ BATCH_SIZE = Twitter::REST::Timelines::MAX_TWEETS_PER_REQUEST
35
+
34
36
  def initialize(gw, config)
35
37
  @gw, @config, @client = gw, config, Twitter::REST::Client.new(
36
38
  consumer_key: @spec = config[:consumer_token],
@@ -49,11 +51,13 @@ class Twitter2Jabber
49
51
  raise "Can't connect to Twitter with ID '#{spec}': #{err}"
50
52
  end
51
53
 
52
- def tweets(since_id = nil)
53
- tweets = client.home_timeline(since_id: since_id)
54
- return unless tweets.is_a?(Array)
54
+ def disconnect
55
+ @client = nil
56
+ log 'disconnected'
57
+ end
55
58
 
56
- tweets.sort_by { |tweet| tweet.created_at }.each { |tweet|
59
+ def tweets(since_id = nil)
60
+ get_tweets(since_id).reverse_each { |tweet|
57
61
  log since_id = tweet.id
58
62
  yield tweet
59
63
  sleep 1
@@ -80,6 +84,20 @@ class Twitter2Jabber
80
84
 
81
85
  private
82
86
 
87
+ def get_tweets(since_id = nil)
88
+ options, buffer = { count: BATCH_SIZE }, []
89
+ options[:since_id] = since_id if since_id
90
+
91
+ loop {
92
+ buffer.concat(batch = client.home_timeline(options))
93
+
94
+ break if batch.empty? || !since_id ||
95
+ since_id >= options[:max_id] = batch.last.id - 1
96
+ }
97
+
98
+ buffer
99
+ end
100
+
83
101
  def log(msg)
84
102
  @gw.log("TWITTER #{msg}")
85
103
  end
@@ -4,7 +4,7 @@ class Twitter2Jabber
4
4
 
5
5
  MAJOR = 0
6
6
  MINOR = 8
7
- TINY = 0
7
+ TINY = 1
8
8
 
9
9
  class << self
10
10
 
@@ -29,7 +29,7 @@ class Twitter2Jabber
29
29
  class << self
30
30
 
31
31
  def run(options, since_id = nil)
32
- new(options).connect.deliver_tweets(since_id)
32
+ new(options).connect.deliver_tweets(since_id).disconnect
33
33
  end
34
34
 
35
35
  def client(client)
@@ -54,6 +54,8 @@ class Twitter2Jabber
54
54
  end
55
55
  end
56
56
 
57
+ attr_reader :twitter, :jabber, :debug
58
+
57
59
  def connect
58
60
  log 'Connecting...'
59
61
 
@@ -63,10 +65,18 @@ class Twitter2Jabber
63
65
  self
64
66
  end
65
67
 
66
- attr_reader :twitter, :jabber, :debug
68
+ def disconnect
69
+ log 'Disconnecting...'
70
+
71
+ twitter.disconnect
72
+ jabber.disconnect
73
+
74
+ self
75
+ end
67
76
 
68
77
  def deliver_tweets(since_id = nil)
69
78
  twitter.tweets(since_id) { |tweet| jabber.deliver(tweet) }
79
+ self
70
80
  end
71
81
 
72
82
  def log(msg)
@@ -84,5 +94,5 @@ class Twitter2Jabber
84
94
  end
85
95
 
86
96
  require_relative 'twitter2jabber/version'
87
- require_relative 'twitter2jabber/twitter'
88
- require_relative 'twitter2jabber/jabber'
97
+ require_relative 'twitter2jabber/twitter_client'
98
+ require_relative 'twitter2jabber/jabber_client'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitter2jabber
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jens Wille
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-15 00:00:00.000000000 Z
11
+ date: 2014-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cyclops
@@ -115,8 +115,8 @@ files:
115
115
  - example/templates/tweet.txt
116
116
  - lib/twitter2jabber.rb
117
117
  - lib/twitter2jabber/cli.rb
118
- - lib/twitter2jabber/jabber.rb
119
- - lib/twitter2jabber/twitter.rb
118
+ - lib/twitter2jabber/jabber_client.rb
119
+ - lib/twitter2jabber/twitter_client.rb
120
120
  - lib/twitter2jabber/version.rb
121
121
  homepage: http://github.com/blackwinter/twitter2jabber
122
122
  licenses:
@@ -124,16 +124,17 @@ licenses:
124
124
  metadata: {}
125
125
  post_install_message: |2+
126
126
 
127
- twitter2jabber-0.8.0 [2014-04-15]:
127
+ twitter2jabber-0.8.1 [2014-04-25]:
128
128
 
129
- * Dropped "write" functionality. Only forwards Twitter messages to Jabber.
130
- * Dropped Ruby 1.8 support.
131
- * Reduced external dependencies.
132
- * Cut down command line options.
129
+ * Exhaust the Twitter stream by buffering all tweets received since the last
130
+ time, or one batch when run for the first time.
131
+ * Relies on the order in Twitter::REST::Client#home_timeline (descending by
132
+ ID).
133
+ * Disconnects Twitter and Jabber clients when finished.
133
134
 
134
135
  rdoc_options:
135
136
  - "--title"
136
- - twitter2jabber Application documentation (v0.8.0)
137
+ - twitter2jabber Application documentation (v0.8.1)
137
138
  - "--charset"
138
139
  - UTF-8
139
140
  - "--line-numbers"
@@ -154,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
154
155
  version: '0'
155
156
  requirements: []
156
157
  rubyforge_project:
157
- rubygems_version: 2.2.2
158
+ rubygems_version: 2.2.2.x
158
159
  signing_key:
159
160
  specification_version: 4
160
161
  summary: Twitter-to-Jabber gateway.