tweetlr 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +2 -2
- data/bin/tweetlr +13 -10
- data/lib/tweetlr.rb +35 -21
- metadata +3 -3
data/Rakefile
CHANGED
@@ -7,7 +7,7 @@ require 'rake/testtask'
|
|
7
7
|
|
8
8
|
spec = Gem::Specification.new do |s|
|
9
9
|
s.name = 'tweetlr'
|
10
|
-
s.version = '0.0.
|
10
|
+
s.version = '0.0.7'
|
11
11
|
s.has_rdoc = true
|
12
12
|
s.extra_rdoc_files = ['README.md', 'LICENSE']
|
13
13
|
s.summary = %{tweetlr crawls twitter for a given term, extracts photos out of the collected tweets' short urls and posts the images to tumblr.}
|
@@ -20,7 +20,7 @@ spec = Gem::Specification.new do |s|
|
|
20
20
|
s.executables = ['tweetlr']
|
21
21
|
s.add_dependency('daemons')
|
22
22
|
s.add_dependency('eventmachine')
|
23
|
-
s.add_dependency('
|
23
|
+
s.add_dependency('curb')
|
24
24
|
end
|
25
25
|
|
26
26
|
Rake::GemPackageTask.new(spec) do |p|
|
data/bin/tweetlr
CHANGED
@@ -21,27 +21,30 @@ rescue SystemCallError
|
|
21
21
|
exit(1)
|
22
22
|
end
|
23
23
|
|
24
|
-
Daemons.run_proc('tweetlr') do
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
Daemons.run_proc('tweetlr', :dir_mode => :script, :dir => './', :backtrace => true, :log_output => true) do
|
25
|
+
#@log = Logger.new(@log_file)
|
26
|
+
puts('starting tweetlr daemon...')
|
27
|
+
puts "creating a new tweetlr instance using this config: #{CONFIG.inspect}"
|
28
28
|
EventMachine::run {
|
29
29
|
EventMachine::add_periodic_timer( UPDATE_PERIOD ) {
|
30
|
-
|
30
|
+
puts 'starting tweetlr crawl...'
|
31
31
|
response = @tweetlr.lazy_search_twitter
|
32
|
-
tweets = response
|
32
|
+
tweets = response['results']
|
33
33
|
if tweets
|
34
34
|
tweets.each do |tweet|
|
35
35
|
tumblr_post = @tweetlr.generate_tumblr_photo_post tweet
|
36
36
|
if tumblr_post.nil? || tumblr_post[:source].nil?
|
37
|
-
|
37
|
+
puts "could not get image source: tweet: #{tweet} --- tumblr post: #{tumblr_post.inspect}"
|
38
38
|
else
|
39
|
-
|
40
|
-
|
39
|
+
#@log.debug tumblr_post
|
40
|
+
#@log.debug @tweetlr.post_to_tumblr tumblr_post
|
41
|
+
#puts "tumblr post: #{tumblr_post}"
|
42
|
+
res = @tweetlr.post_to_tumblr tumblr_post
|
43
|
+
#puts "tumblr response: #{res.header_str} #{res.body_str}"
|
41
44
|
end
|
42
45
|
end
|
43
46
|
end
|
44
|
-
|
47
|
+
puts('finished tweetlr crawl.')
|
45
48
|
}
|
46
49
|
}
|
47
50
|
|
data/lib/tweetlr.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
require 'httparty'
|
2
1
|
require 'logger'
|
3
2
|
require 'yaml'
|
4
3
|
require 'curb'
|
4
|
+
require 'json'
|
5
5
|
|
6
6
|
|
7
7
|
class Tweetlr
|
@@ -27,7 +27,7 @@ class Tweetlr
|
|
27
27
|
@term = term
|
28
28
|
@refresh_url = "#{@api_endpoint_twitter}?q=#{term}&since_id=#{since_id}" if (since_id && term)
|
29
29
|
if !cookie
|
30
|
-
response =
|
30
|
+
response = Curl::Easy.http_post(
|
31
31
|
"#{@api_endpoint_tumblr}/login",
|
32
32
|
:body => {
|
33
33
|
:email => @email,
|
@@ -45,32 +45,37 @@ class Tweetlr
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def post_to_tumblr(options={})
|
48
|
-
options[:
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
48
|
+
if options[:type] && options[:date] && options[:source] && options[:caption] && options[:state]
|
49
|
+
response = Curl::Easy.http_post("#{@api_endpoint_tumblr}/api/write",
|
50
|
+
Curl::PostField.content('generator', GENERATOR),
|
51
|
+
Curl::PostField.content('email', @email),
|
52
|
+
Curl::PostField.content('password', @password),
|
53
|
+
Curl::PostField.content('type', options[:type]),
|
54
|
+
Curl::PostField.content('date', options[:date]),
|
55
|
+
Curl::PostField.content('source', options[:source]),
|
56
|
+
Curl::PostField.content('caption', options[:caption]),
|
57
|
+
Curl::PostField.content('state', options[:state])
|
58
|
+
)
|
59
|
+
end
|
57
60
|
response
|
58
61
|
end
|
59
62
|
|
60
63
|
#fire a new search
|
61
64
|
def search_twitter()
|
62
65
|
search_call = "#{@api_endpoint_twitter}?q=#{@search_term}&result_type=#{@result_type}&rpp=#{@results_per_page}"
|
63
|
-
@response =
|
66
|
+
@response = http_get search_call
|
64
67
|
end
|
65
68
|
# lazy update - search for a term or refresh the search if a response is available already
|
66
69
|
def lazy_search_twitter()
|
67
70
|
@refresh_url = "#{@api_endpoint_twitter}#{@response['refresh_url']}" unless (@response.nil? || @response['refresh_url'].nil? || @response['refresh_url'].empty?)
|
68
71
|
if @refresh_url
|
69
72
|
#FIXME persist the refresh url - server restart would be a pain elsewise
|
70
|
-
|
71
|
-
@
|
73
|
+
#@log.info "lazy search using '#{@refresh_url}'"
|
74
|
+
puts "lazy search using '#{@refresh_url}'" #workaround to get refresh url logged w/ the Daemons gem
|
75
|
+
@response = http_get @refresh_url
|
72
76
|
else
|
73
|
-
|
77
|
+
#@log.debug "regular search using '#{term}'"
|
78
|
+
puts "regular search using '#{term}'"
|
74
79
|
@response = search_twitter()
|
75
80
|
end
|
76
81
|
end
|
@@ -92,15 +97,15 @@ class Tweetlr
|
|
92
97
|
#find the image's url for an instagram link
|
93
98
|
def image_url_instagram(link_url)
|
94
99
|
link_url['instagram.com'] = 'instagr.am' if link_url.index 'instagram.com' #instagram's oembed does not work for .com links
|
95
|
-
response =
|
96
|
-
response
|
100
|
+
response = http_get "http://api.instagram.com/oembed?url=#{link_url}"
|
101
|
+
response['url']
|
97
102
|
end
|
98
103
|
|
99
104
|
#find the image's url for a picplz short/longlink
|
100
105
|
def image_url_picplz(link_url)
|
101
106
|
id = extract_id link_url
|
102
107
|
#try short url
|
103
|
-
response =
|
108
|
+
response = http_get "http://picplz.com/api/v2/pic.json?shorturl_ids=#{id}"
|
104
109
|
#if short url fails, try long url
|
105
110
|
#response = HTTParty.get "http://picplz.com/api/v2/pic.json?longurl_ids=#{id}"
|
106
111
|
#extract url
|
@@ -112,8 +117,8 @@ class Tweetlr
|
|
112
117
|
end
|
113
118
|
#find the image'S url for a yfrog link
|
114
119
|
def image_url_yfrog(link_url)
|
115
|
-
response =
|
116
|
-
response
|
120
|
+
response = http_get("http://www.yfrog.com/api/oembed?url=#{link_url}")
|
121
|
+
response['url']
|
117
122
|
end
|
118
123
|
#find the image's url for a img.ly link
|
119
124
|
def image_url_imgly(link_url)
|
@@ -153,7 +158,8 @@ class Tweetlr
|
|
153
158
|
tumblr_post = nil
|
154
159
|
message = tweet['text']
|
155
160
|
if message && !message.index('RT @') #discard retweets
|
156
|
-
|
161
|
+
#@log.debug "tweet: #{tweet}"
|
162
|
+
#puts "tweet: #{tweet}"
|
157
163
|
tumblr_post = {}
|
158
164
|
tumblr_post[:type] = 'photo'
|
159
165
|
tumblr_post[:date] = tweet['created_at']
|
@@ -170,6 +176,14 @@ class Tweetlr
|
|
170
176
|
tumblr_post
|
171
177
|
end
|
172
178
|
|
179
|
+
private
|
180
|
+
|
181
|
+
#convenience method for curl http get calls
|
182
|
+
def http_get(request)
|
183
|
+
res = Curl::Easy.http_get(request)
|
184
|
+
JSON.parse res.body_str
|
185
|
+
end
|
186
|
+
|
173
187
|
end
|
174
188
|
|
175
189
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: tweetlr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.7
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Sven Kraeuter
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-05-
|
13
|
+
date: 2011-05-13 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: daemons
|
@@ -35,7 +35,7 @@ dependencies:
|
|
35
35
|
type: :runtime
|
36
36
|
version_requirements: *id002
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
|
-
name:
|
38
|
+
name: curb
|
39
39
|
prerelease: false
|
40
40
|
requirement: &id003 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|