Class: Termtter::Twitter
- Inherits:
-
Object
- Object
- Termtter::Twitter
- Defined in:
- lib/plugin/follow.rb,
lib/plugin/favorite.rb,
lib/termtter/twitter.rb
Defined Under Namespace
Classes: APILIMIT
Instance Method Summary collapse
- #direct_message(user, status) ⇒ Object
- #favorite(id) ⇒ Object
- #followers ⇒ Object
- #get_friends_timeline(since_id = nil) ⇒ Object
- #get_rate_limit_status ⇒ Object (also: #api_limit)
- #get_timeline(uri) ⇒ Object
- #get_user_profile(screen_name) ⇒ Object
- #get_user_timeline(screen_name) ⇒ Object
-
#initialize(user_name, password, connection, host = "twitter.com") ⇒ Twitter
constructor
A new instance of Twitter.
- #replies ⇒ Object
- #search(query) ⇒ Object
- #show(id, rth = false) ⇒ Object
- #social(user, type) ⇒ Object
- #update_status(status) ⇒ Object
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 (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 |
#followers ⇒ Object
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_status ⇒ Object 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 get_user_profile(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 |
#replies ⇒ Object
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 (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 |