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.
- data/bin/grailbird_updater +1 -3
- data/lib/grailbird_updater/version.rb +1 -1
- data/lib/grailbird_updater.rb +41 -13
- metadata +2 -2
data/bin/grailbird_updater
CHANGED
@@ -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[:
|
32
|
+
GrailbirdUpdater.new(dir, opts[:verbose], opts[:prune]).update_tweets
|
data/lib/grailbird_updater.rb
CHANGED
@@ -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,
|
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 =
|
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
|
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 =>
|
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
|
123
|
-
|
124
|
-
|
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
|
-
|
127
|
-
|
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
|
-
|
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.
|
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:
|
12
|
+
date: 2013-01-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: oauth
|