grailbird_updater 0.3.0 → 0.4.0

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.
@@ -20,7 +20,6 @@ Usage: updater [options] [path to archive]
20
20
  EOS
21
21
  opt :verbose, "Verbose mode"
22
22
  opt :prune, "Prune all but necessary user data from tweets", :default => true
23
- opt :limit, "How many tweets to look back at (max: 3200)", :default => 1000
24
23
  opt :directory, "Twitter archive directory", :type => :string
25
24
  end
26
25
 
@@ -29,6 +28,5 @@ dir ||= opts[:directory]
29
28
  dir ||= ARGV.first
30
29
  dir ||= "."
31
30
  raise ArgumentError, "Must specify a directory" unless File.directory?(dir)
32
- raise ArgumentError, "Cannot look back further than 3200 tweets" if opts[:limit] > 3200
33
31
 
34
- GrailbirdUpdater.new(dir, opts[:limit], opts[:verbose], opts[:prune]).update_tweets
32
+ GrailbirdUpdater.new(dir, opts[:verbose], opts[:prune]).update_tweets
@@ -1,3 +1,3 @@
1
1
  class GrailbirdUpdater
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -3,6 +3,7 @@ require "grailbird_updater/version"
3
3
  class GrailbirdUpdater
4
4
 
5
5
  KEEP_FIELDS = {'user' => ['name', 'screen_name', 'protected', 'id_str', 'profile_image_url_https', 'id', 'verified']}
6
+ MAX_REQUEST_SIZE = 200
6
7
 
7
8
  class JsFile
8
9
  # Read UTF-8 file and return hash of contents (files being read contain JS arrays)
@@ -34,15 +35,15 @@ class GrailbirdUpdater
34
35
  end
35
36
  end
36
37
 
37
- def initialize(dir, count, verbose, prune)
38
+ def initialize(dir, verbose, prune)
38
39
  @base_dir = dir
39
40
  data_path = dir + "/data"
40
41
  @js_path = data_path + "/js"
41
42
  @csv_path = data_path + "/csv"
42
43
 
43
- @count = count
44
44
  @verbose = verbose
45
45
  @prune = prune
46
+ @access_token = nil
46
47
  end
47
48
 
48
49
  def update_tweets
@@ -66,7 +67,7 @@ class GrailbirdUpdater
66
67
 
67
68
  vputs "Last tweet in archive is\n\t" + display_tweet(last_tweet)
68
69
 
69
- tweets = JSON.parse(get_twitter_user_timeline_response(screen_name, user_id, last_tweet_id, @count))
70
+ tweets = get_twitter_user_timeline_response(screen_name, user_id, last_tweet_id)
70
71
 
71
72
  vputs "There have been #{tweets.length} tweets since the archive" + (archive_details.has_key?('updated_at') ? " was last updated on #{archive_details['updated_at']}" : " was created")
72
73
 
@@ -105,31 +106,58 @@ class GrailbirdUpdater
105
106
  GrailbirdUpdater::JsFile.write_with_heading(archive_details, "#{@js_path}/payload_details.js", "var payload_details")
106
107
  end
107
108
 
108
- def get_twitter_user_timeline_response(screen_name, user_id, last_tweet_id, count)
109
+ def get_twitter_user_timeline_response(screen_name, user_id, last_tweet_id)
109
110
  twitter_url = "http://api.twitter.com/1/statuses/user_timeline.json"
110
111
  twitter_uri = URI(twitter_url)
112
+
111
113
  params = {
112
- :count => count,
114
+ :count => MAX_REQUEST_SIZE,
113
115
  :user_id => user_id,
114
116
  :since_id => last_tweet_id,
115
117
  :include_rts => true,
116
118
  :include_entities => true}
117
119
  twitter_uri.query = URI.encode_www_form(params)
118
120
 
121
+ response = make_twitter_request(twitter_uri, screen_name)
122
+
123
+ response_tweets = JSON.parse(response.body)
124
+
125
+ total_tweets = Array.new
126
+
127
+ while response_tweets.length > 0
128
+ total_tweets += response_tweets
129
+ last_tweet_returned = response_tweets.last
130
+ params[:max_id] = last_tweet_returned['id'] - 1 # this way the response doesn't include the last tweet from the previous one
131
+ twitter_uri.query = URI.encode_www_form(params)
132
+
133
+ response = make_twitter_request(twitter_uri, screen_name)
134
+ response_tweets = JSON.parse(response.body)
135
+ end
136
+
137
+ return total_tweets
138
+ end
139
+
140
+ def make_twitter_request(twitter_uri, screen_name)
119
141
  vputs "\nMaking request to #{twitter_uri}\n"
120
- response = Net::HTTP.get_response(twitter_uri)
121
142
 
122
- if response.is_a?(Net::HTTPUnauthorized)
123
- access_token = do_oauth_dance(screen_name)
124
- response = access_token.request(:get, twitter_uri.to_s)
143
+ if !@access_token.nil?
144
+ response = @access_token.request(:get, twitter_uri.to_s)
145
+ else
146
+ response = Net::HTTP.get_response(twitter_uri)
147
+
125
148
  if response.is_a?(Net::HTTPUnauthorized)
126
- puts "\nSomething went wrong trying to authorize grailbird_updater with the account: " + "@#{screen_name}".blue
127
- puts "Please delete #{@base_dir}/#{screen_name}_keys.yaml and follow the authorize steps again."
128
- exit
149
+ @access_token = do_oauth_dance(screen_name)
150
+ response = @access_token.request(:get, twitter_uri.to_s)
129
151
  end
130
152
  end
131
153
 
132
- return response.body
154
+ if response.is_a?(Net::HTTPUnauthorized)
155
+ puts "\nSomething went wrong trying to authorize grailbird_updater with the account: " + "@#{screen_name}".blue
156
+ puts "Please delete #{@base_dir}/#{screen_name}_keys.yaml and follow the authorize steps again."
157
+ exit
158
+ end
159
+
160
+ return response
133
161
  end
134
162
 
135
163
  def do_oauth_dance(screen_name)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grailbird_updater
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-27 00:00:00.000000000 Z
12
+ date: 2013-01-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: oauth