Distribution
Export CSV
You can use the Mode API to automate the process of exporting reports to CSVs.
Endpoints used
.../{workspace}/reports/{report_token}/runs
Supported method:
- GET: returns a report’s historic runs
.../{workspace}/reports/{report_token}/runs/{run_token}/results/content.csv
Supported method:
- GET: downloads a report run’s results to CSV
How this example works
In this example, the export_report_to_csv
method first calls the helper function get_report_latest_run_status
to get the run token and the latest report run’s state. get_report_latest_run_status
makes a GET
request to app.mode.com/api/{workspace}/reports/{report_token}/runs
and retrieves the first in the list of historic runs. Back in the method export_report_to_csv
, we check whether the latest run was successful. If it was, we make a GET
request to app.mode.com/api/{workspace}/reports/{report_token}/runs/{run_token}/results/content.csv
to download the CSV of the latest run to the directory where the .py
file is. If the latest run fails, we print an error message in the console.
To try it yourself
- Download the example code to a
.py
file - Input the API token, API secret, Workspace name, and other custom information as needed. Follow these steps to create an API token.
- Save the .py file in your desired directory
- Open the terminal and navigate to that directory
- Run the command
python3 {file_name}.py
- All of our Python recipes require Python 3
import json
import requests
import cgi, cgitb
from requests.auth import HTTPBasicAuth
host = 'https://modeanalytics.com'
ws = 'workspace_name' # Note: workspace_name value should be all lowercase
un = 'api_token'
pw = 'api_secret'
def export_report_to_csv(report_token):
latest_report_run = get_report_latest_run_status(report_token)
status = latest_report_run['status']
most_recent_report_run_token = latest_report_run['most_recent_report_run_token']
if status == "succeeded":
url = '%s/api/%s/reports/%s/runs/%s/results/content.csv' % (host, ws, report_token, most_recent_report_run_token)
r = requests.get(url, auth=HTTPBasicAuth(un, pw))
params = cgi.parse_header(r.headers['Content-Disposition'])[1]
file_name = params['filename']
if r.status_code == 200:
with open(file_name, 'wb') as f:
for chunk in r.iter_content(1024):
f.write(chunk)
return r
else:
print ('Report latest run did not succeed. Take a look at the report details.')
return
def get_report_latest_run_status(report_token):
url = '%s/api/%s/reports/%s/runs' % (host, ws, report_token)
r = requests.get(url, auth=HTTPBasicAuth(un, pw))
result = r.json()
most_recent_report_run_token = result['_embedded']['report_runs'][0]['token']
status = result['_embedded']['report_runs'][0]['state']
return {'status':status, 'most_recent_report_run_token' : most_recent_report_run_token}
export_report_to_csv('report_token')
const request = require('request');
const fs = require('fs');
const host = 'https://modeanalytics.com';
const ws = 'workspaceName'; // Note: workspaceName value should be all lowercase
const username = 'apiToken';
const password = 'apiSecret';
const exportReportToCSV = reportToken => request({
url: `${host}/api/${ws}/reports/${reportToken}/runs`,
json: true,
auth: { username, password },
}, (err, res, body) => {
let {
state,
token: mostRecentReportRunToken,
} = body._embedded.report_runs[0];
if (state === "succeeded") {
request({
url: `${host}/api/${ws}/reports/${reportToken}/runs/${mostRecentReportRunToken}/results/content.csv`,
auth: { username, password },
gzip: true,
})
.on('error', err => console.error('Report\'s latest run failed. Please fix the queries errors before exporting again.'))
.pipe(fs.createWriteStream('mode-report.csv'));
}
return;
});
exportReportToCSV('reportToken');