class SocialFeedAgregator::TwitterReader

Attributes

consumer_key[RW]
consumer_secret[RW]
twitter_name[RW]
twitter_oauth_token[RW]
twitter_oauth_token_secret[RW]

Public Class Methods

new(options={}) click to toggle source
Calls superclass method BaseReader::new
# File lib/social_feed_agregator/twitter_reader.rb, line 14
def initialize(options={})
  super(options)
  options.replace(SocialFeedAgregator.default_options.merge(options))

  @consumer_key = options[:twitter_consumer_key]
  @consumer_secret = options[:twitter_consumer_secret]
  @oauth_token = options[:twitter_oauth_token]
  @token_secret = options[:twitter_oauth_token_secret]
  @name = options[:twitter_user_name]

end

Public Instance Methods

get_feeds(options={}) { |feed| ... } click to toggle source
Calls superclass method BaseReader#get_feeds
# File lib/social_feed_agregator/twitter_reader.rb, line 26
def get_feeds(options={})
  super(options)
  @name = options[:name] if options[:name]
  count = options[:count] || 100

  from_date = options[:from_date] || DateTime.new(1970,1,1) 
  
  client = ::Twitter.configure do |config|
    config.consumer_key = @consumer_key
    config.consumer_secret = @consumer_secret
    config.oauth_token = @oauth_token
    config.oauth_token_secret = @token_secret
  end
              
  feeds, i = [], 0
  count_per_request =  200 #::Twitter::REST::API::Timelines::MAX_TWEETS_PER_REQUEST

  opts = {count: count < count_per_request ? count : count_per_request}

  parts = (count.to_f / count_per_request).ceil

  while (statuses = client.user_timeline(@name, opts)) && i < parts do
    i+=1                

    statuses.each do |status|                
      
      # Break if the date is less
      if status.created_at <= from_date
        i = parts
        break
      end
      
      feed = fill_feed status
      
      block_given? ? yield(feed) : feeds << feed     
      
      new_count = count - count_per_request * i
      opts[:count] = new_count < count_per_request ? new_count : count_per_request
      opts[:max_id] = status.id.to_s          
    end       
  end
  feeds
end

Private Instance Methods

fill_feed(status) click to toggle source
# File lib/social_feed_agregator/twitter_reader.rb, line 72
def fill_feed(status)
  tweet_type, picture_url, link  = 'status', '', ''
       
  if status.entities?                      
    if status.media.any?
      photo_entity = status.media.first          
      tweet_type = 'photo'
      picture_url = photo_entity.media_url
    end

    if status.urls.any?
      url_entity = status.urls.first          
      tweet_type = 'link'
      link = url_entity.url
    end
  end

  feed = Feed.new(
    feed_type: :twitter,
    feed_id: status.id.to_s,       

    user_id: status.user.id,
    user_name: status.user.screen_name,
    
    permalink: "https://twitter.com/#{status.user.screen_name}/status/#{status.id}", #status.url,
    message: status.text,          
    created_at: status.created_at,

    type: tweet_type,
    picture_url: picture_url,
    link: link
  ) 
end