Python, RapidAPI Terms

APIs and tooling like Jupyter docs allows many opportunities in fields like Data Science. As more and more developers use APIs, they build standards in how you setup a client, send requests and receive information...

Covid19 RapidAPI Example

To begin the API journey. You need to find an API provider.

  • RapidAPI is a great option. You must setup and account, but there are many free options.
  • Goto this page for starters, the Corona virus World and India data- Under Code Snippets pick Python - Requests

RapidAPI, you will select Python Requests type of code to work with you Notebook.

  • The url is the endpoint to which the API is directed
  • The headers is a dictionary data structure to send special messaging to the endpoint
  • The requests.request() python function is used to send a request and retrieve their responses
  • The response variable receives result of of the request in JSON text

Next step, is to format the response according to your data science needs

"""
Requests is a HTTP library for the Python programming language. 
The goal of the project is to make HTTP requests simpler and more human-friendly. 
"""
import requests

"""
RapidAPI is the world's largest API Marketplace. 
Developers use Rapid API to discover and connect to thousands of APIs. 
"""
url = "https://corona-virus-world-and-india-data.p.rapidapi.com/api"
headers = {
    'x-rapidapi-key': "dec069b877msh0d9d0827664078cp1a18fajsn2afac35ae063",
    'x-rapidapi-host': "corona-virus-world-and-india-data.p.rapidapi.com"
}

# Request Covid Data
response = requests.request("GET", url, headers=headers)
# print(response.text)  # uncomment this line to see raw data


# print(response.json[])


# This code looks for "world data"
print("World Totals")
world = response.json().get('world_total')  # turn response to json() so we can extract "world_total"
for key, value in world.items():  # this finds key, value pairs in country
    print(key, value)

print()

# This code looks for USA in "countries_stats"
print("Country Totals")
countries = response.json().get('countries_stat')
for country in countries:  # countries is a list
    if country["country_name"] == "USA":  # this filters for USA
        for key, value in country.items():  # this finds key, value pairs in country
            print(key, value)
World Totals
total_cases 509,268,964
new_cases 204,268
total_deaths 6,242,509
new_deaths 630
total_recovered 461,827,849
active_cases 41,198,606
serious_critical 42,510
total_cases_per_1m_population 65,334
deaths_per_1m_population 800.9
statistic_taken_at 2022-04-24 11:18:01

Country Totals
country_name USA
cases 82,649,779
deaths 1,018,316
region 
total_recovered 80,434,925
new_deaths 0
new_cases 0
serious_critical 1,465
active_cases 1,196,538
total_cases_per_1m_population 247,080
deaths_per_1m_population 3,044
total_tests 1,000,275,726
tests_per_1m_population 2,990,303
# RapidAPI page https://rapidapi.com/Coinranking/api/coinranking1/

# Begin Rapid API Code
import requests

url = "https://coinranking1.p.rapidapi.com/coins"
querystring = {"referenceCurrencyUuid":"yhjMzLPhuIDl","timePeriod":"24h","tiers[0]":"1","orderBy":"marketCap","orderDirection":"desc","limit":"50","offset":"0"}
headers = {
	"X-RapidAPI-Key": "703210b827msh18ebf505c5fabaep1efeabjsn249dcd49ab14",  # place your key here
	"X-RapidAPI-Host": "coinranking1.p.rapidapi.com"
}

response = requests.request("GET", url, headers=headers, params=querystring)
# End Rapid API Code
json = response.json()  # convert response to python json object

# Observe data from an API.  This is how data transports over the internet in a "JSON" text form
# - The JSON "text" is formed in dictionary {} and list [] divisions
# - To read the result, Data Scientist of  Developer converts JSON into human readable form
# - Review the first line, look for the keys --  "status" and "data"

for coin in json["data"]["coins"]:
	print (f'{coin["symbol"]} {coin["name"]} {coin["price"]}')

