Class: Termtter::Twitter

Inherits:
Object
  • Object
show all
Defined in:
lib/plugin/follow.rb,
lib/plugin/favorite.rb,
lib/termtter/twitter.rb

Defined Under Namespace

Classes: APILIMIT

Instance Method Summary collapse

Constructor Details

#initialize(user_name, password, connection, host = "twitter.com") ⇒ Twitter

Returns a new instance of Twitter.



10
11
12
13
14
15
# File 'lib/termtter/twitter.rb', line 10

def initialize(user_name, password, connection, host = "twitter.com")
  @user_name = user_name
  @password = password
  @connection = connection
  @host = host
end

Instance Method Details

#direct_message(user, status) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/termtter/twitter.rb', line 25

def direct_message(user, status)
  @connection.start(@host, @connection.port) do |http|
    uri = '/direct_messages/new.xml'
    http.request(post_request(uri), "user=#{CGI.escape(user)}&text=#{CGI.escape(status)}&source=#{APP_NAME}")
  end
  [user, status]
end

#favorite(id) ⇒ Object



67
68
69
70
71
72
73
# File 'lib/plugin/favorite.rb', line 67

def favorite(id)
  uri = "#{@connection.protocol}://twitter.com/favourings/create/#{id}.json"

  @connection.start('twitter.com', @connection.port) do |http|
    http.request(post_request(uri))
  end
end

#followersObject



80
81
82
83
84
85
86
87
# File 'lib/termtter/twitter.rb', line 80

def followers
  users = []
  page = 0
  begin
    users += tmp = fetch_as_json(url_for("/statuses/followers.json?page=#{page+=1}"))
  end until tmp.empty?
  return users.map{|u| hash_to_user(u)}
end

#get_friends_timeline(since_id = nil) ⇒ Object



38
39
40
41
42
# File 'lib/termtter/twitter.rb', line 38

def get_friends_timeline(since_id = nil)
  uri =  url_for("/statuses/friends_timeline.json")
  uri << "?since_id=#{since_id}" if since_id
  return get_timeline(uri)
end

#get_rate_limit_statusObject Also known as: api_limit



108
109
110
111
112
113
114
# File 'lib/termtter/twitter.rb', line 108

def get_rate_limit_status
  data = fetch_as_json(url_for("/account/rate_limit_status.json"))
  reset_time = Time.parse(data['reset_time'])
  reset_time_in_seconds = data['reset_time_in_seconds'].to_i
  
  APILIMIT.new(reset_time, reset_time_in_seconds, data['remaining_hits'], data['hourly_limit'])
end

#get_timeline(uri) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/termtter/twitter.rb', line 89

def get_timeline(uri)
  data = fetch_as_json(uri)
  data = [data] unless data.instance_of? Array
  return data.map do |s|
    status = Status.new
    status.created_at = Time.parse(s["created_at"])
    %w(id text truncated in_reply_to_status_id in_reply_to_user_id in_reply_to_screen_name).each do |key|
      status.__send__("#{key}=".to_sym, s[key])
    end
    %w(id name screen_name url profile_image_url).each do |key|
      status.__send__("user_#{key}=".to_sym, s["user"][key])
    end
    status.text = status.text.gsub(/(\n|\r)/, '')
    status
  end
end

#get_user_profile(screen_name) ⇒ Object



33
34
35
36
# File 'lib/termtter/twitter.rb', line 33

def (screen_name)
  result = fetch_as_json(url_for("/users/show/#{screen_name}.json"))
  return hash_to_user(result)
end

#get_user_timeline(screen_name) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/termtter/twitter.rb', line 44

def get_user_timeline(screen_name)
  return get_timeline(url_for("/statuses/user_timeline/#{screen_name}.json"))
rescue OpenURI::HTTPError => e
  puts "No such user: #{screen_name}"
  nears = near_users(screen_name)
  puts "near users: #{nears}" unless nears.empty?
  return []
end

#repliesObject



76
77
78
# File 'lib/termtter/twitter.rb', line 76

def replies
  return get_timeline(url_for("/statuses/replies.json"))
end

#search(query) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/termtter/twitter.rb', line 54

def search(query)
  results = fetch_as_json(search_url_for("/search.json?q=#{CGI.escape(query)}"))['results']
  return results.map do |s|
    status = Status.new
    status.id = s['id']
    status.text = s['text'].
                    gsub(/(\n|\r)/, '').
                    gsub(/(#{Regexp.escape(query)})/i, configatron.search.highlihgt_text_format)
    status.created_at = Time.parse(s["created_at"])
    status.user_screen_name = s['from_user']
    status
  end
end

#show(id, rth = false) ⇒ Object



68
69
70
71
72
73
74
# File 'lib/termtter/twitter.rb', line 68

def show(id, rth = false)
  get_status = lambda { get_timeline(url_for("/statuses/show/#{id}.json"))[0] }
  statuses = []
  statuses << status = Array(Client.public_storage[:log]).detect(get_status) {|s| s.id == id.to_i }
  statuses << show(id, true) if rth && id = status.in_reply_to_status_id
  statuses.flatten
end

#social(user, type) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/plugin/follow.rb', line 43

def social(user, type)
  type =
    case type.to_sym
    when :follow then 'create'
    when :leave  then 'destroy'
    end
  uri = "#{@connection.protocol}://twitter.com/friendships/#{type}/#{user}.json"

  @connection.start('twitter.com', @connection.port) do |http|
    http.request(post_request(uri))
  end
end

#update_status(status) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/termtter/twitter.rb', line 17

def update_status(status)
  @connection.start(@host, @connection.port) do |http|
    uri = '/statuses/update.xml'
    http.request(post_request(uri), "status=#{CGI.escape(status)}&source=#{APP_NAME}")
  end
  status
end