grailbird_updater 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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