module RedditBot::Twitter

Public Class Methods

init_twitter(twitter) click to toggle source
# File lib/reddit_bot.rb, line 277
def self.init_twitter twitter
  const_set :TWITTER_ACCOUNT, twitter
  const_set :TWITTER_ACCESS_TOKEN, JSON.load(
    NetHTTPUtils.request_data "https://api.twitter.com/oauth2/token", :post,
      auth: File.read("twitter.token").split,
      form: {grant_type: :client_credentials}
  )["access_token"]
end
tweet2titleNtext(tweet) click to toggle source
# File lib/reddit_bot.rb, line 287
def self.tweet2titleNtext tweet
  pp tweet if ENV["TEST"]
  text = ""
  contains_media = false
  up = ->s{ s.split.map{ |w| "^#{w}" }.join " " }
  if tweet["extended_entities"] && !tweet["extended_entities"]["media"].empty?
    contains_media = true
    tweet["extended_entities"]["media"].each_with_index do |media, i|
      text.concat "* [Image #{i + 1}](#{media["media_url_https"]})\n\n"
    end
  end
  if !tweet["entities"]["urls"].empty?
    contains_media = true
    tweet["entities"]["urls"].each_with_index do |url, i|
      text.concat "* [Link #{i + 1}](#{url["expanded_url"]})\n\n"
    end
  end
  text.concat "^- #{
    up[tweet["user"]["name"]]
  } [^\\(@#{TWITTER_ACCOUNT}\\)](https://twitter.com/#{TWITTER_ACCOUNT}) ^| [#{
    up[Date.parse(tweet["created_at"]).strftime "%B %-d, %Y"]
  }](https://twitter.com/#{TWITTER_ACCOUNT}/status/#{tweet["id"]})"
  [CGI::unescapeHTML(tweet["full_text"]).sub(/( https:\/\/t\.co\/[0-9a-zA-Z]{10})*\z/, ""), text, contains_media]
end
user_timeline() click to toggle source
# File lib/reddit_bot.rb, line 312
def self.user_timeline
  timeout = 1
  JSON.load begin
    NetHTTPUtils.request_data(
      "https://api.twitter.com/1.1/statuses/user_timeline.json",
      form: { screen_name: TWITTER_ACCOUNT, count: 200, tweet_mode: "extended" },
      header: { Authorization: "Bearer #{TWITTER_ACCESS_TOKEN}" }
    )
  rescue NetHTTPUtils::Error => e
    fail unless [500, 503].include? e.code
    sleep timeout
    timeout *= 2
    retry
  end
end