tweetlr 0.0.9 → 0.0.10

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.
Files changed (5) hide show
  1. data/README.md +5 -5
  2. data/Rakefile +1 -1
  3. data/bin/tweetlr +19 -15
  4. data/lib/tweetlr.rb +17 -10
  5. metadata +2 -2
data/README.md CHANGED
@@ -13,14 +13,14 @@ It's essential that you have a directory called `config` in the directory you ar
13
13
  ```yaml
14
14
  results_per_page: 100
15
15
  result_type: recent
16
- search_term: <the term you want to search for>
16
+ search_term: 'cat+dog+unicorn' #find tweets containing any of these terms
17
17
  twitter_timestamp: 61847783463854082 # the timestamp you want to start searching at
18
18
  api_endpoint_twitter: 'http://search.twitter.com/search.json'
19
19
  api_endpoint_tumblr: 'http://www.tumblr.com'
20
- tumblr_username: <your tumblr username / e-mail address>
21
- tumblr_password: <your tumblr password>
20
+ tumblr_username: YOUR_TUMBLR_EMAIL
21
+ tumblr_password: YOUR_TUMBLR_PW
22
22
  update_period: 300 #check for updates every 300 secs = 5 minutes
23
- shouts: 'says' # will be concatenated after the username, before the message: @mr_x <shouts>: awesome things on a photo!
23
+ shouts: 'says' # will be concatenated after the username, before the message: @mr_x says: awesome things on a photo!
24
24
  whitelist: #twitter accounts in that list will have their tweets published immediately. post from others will be saved as drafts
25
25
  - whitey_mc_whitelist
26
26
  - sven_kr
@@ -32,7 +32,7 @@ Make sure you put the configuration file in it's proper place as mentioned above
32
32
 
33
33
  start/stop tweetlr using `tweetlr start`/`tweetlr stop`. Run `tweetlr` without arguments for a list of options concerning the daemon's options.
34
34
 
35
- For further details on the configuration part, check out the [tweetlr_demo](http://github.com/5v3n/tweetlr_demo).
35
+ For a easy to modify working example, check out the [tweetlr_demo](http://github.com/5v3n/tweetlr_demo).
36
36
 
37
37
  Enjoy!
38
38
 
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.9'
10
+ s.version = '0.0.10'
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.}
data/bin/tweetlr CHANGED
@@ -23,28 +23,32 @@ end
23
23
 
24
24
  Daemons.run_proc('tweetlr', :dir_mode => :script, :dir => './', :backtrace => true, :log_output => true) do
25
25
  #@log = Logger.new(@log_file)
26
- puts('starting tweetlr daemon...')
26
+ puts "#{Time.now} - starting tweetlr daemon..."
27
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
- puts 'starting tweetlr crawl...'
30
+ puts "#{Time.now} - starting tweetlr crawl..."
31
31
  response = @tweetlr.lazy_search_twitter
32
- tweets = response['results']
33
- if tweets
34
- tweets.each do |tweet|
35
- tumblr_post = @tweetlr.generate_tumblr_photo_post tweet
36
- if tumblr_post.nil? || tumblr_post[:source].nil?
37
- puts "could not get image source: tweet: #{tweet} --- tumblr post: #{tumblr_post.inspect}"
38
- else
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}" unless res.response_code == 201
32
+ if response
33
+ tweets = response['results']
34
+ if tweets
35
+ tweets.each do |tweet|
36
+ tumblr_post = @tweetlr.generate_tumblr_photo_post tweet
37
+ if tumblr_post.nil? || tumblr_post[:source].nil?
38
+ puts "could not get image source: tweet: #{tweet} --- tumblr post: #{tumblr_post.inspect}"
39
+ else
40
+ #@log.debug tumblr_post
41
+ #@log.debug @tweetlr.post_to_tumblr tumblr_post
42
+ #puts "tumblr post: #{tumblr_post}"
43
+ res = @tweetlr.post_to_tumblr tumblr_post
44
+ puts "tumblr response: #{res.header_str} #{res.body_str}" unless res.response_code == 201
45
+ end
44
46
  end
45
47
  end
48
+ else
49
+ puts "#{Time.now} - twitter serach returned no response. Hail the whale!"
46
50
  end
47
- puts('finished tweetlr crawl.')
51
+ puts "#{Time.now} - finished tweetlr crawl."
48
52
  }
49
53
  }
50
54
 
data/lib/tweetlr.rb CHANGED
@@ -9,7 +9,7 @@ class Tweetlr
9
9
  LOCATION_START_INDICATOR = 'Location: '
10
10
  LOCATION_STOP_INDICATOR = "\r\n"
11
11
 
12
- def initialize(email, password, cookie=nil, since_id=nil, term=nil, config_file) #TODO use a hash or sth more elegant here...
12
+ def initialize(email, password, cookie=nil, since_id=nil, terms=nil, config_file) #TODO use a hash or sth more elegant here...
13
13
  @log = Logger.new(File.join( Dir.pwd, 'tweetlr.log'))
14
14
  config = YAML.load_file(config_file)
15
15
  @results_per_page = config['results_per_page']
@@ -19,12 +19,11 @@ class Tweetlr
19
19
  @whitelist = config['whitelist']
20
20
  @shouts = config['shouts']
21
21
  @since_id = since_id
22
- @search_term = term
22
+ @search_term = terms
23
23
  @whitelist.each {|entry| entry.downcase!}
24
24
  @email = email
25
25
  @password = password
26
- @term = term
27
- @refresh_url = "#{@api_endpoint_twitter}?q=#{term}&since_id=#{since_id}" if (since_id && term)
26
+ @refresh_url = "#{@api_endpoint_twitter}?ors=#{terms}&since_id=#{since_id}&rpp=#{@results_per_page}&result_type=#{@result_type}" if (since_id && terms)
28
27
  if !cookie
29
28
  response = Curl::Easy.http_post(
30
29
  "#{@api_endpoint_tumblr}/login",
@@ -63,7 +62,7 @@ class Tweetlr
63
62
  def generate_tumblr_photo_post tweet
64
63
  tumblr_post = nil
65
64
  message = tweet['text']
66
- if message && !message.index('RT @') #discard retweets
65
+ if !retweet? message
67
66
  #@log.debug "tweet: #{tweet}"
68
67
  #puts "tweet: #{tweet}"
69
68
  tumblr_post = {}
@@ -71,20 +70,27 @@ class Tweetlr
71
70
  tumblr_post[:date] = tweet['created_at']
72
71
  tumblr_post[:source] = extract_image_url tweet
73
72
  user = tweet['from_user']
73
+ tweet_id = tweet['id']
74
74
  if @whitelist.member? user.downcase
75
75
  state = 'published'
76
76
  else
77
77
  state = 'draft'
78
78
  end
79
79
  tumblr_post[:state] = state
80
- tumblr_post[:caption] = %?<a href="http://twitter.com/#{user}" alt="#{user}">@#{user}</a> #{@shouts}: #{tweet['text']}? #TODO make this a bigger matter of yml configuration
80
+ shouts = " #{@shouts}" if @shouts
81
+ tumblr_post[:caption] = %?<a href="http://twitter.com/#{user}/statuses/#{tweet_id}" alt="#{user}">@#{user}</a>#{shouts}: #{tweet['text']}? #TODO make this a bigger matter of yml configuration
81
82
  end
82
83
  tumblr_post
83
84
  end
85
+
86
+ #checks if the message is a retweet
87
+ def retweet?(message)
88
+ message.index('RT @') || message.index(%{ "@}) || message.index(" \u201c@") #detect retweets
89
+ end
84
90
 
85
91
  #fire a new search
86
92
  def search_twitter()
87
- search_call = "#{@api_endpoint_twitter}?q=#{@search_term}&result_type=#{@result_type}&rpp=#{@results_per_page}"
93
+ search_call = "#{@api_endpoint_twitter}?ors=#{@search_term}&result_type=#{@result_type}&rpp=#{@results_per_page}"
88
94
  @response = http_get search_call
89
95
  end
90
96
  # lazy update - search for a term or refresh the search if a response is available already
@@ -93,11 +99,12 @@ class Tweetlr
93
99
  if @refresh_url
94
100
  #FIXME persist the refresh url - server restart would be a pain elsewise
95
101
  #@log.info "lazy search using '#{@refresh_url}'"
96
- puts "lazy search using '#{@refresh_url}'" #workaround to get refresh url logged w/ the Daemons gem
97
- @response = http_get @refresh_url
102
+ search_url = "#{@refresh_url}&result_type=#{@result_type}&rpp=#{@results_per_page}"
103
+ puts "lazy search using '#{search_url}'" #workaround to get refresh url logged w/ the Daemons gem
104
+ @response = http_get search_url
98
105
  else
99
106
  #@log.debug "regular search using '#{term}'"
100
- puts "regular search using '#{term}'"
107
+ puts "regular search using '#{@search_term}'"
101
108
  @response = search_twitter()
102
109
  end
103
110
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: tweetlr
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.9
5
+ version: 0.0.10
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-16 00:00:00 Z
13
+ date: 2011-05-22 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: daemons