guillermo (owner)

Forks

  • gist: 224913 by mort Tweaking Guillermo's origin... created Tue Nov 03 01:27:08 -0800 2009

Revisions

gist: 223155 Download_button fork
public
Description:
Twitter Backup
Public Clone URL: git://gist.github.com/223155.git
Embed All Files: show embed
twitter_backup.rb #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
require 'twitter'
 
 
# TwitterBackup.new(user,pass).backup!
# Will save tweets to files
# ~/.twitter_backup/tweets/tweet_id.yaml # Full yaml tweet
# ~/.twitter_backup/tweets/tweet_id.txt # Only tweet text
 
# Search locally in your tweets
# cat ~/.twitter_backup/tweets/*.txt | grep -i 'some text'
 
 
class TwitterBackup
  
  def initialize(user,pass)
    @user,@pass = user, pass
    @twitter = Twitter::Base.new(Twitter::HTTPAuth.new(@user,@pass))
  end
 
  def total
    @twitter.verify_credentials.statuses_count
  end
  
  def remaining_hits
    @twitter.rate_limit_status.remaining_hits
  end
  
  def backup!
    puts "Backing up #{total} tweets for #{@user}"
    mkdir
    page = 1
    res = [1,2,3]
    while (res.size > 0)
      puts "Fetching page #{page}"
      res = @twitter.user_timeline(:page => page)
      res.each do |tweet|
        puts "Processing tweet #{tweet.id}: #{tweet.text}"
        save(tweet)
      end
      page += 1
    end
  end
 
private
 
  def save(tweet)
    write_yaml(tweet.id,tweet)
    write_txt(tweet.id,tweet.text)
  end
  
  def write_yaml(id,data)
    f = File.open(backup_dir+"/#{id.to_s}.yaml",'w')
    f.write data.to_yaml
    f.close
  end
  
  def write_txt(id,data)
    f = File.open(backup_dir+"/#{id.to_s}.txt",'w')
    f.write data.to_yaml
    f.close
  end
 
  def backup_dir
    File.expand_path("~/.twitter_backup/tweets")
  end
  
  def mkdir
    `mkdir -p #{backup_dir}`
  end
end