Intrinio API Library and Command Line
This gem provides both a Ruby library and a command line interface for the Intrinio data service.
Install
$ gem install intrinio
Or with bundler:
gem 'intrinio'
Features
- Easy to use interface.
- Use as a library or through the command line.
- Access any Intrinio endpoint and option directly.
- Display output as JSON or CSV.
- Save output to a file as JSON or CSV.
- Includes a built in file cache (disabled by default).
Usage
First, require and initialize with your username and password.
require 'intrinio'
intrinio = Intrinio::API.new username: 'me', password: 'secret'
# or: Intrinio::API.new auth: 'me:secret'
Now, you can access any Intrinio endpoint with any optional parameter, like this:
result = intrinio.get "indices", type: 'economic', page_size: 5
In addition, for convenience, you can use the first part of the endpoint as a method name, like this:
result = intrinio.indices type: 'economic', page_size: 5
In other words, these calls are the same:
intrinio.get 'endpoint', param: value
intrinio.endpoint, param: value
as well as these two:
intrinio.get 'endpoint/sub', param: value
intrinio.endpoint 'sub', param: value
By default, you will get a ruby hash in return. If you wish to have more
control over the response, use the get!
method instead:
payload = intrinio.get! "indices", type: 'economic', page_size: 5
# Request Object
p payload.request.class
# => HTTParty::Request
# Response Object
p payload.response.class
# => Net::HTTPOK
p payload.response.body
# => JSON string
p payload.response.code
# => 200
p payload.response.msg
# => OK
# Headers Object
p payload.headers
# => Hash with headers
# Parsed Response Object
p payload.parsed_response
# => Hash with HTTParty parsed response
# (this is the content returned with #get)
You can get the response as CSV by calling get_csv
:
result = intrinio.get_csv "indices", page_size: 5
# => CSV string
Intrinio automatically decides which part of the data to convert to CSV. When there is an array in the response, it will be used as the CSV data. Otherwise, the entire response will be treated as a single-row CSV.
To save the output directly to a file, use the save
method:
intrinio.save "filename.json", "indices", type: 'economic', page_size: 5
Or, to save CSV, use the save_csv
method:
intrinio.save_csv "filename.csv", "indices", page_size: 5
Command Line
The command line utility intrinio
acts in a similar way. To use your
Intrinio authentication, simply set it in the environment variables
INTRINIO_AUTH
:
$ export INTRINIO_AUTH=username:password
These commands are available:
$ intrinio get [--csv] PATH [PARAMS...]
- print the output.
$ intrinio pretty PATH [PARAMS...]
- print a pretty JSON.
$ intrinio see PATH [PARAMS...]
- print a colored output.
$ intrinio url PATH [PARAMS...]
- show the constructed URL.
$ intrinio save [--csv] FILE PATH [PARAMS...]
- save the output to a file.
Run intrinio --help
for more information, or view the full usage help.
Examples:
# Shows the first 5 indices
$ intrinio see indices page_size:5
# Pass arguments that require spaces
$ intrinio see indices "query:interest rate" page_size:5
# Saves a file
$ intrinio save --csv aapl.csv historical_data identifier:AAPL \
item:adj_close_price frequency:monthly page_size:10
# Shows the URL that Intrinio has constructed, good for debugging
$ intrinio url indices query:interest page_size:5
# => https://api.intrinio.com/indices?query=interest&page_size=5
Caching
We are using the Lightly gem for automatic HTTP caching. To take the path of least surprises, caching is disabled by default.
You can enable and customize it by either passing options on
initialization, or by accessing the Lightly
object directly at
a later stage.
intrinio = Intrinio::API.new username: user, password: pass,
use_cache: true
intrinio = Intrinio::API.new username: user, password: pass,
use_cache: true, cache_dir: 'tmp'
intrinio = Intrinio::API.new username: user, password: pass,
use_cache: true, cache_life: 120
# or
intrinio = Intrinio::API.new username: user, password: pass
intrinio.cache.enable
intrinio.cache.dir = 'tmp/cache' # Change cache folder
intrinio.cache.life = 120 # Change cache life to 2 minutes
To enable caching for the command line, simply set one or both of these environment variables:
$ export INTRINIO_CACHE_DIR=cache # default: 'cache'
$ export INTRINIO_CACHE_LIFE=120 # default: 3600 (1 hour)
$ intrinio get indices
# => This call will be cached