stock_financials 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/lib/balance_sheet.rb +23 -0
- data/lib/financials.rb +21 -0
- data/lib/income_statement.rb +24 -0
- data/lib/stock_financials.rb +57 -0
- metadata +62 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YjUzZjVjMWUyMWRiYzZjOTE5ZTMzNDA2ODRjNTYyOTM0MzIwMDdhYw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NDliMmE2Nzg1NjhlYmZmNjA5Njg2MTkwMjI4ZDcyZDUzYjQ1YzFjYQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YTA5OGE0MzEyZjIwZGMxNDUwYzFjMjc2YTAyNDFkOWI5NWRkZWY4M2JkN2Fl
|
10
|
+
ZGEwODhjYjI5MmQ1Nzg3Nzc3NWU3NmVhYTI5ZGQ4MGY3NTcyZGYxNWIyZTky
|
11
|
+
MjdlOWUxYWEwMTY0MTBlYzI4MDFmZGY0YjdkZmQ3NDdlYWE5NzQ=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
MTRmY2Q3NDAwZGIzOGYxOGUzNjhiZGI4NDRkNTUwOWI2ODliZGIyODgxMGY1
|
14
|
+
ODYwYTdiNjg3MzZiM2UxNzUxZDA0YTNiYmI4YzRiNDAyYjA4MjIyYjk1ZmQ0
|
15
|
+
YjUwM2UyMTNmNWNkYjc0MDBmNjNhOGNlNmU1Y2VhYWQ2NTA0ZTc=
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'date'
|
2
|
+
class BalanceSheet
|
3
|
+
attr_accessor :cash_and_cash_equivalents, :total_current_assets, :total_assets, :short_term_debt, :total_current_liabilites, :long_term_debt, :total_liabilities,
|
4
|
+
:total_equity, :period
|
5
|
+
|
6
|
+
def initialize(params)
|
7
|
+
@cash_and_cash_equivalents = params["CashAndCashEquivalents"]["content"] if params["CashAndCashEquivalents"]
|
8
|
+
@total_current_assets = params["TotalCurrentAssets"]["content"] if params["TotalCurrentAssets"]
|
9
|
+
@total_assets = params["TotalAssets"]["content"] if params["TotalAssets"]
|
10
|
+
@short_term_debt = params["Short_CurrentLongTermDebt"]["content"] if params["Short_CurrentLongTermDebt"]
|
11
|
+
@total_current_liabilites = params["TotalCurrentLiabilities"]["content"] if params["TotalCurrentLiabilities"]
|
12
|
+
@long_term_debt = params["LongTermDebt"]["content"] if params["LongTermDebt"]
|
13
|
+
@total_liabilities = params["TotalLiabilities"]["content"] if params["TotalLiabilities"]
|
14
|
+
@total_equity = params["TotalStockholderEquity"]["content"] if params["TotalStockholderEquity"]
|
15
|
+
@period = Date.parse(params["period"])
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_s
|
19
|
+
p "#{@period}"
|
20
|
+
p "CashAndCashEquivalents: #{@cash_and_cash_equivalents}"
|
21
|
+
p "TotalAssets: #{@total_assets}"
|
22
|
+
end
|
23
|
+
end
|
data/lib/financials.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
|
2
|
+
class Financials
|
3
|
+
attr_accessor :statements, :timeframe, :symbol, :type
|
4
|
+
|
5
|
+
def initialize(params,type)
|
6
|
+
@type = type
|
7
|
+
statements = params["statement"]
|
8
|
+
@symbol = params["symbol"]
|
9
|
+
@timeframe = params["timeframe"]
|
10
|
+
@statements = []
|
11
|
+
if type == INCOME_STATEMENT
|
12
|
+
statements.each { |statement|
|
13
|
+
@statements << IncomeStatement.new(statement)
|
14
|
+
}
|
15
|
+
elsif type == BALANCE_SHEET
|
16
|
+
statements.each { |statement|
|
17
|
+
@statements << BalanceSheet.new(statement)
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class IncomeStatement
|
2
|
+
attr_accessor :total_revenue,:cost_of_revenue,:gross_profit,
|
3
|
+
:total_operating_expenses,:operating_income_or_loss,:ebit,
|
4
|
+
:interest_expenses,:income_before_tax,:income_tax_expense,:net_income, :period
|
5
|
+
def initialize(params)
|
6
|
+
@total_revenue = params["TotalRevenue"]["content"] if params["TotalRevenue"]
|
7
|
+
@cost_of_revenue = params["CostofRevenue"]["content"] if params["CostofRevenue"]
|
8
|
+
@gross_profit = params["GrossProfit"]["content"] if params["GrossProfit"]
|
9
|
+
@total_operating_expenses = params["TotalOperatingExpenses"]["content"] if params["TotalOperatingExpenses"]
|
10
|
+
@operating_income_or_loss = params["OperatingIncomeOrLoss"]["content"] if params["OperatingIncomeOrLoss"]
|
11
|
+
@ebit = params["EarningsBeforeInterestAndTaxes"]["content"] if params["EarningsBeforeInterestAndTaxes"]
|
12
|
+
@interest_expenses = params["InterestExpense"]["content"] if params["InterestExpense"]
|
13
|
+
@income_before_tax = params["IncomeBeforeTax"]["content"] if params["IncomeBeforeTax"]
|
14
|
+
@income_tax_expense = params["IncomeTaxExpense"]["content"] if params["IncomeTaxExpense"]
|
15
|
+
@net_income = params["NetIncome"]["content"] if params["NetIncome"]
|
16
|
+
@period = Date.parse(params["period"])
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_s
|
20
|
+
p "Total Revenue: #{@total_revenue}"
|
21
|
+
p "Cost of Revenue: #{@cost_of_revenue}"
|
22
|
+
p "Gross Profit: #{@gross_profit}"
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'yql'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
require_relative 'income_statement.rb'
|
5
|
+
require_relative 'balance_sheet.rb'
|
6
|
+
require_relative 'financials.rb'
|
7
|
+
|
8
|
+
QUARTERLY_TIME_FRAME = 'quarterly'
|
9
|
+
ANNUAL_TIME_FRAME = 'annual'
|
10
|
+
|
11
|
+
BALANCE_SHEET = "BalanceSheet"
|
12
|
+
INCOME_STATEMENT = "IncomeStatement"
|
13
|
+
|
14
|
+
class StockFinancials
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
@yql = Yql::Client.new
|
18
|
+
@yql.format = 'json'
|
19
|
+
end
|
20
|
+
|
21
|
+
def income_statement(stock_symbol, period = QUARTERLY_TIME_FRAME)
|
22
|
+
financials = send_query(stock_symbol, period, INCOME_STATEMENT)
|
23
|
+
end
|
24
|
+
|
25
|
+
def balance_sheet(stock_symbol, period = QUARTERLY_TIME_FRAME)
|
26
|
+
financials = send_query(stock_symbol, period, BALANCE_SHEET)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def send_query(stock_symbol,period,statement_type)
|
32
|
+
query = ""
|
33
|
+
if statement_type == INCOME_STATEMENT
|
34
|
+
query = Yql::QueryBuilder.new 'yahoo.finance.incomestatement'
|
35
|
+
elsif statement_type == BALANCE_SHEET
|
36
|
+
query = Yql::QueryBuilder.new 'yahoo.finance.balancesheet'
|
37
|
+
end
|
38
|
+
query.conditions = "symbol ='#{stock_symbol}' and timeframe='#{period}'"
|
39
|
+
@yql.query = query
|
40
|
+
response = @yql.get
|
41
|
+
|
42
|
+
unless response && response.show.to_s
|
43
|
+
return
|
44
|
+
end
|
45
|
+
|
46
|
+
results = JSON.parse(response.show.to_s)
|
47
|
+
if !results.has_key?("query") || !results["query"].has_key?("results")
|
48
|
+
return
|
49
|
+
end
|
50
|
+
if statement_type == INCOME_STATEMENT
|
51
|
+
financials = Financials.new(results["query"]["results"]["incomestatement"], statement_type)
|
52
|
+
elsif statement_type == BALANCE_SHEET
|
53
|
+
financials = Financials.new(results["query"]["results"]["balancesheet"], statement_type)
|
54
|
+
end
|
55
|
+
financials
|
56
|
+
end
|
57
|
+
end
|
metadata
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stock_financials
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Abhijith Reddy
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-03-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: yql
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.2
|
27
|
+
description: Get stock financials.
|
28
|
+
email: archerabi@gmail.com
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- lib/balance_sheet.rb
|
34
|
+
- lib/financials.rb
|
35
|
+
- lib/income_statement.rb
|
36
|
+
- lib/stock_financials.rb
|
37
|
+
homepage: https://github.com/archerabi/StockFinancials
|
38
|
+
licenses:
|
39
|
+
- MIT
|
40
|
+
metadata: {}
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ! '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
requirements: []
|
56
|
+
rubyforge_project:
|
57
|
+
rubygems_version: 2.2.0
|
58
|
+
signing_key:
|
59
|
+
specification_version: 4
|
60
|
+
summary: Financials for a stock!
|
61
|
+
test_files: []
|
62
|
+
has_rdoc:
|