# organizing coins
# Symbol, Name, and price
BTC Bitcoin 19203.20912786924
ETH Ethereum 1302.535600928555
USDT Tether USD 1.000094285368392
USDC USDC 1.000477661148097
BNB Binance Coin 270.00105525107205
XRP XRP 0.4897314042127202
BUSD Binance USD 1.0003009213568992
ADA Cardano 0.3660624589069799
SOL Solana 30.254407183042204
DOGE Dogecoin 0.058748961413204105
DOT Polkadot 6.069472359767447
MATIC Polygon 0.7868259700408456
DAI Dai 1.00045950757267
SHIB Shiba Inu 0.000010120129500166
TRX TRON 0.06362493936708112
STETH Lido Staked Ether 1293.6357849687838
WETH Wrapped Ether 1301.545746759449
UNI Uniswap 6.269707849441305
WBTC Wrapped BTC 19196.44969734286
AVAX Avalanche 15.754553577525822
OKB OKB 16.869579869774455
CAKE PancakeSwap 4.40893962367892
ATOM Cosmos 11.68714343028012
LTC Litecoin 51.39089480432234
FTT FTX Token 23.497306556423972
ETC Ethereum Classic 23.42441136851592
XMR Monero 141.11608602181957
XLM Stellar 0.11285616690108048
ALGO Algorand 0.3167857570029688
BTCB Bitcoin BEP2 19212.187914427504
CRO Cronos 0.10323077808698662
BCH Bitcoin Cash 107.85469374357216
ENS EnergySwap 19.353983535613075
NEAR NEAR Protocol 2.998530943311797
LUNC Terra Classic 0.000274653305505199
WEMIX WEMIX TOKEN 1.7872039849010353
QNT Quant 167.15447160866495
HT Huobi Token 7.82935155981905
FLOW Flow 1.4794075714098018
VET VeChain 0.022835859415336612
FIL Filecoin 5.0477849904337075
HBAR Hedera 0.061313944522773646
MANA Decentraland 0.6256132037754569
FRAX Frax 0.9995757664627505
ICP Internet Computer (DFINITY) 4.935016045950497
EGLD Elrond 53.78654374759491
IMX Immutable X 0.6308515794637338
XTZ Tezos 1.3670560843838389
SAND The Sandbox 0.7549307110020637
CHZ Chiliz 0.18089587388302542

Digital Coin Example

This example provides digital coin feedback (ie Bitcoin). It include popularity, price, symbols, etc.

  • A valid X-RapidAPI-Key is required. Look in code for link to RapidAPI page
  • Read all comments in code for further guidance

Request Digital Coin

RapidAPI page https://rapidapi.com/Coinranking/api/coinranking1/

Begin Rapid API Code

import requests

url = "https://coinranking1.p.rapidapi.com/coins" querystring = {"referenceCurrencyUuid":"yhjMzLPhuIDl","timePeriod":"24h","tiers[0]":"1","orderBy":"marketCap","orderDirection":"desc","limit":"50","offset":"0"} headers = { "X-RapidAPI-Key": "703210b827msh18ebf505c5fabaep1efeabjsn249dcd49ab14", # place your key here "X-RapidAPI-Host": "coinranking1.p.rapidapi.com" }

response = requests.request("GET", url, headers=headers, params=querystring)

End Rapid API Code

json = response.json() # convert response to python json object

Observe data from an API. This is how data transports over the internet in a "JSON" text form

- The JSON "text" is formed in dictionary {} and list [] divisions

- To read the result, Data Scientist of Developer converts JSON into human readable form

- Review the first line, look for the keys -- "status" and "data"

for coin in json["data"]["coins"]: print (f'{coin["symbol"]} {coin["name"]} {coin["price"]}')

organizing coins

Symbol, Name, and price

Formatting Digital Coin example

JSON text transferred from the API in the previous cell was converted to a Python Dictionary called json. The "coins" in the dictionary contain a list of the most relevant data. Look at the code and comments to see how the original text is turned into something understandable. Additionally, there are error check to make sure we are starting the code with the expectation that the API was run correctly.

"""
This cell is dependent on valid run of API above.
- try and except code is making sure "json" was properly run above
- inside second try is code that is used to process Coin API data

Note.  Run this cell repeatedly to format data without re-activating API
"""

try:
    print("JSON data is Python type: " + str(type(json)))
    try:
        # Extracting Coins JSON status, if the API worked
        status = json.get('status')
        print("API status: " + status)
        print()
        
        # Extracting Coins JSON data, data about the coins
        data = json.get('data')
        
        # Procedural abstraction of Print code for coins
        def print_coin(c):
            print(c["symbol"], c["price"])
            print("Icon Url: " + c["iconUrl"])
            print("Rank Url: " + c["coinrankingUrl"])

        # Coins data was observed to be a list
        for coin in data['coins']:
            print_coin(coin)
            print()
            
    except:
        print("Did you insert a valid key in X-RapidAPI-Key of API cell above?")
        print(json)
except:
    print("This cell is dependent on running API call in cell above!")
This cell is dependent on running API call in cell above!

Go deeper into APIs

Web Development vs Jupyter Notebook. A notebook is certainly a great place to start. But, for your end of Trimester project we want you to build the skill to reference and use APIs within your Project. Here are some resources to get you started with this journey.