Usage

To use Virtual Finance API in a project simply create a Client and Requests to be performed by the Client like:

import virtual_finance_api as fa
import virtual_finance_api.endpoints.yahoo as yh
import json


client = fa.Client()
ticker = 'IBM'
r = yh.Profile(ticker)
print(json.dumps(client.request(r), indent=2))

 {
   "defaultKeyStatistics": {
     "annualHoldingsTurnover": null,
     "enterpriseToRevenue": 2.274,
     "beta3Year": null,
     "profitMargins": 0.07593,
     "enterpriseToEbitda": 10.955,
     "52WeekChange": 0.2859279,
     "morningStarRiskRating": null,
     "forwardEps": 12.08,
     "revenueQuarterlyGrowth": null,
     "sharesOutstanding": 893593984,
     "fundInceptionDate": null,
     "annualReportExpenseRatio": null,
     "totalAssets": null,
     "bookValue": 23.074,
     "sharesShort": 30005072,
     "sharesPercentSharesOut": 0.0336,
     "fundFamily": null,
     "lastFiscalYearEnd": 1609372800,
     "heldPercentInstitutions": 0.58584,
     "netIncomeToCommon": 5501000192,
     "trailingEps": 6.233,
     ....             And a lot more ....
     "maxAge": 86400
   },
   "pageViews": {
     "shortTermTrend": "UP",
     "midTermTrend": "UP",
     "longTermTrend": "UP",
     "maxAge": 1
   }
 }

Exceptions

To catch exceptions, wrap the client.request() in a try/catch like:

import virtual_finance_api as fa
import virtual_finance_api.endpoints.yahoo as yh
import json


client = fa.Client()
ticker = 'IBM'
r = yh.Profile(ticker)
try:
    rv = client.request(r)

except fa.VirtualFinanceAPIError as err:
    print(err)

else:
    print(json.dumps(rv, indent=2))

Logging

The virtual_finance_library has logging integrated. By simply importing the logging module and configuring it, you will have logging available.

import virtual_finance_api as fa
import virtual_finance_api.endpoints.yahoo as yh
import json
import logging


logging.basicConfig(
    filename="./your_appl_name.log",
    level=logging.INFO,
    format='%(asctime)s [%(levelname)s] %(name)s : %(message)s',
)

client = fa.Client()
ticker = 'IBM'
r = yh.Profile(ticker)
try:
    rv = client.request(r)

except fa.VirtualFinanceAPIError as err:
    print(err)

else:
    print(json.dumps(rv, indent=2))

… and the log looks like:

2021-04-09 14:26:28,884 [INFO] virtual_finance_api.client : performing request https://finance.yahoo.com/quote/IBM
2021-04-09 14:26:29,359 [INFO] virtual_finance_api.endpoints.yahoo.ticker_bundle : conversion_hook: IBM OK