Skip to content

Instantly share code, notes, and snippets.

@chrisgaunt
Forked from kuntoaji/hashtag_counter.rb
Created May 24, 2012 22:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chrisgaunt/2784762 to your computer and use it in GitHub Desktop.
Save chrisgaunt/2784762 to your computer and use it in GitHub Desktop.
Ruby script to count a twitter hashtag and save the result and last_tweet_id to hashtag_counter_result.txt and last_tweet_id.tx
#!/usr/bin/env ruby
# Twitter Hashtag Counter
#
# Script to count a twitter hashtag and save the result and last_tweet_id to
# hashtag_counter_result.txt and last_tweet_id.txt
#
# Requirements: twitter gem.
# To install twitter gem: [sudo] gem install twitter
require 'rubygems'
require 'twitter'
require 'optparse'
options = {}
OptionParser.new do |opts|
opts.banner = "Usage: ruby hashtag_counter.rb [options] [arguments]\n"
opts.banner += "Example: ruby hastag_counter.rb -s mytag -d 2010-09-21"
opts.on("-s", "--search [TAG]", "search tag. ie. mytag, will generate #mytag automatically") do |tag|
options[:search] = tag
end
opts.on("-d", "--since-date [YYYY-MM-DD]", "since date. ie. 2010-09-21") do |date|
options[:date] = date
end
end.parse!
tag = options[:search]
date = options[:date]
last_tweet_id = nil
result = 0
puts "Count hashtag: ##{tag}"
twitter_search = Twitter::Search.new.clear.hashed(tag).since_date(date).per_page(50)
# search since last_tweet_id from last_tweet_id.txt
# last_tweet_id.txt only contains one line with one tweet id
filename = 'last_tweet_id.txt'
if File.exist?(filename)
file = File.open(filename, 'r')
last_tweet_id = file.read
file.close
twitter_search.since("#{last_tweet_id}") if !last_tweet_id.nil? or !last_tweet_id.empty?
# get the last result from hashtag_counter_result.txt
filename = 'hashtag_counter_result.txt'
if File.exist?(filename)
file = File.open(filename, 'r')
result = file.read.to_i
file.close
end
end
begin
# get the last tweet id
# if last_tweet_id == nil, then everything is up-to-date
last_tweet_id = twitter_search.fetch.results.first ? twitter_search.fetch.results.first.id : nil
if last_tweet_id
page = 1
# count each result page
puts "Fetch page #{page}"
result += twitter_search.fetch.count
while twitter_search.next_page?
page += 1
puts "Fetch page #{page}"
twitter_search = twitter_search.fetch_next_page
result += twitter_search.count
end
file = File.open('hashtag_counter_result.txt', 'w')
file.write(result)
file.close
file = File.open('last_tweet_id.txt', 'w')
file.write(last_tweet_id)
file.close
# Print the results
puts "Done\n\n"
puts "Total tweets: #{result}"
puts "Last tweet id: #{last_tweet_id}"
else
puts "Everything is up-to-date"
end
rescue
puts "Oops! Something went wrong. Try again.."
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment