Skip to content

Commit

Permalink
Tweet engine (#14)
Browse files Browse the repository at this point in the history
* Tweet engine

* variant
  • Loading branch information
eduardosasso committed Dec 2, 2020
1 parent e6ece78 commit 08d1b89
Show file tree
Hide file tree
Showing 5 changed files with 290 additions and 2 deletions.
13 changes: 13 additions & 0 deletions Rakefile
Expand Up @@ -2,6 +2,7 @@

require './bullish.rb'
require './services/news/crawler'
require './services/twitter'

task default: %w[test]

Expand Down Expand Up @@ -145,6 +146,18 @@ task :reset_news do
Services::News::DB.new.reset
end

task :prepare_tweets do
Services::Twitter.reset_tweets

twitter = Services::Twitter.new

Services::Trending.new.stocks.each do |stock|
twitter.add_tweet(stock)
end

twitter.save_tweets
end

def send_email(bullish, day = nil)
bullish.edition.day_of_the_week = day if day

Expand Down
205 changes: 204 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion package.json
Expand Up @@ -12,7 +12,6 @@
"axios": "^0.19.2",
"stripe": "^8.68.0"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
Expand Down
2 changes: 2 additions & 0 deletions services/config.rb
Expand Up @@ -19,6 +19,8 @@ class Config
STOCK_NEWS = ENV['STOCK_NEWS']
IEX_TOKEN = ENV['IEX_TOKEN']
DB_API = ENV['DB_API']
TWITTER_DB_API = ENV['TWITTER_DB_API']
TWITTER_QUERY = ENV['TWITTER_QUERY']

# get historical performance by ticker symbol
# https://query1.finance.yahoo.com/v8/finance/chart/^IXIC?interval=1d&range=1d
Expand Down
71 changes: 71 additions & 0 deletions services/twitter.rb
@@ -0,0 +1,71 @@
require './services/config'
require 'faraday'
require './services/log'
require './templates/element'

module Services
class Twitter
attr_reader :tweets

Item =
Struct.new(
:ticker,
:variant1,
:variant2,
:variant3,
:url,
:date,
keyword_init: true
)
def initialize
@tweets = []
end

def add_tweet(stock)
today = Date.today.strftime('%Y-%m-%d')

query = format(Services::Config::TWITTER_QUERY, stock.symbol, today)
url = 'https://twitter.com/search?q=' + CGI.escape(query)

@tweets <<
Item.new(
ticker: stock.symbol,
variant1: variant1(stock),
variant2: nil,
# all time high?
variant3: nil,
url: url,
date: today
)
end

def variant1(stock)
variant = ''

stock.stats.each do |key, value|
next if value == '—'
next if key == 'MAX'

icon = value.start_with?(Templates::Element::MINUS) ? '▽' : '△'

variant += "#{key} #{icon} #{value}\n"
end

variant
end

def save_tweets
data = { data: tweets }

Faraday.post(
Services::Config::TWITTER_DB_API,
data.to_json,
'Content-Type' => 'application/json'
)
end

def self.reset_tweets
Faraday.delete("#{Services::Config::TWITTER_DB_API}/all")
end
end
end

0 comments on commit 08d1b89

Please sign in to comment.