Snippets

Landing Zone Sample Ed-Fi API Script

Created by Marcos Alcozer last modified
import base64
import hashlib
import hmac
import json
import sys
import urllib
from datetime import datetime, timedelta

import pandas as pd
import requests

CLIENT_ID = ''
CLIENT_SECRET = ''

credentials_concatenated = ':'.join((CLIENT_ID, CLIENT_SECRET))
credentials_encoded = base64.b64encode(credentials_concatenated.encode('utf-8'))
access_url = 'http://localhost/oauth/token'

access_headers = {
    'Authorization': b'Basic ' + credentials_encoded
}

access_params = {
    'grant_type': 'client_credentials'
}

print('Generating new access token...')
access_response = requests.post(access_url, headers=access_headers, data=access_params, verify=False)

if access_response.status_code == 200:
    print('Successfully retrieved new token')
    access_token_json = access_response.json()
    ACCESS_TOKEN = access_token_json['access_token']
    print(ACCESS_TOKEN)

else:
    print(f'Failed to retrieve access token with error {access_response.status_code}')
    print(access_response.text)
    sys.exit('Exiting.')

# GET API Request
headers = {
    'Authorization': 'Bearer ' + ACCESS_TOKEN,
    'Accept': 'application/json',
    'Content-Type': 'application/json',
}

response = requests.get(
    f'http://localhost/data/v3/ed-fi/schools?offset=0&limit=100&totalCount=true',
    headers=headers,
    params=None,
    verify=False)

if response.status_code == 200:
    df = pd.DataFrame.from_dict(response.json(), orient='columns')
    print(f'Fetched {len(df.index)} records')

    print(f'Total count: {response.headers["Total-Count"]} records')

    print(df[['id', 'schoolId', 'shortNameOfInstitution']])

else:
    print(f'Failed with error {response.status_code}')
    sys.exit('Exiting.')

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.