Class: Termtter::Twitter

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

Defined Under Namespace

Classes: APILIMIT

Instance Method Summary collapse

Constructor Details

#initialize(user_name, password) ⇒ Twitter

Returns a new instance of Twitter.



117
118
119
120
121
# File 'lib/termtter.rb', line 117

def initialize(user_name, password)
  @user_name = user_name
  @password = password
  @connection = Connection.new
end

Instance Method Details

#favorite(id) ⇒ Object



62
63
64
65
66
67
68
# File 'lib/plugin/favorite.rb', line 62

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

  Net::HTTP.start('twitter.com', 80) do |http|
    http.request(post_request(uri))
  end
end

#get_friends_timeline(since_id = nil) ⇒ Object



131
132
133
134
135
# File 'lib/termtter.rb', line 131

def get_friends_timeline(since_id = nil)
  uri =  "#{@connection.protocol}://twitter.com/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



185
186
187
188
189
190
191
192
193
# File 'lib/termtter.rb', line 185

def get_rate_limit_status
  uri = 'http://twitter.com/account/rate_limit_status.json'
  data = JSON.parse(open(uri, :http_basic_authentication => [user_name, password], :proxy => @connection.proxy_uri).read)

  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



166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
# File 'lib/termtter.rb', line 166

def get_timeline(uri)
  data = JSON.parse(open(uri, :http_basic_authentication => [user_name, password], :proxy => @connection.proxy_uri).read)
  data = [data] unless data.instance_of? Array
  return data.map do |s|
    status = Status.new
    status.created_at = Time.utc(*ParseDate::parsedate(s["created_at"])).localtime
    %w(id text truncated in_reply_to_status_id in_reply_to_user_id).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 = CGI.unescapeHTML(status.text).gsub(/(\n|\r)/, '')
    status
  end
end

#get_user_timeline(screen_name) ⇒ Object



137
138
139
140
141
142
143
144
# File 'lib/termtter.rb', line 137

def get_user_timeline(screen_name)
  return get_timeline("#{@connection.protocol}://twitter.com/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



162
163
164
# File 'lib/termtter.rb', line 162

def replies
  return get_timeline("#{@connection.protocol}://twitter.com/statuses/replies.json")
end

#search(query) ⇒ Object



146
147
148
149
150
151
152
153
154
155
156
# File 'lib/termtter.rb', line 146

def search(query)
  results = JSON.parse(open("#{@connection.protocol}://search.twitter.com/search.json?q=" + CGI.escape(query)).read, :proxy => @connection.proxy_uri)['results']
  return results.map do |s|
    status = Status.new
    status.id = s['id']
    status.text = CGI.unescapeHTML(s['text']).gsub(/(\n|\r)/, '')
    status.created_at = Time.utc(*ParseDate::parsedate(s["created_at"])).localtime
    status.user_screen_name = s['from_user']
    status
  end
end

#show(id) ⇒ Object



158
159
160
# File 'lib/termtter.rb', line 158

def show(id)
  return get_timeline("#{@connection.protocol}://twitter.com/statuses/show/#{id}.json")
end

#social(user, type) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/plugin/follow.rb', line 27

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

  Net::HTTP.start('twitter.com', 80) do |http|
    http.request(post_request(uri))
  end
end

#update_status(status) ⇒ Object



123
124
125
126
127
128
129
# File 'lib/termtter.rb', line 123

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