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': "686830ba27msh513db9752c312c4p1115d7jsn310f307263ee",
    '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

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
# 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": "686830ba27msh513db9752c312c4p1115d7jsn310f307263ee",  # place your key here
	"X-RapidAPI-Host": "coinranking1.p.rapidapi.com"
}

response = requests.request("GET", url, headers=headers, params=querystring)
print(response.text)
# 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["name"]} {coin ["marketCap"]} {[price]})
  File "/var/folders/2p/fnt1087x1cb9j8lw30wbtt0w0000gq/T/ipykernel_11014/1454277042.py", line 24
    print(f' {coin["name"]} {coin ["marketCap"]} {[price]})
                                                           ^
SyntaxError: EOL while scanning string literal

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!")
JSON data is Python type: <class 'dict'>
API status: success

BTC 20043.550686742812
Icon Url: https://cdn.coinranking.com/bOabBYkcX/bitcoin_btc.svg
Rank Url: https://coinranking.com/coin/Qwsogvtv82FCd+bitcoin-btc

ETH 1362.9253643080083
Icon Url: https://cdn.coinranking.com/rk4RKHOuW/eth.svg
Rank Url: https://coinranking.com/coin/razxDUgYGNAdQ+ethereum-eth

USDT 1.0001715321495874
Icon Url: https://cdn.coinranking.com/mgHqwlCLj/usdt.svg
Rank Url: https://coinranking.com/coin/HIVsRcGKkPFtW+tetherusd-usdt

USDC 1.0003473267455394
Icon Url: https://cdn.coinranking.com/jkDf8sQbY/usdc.svg
Rank Url: https://coinranking.com/coin/aKzUVe4Hh_CON+usdc-usdc

BNB 288.66628530690264
Icon Url: https://cdn.coinranking.com/B1N19L_dZ/bnb.svg
Rank Url: https://coinranking.com/coin/WcwrkfNI4FUAe+binancecoin-bnb

XRP 0.5007450761516665
Icon Url: https://cdn.coinranking.com/B1oPuTyfX/xrp.svg
Rank Url: https://coinranking.com/coin/-l8Mn2pVlRs-p+xrp-xrp

BUSD 1.0000123532969556
Icon Url: https://cdn.coinranking.com/6SJHRfClq/busd.svg
Rank Url: https://coinranking.com/coin/vSo2fu9iE1s0Y+binanceusd-busd

ADA 0.42965822273410903
Icon Url: https://cdn.coinranking.com/ryY28nXhW/ada.svg
Rank Url: https://coinranking.com/coin/qzawljRxB5bYu+cardano-ada

SOL 33.75573896585963
Icon Url: https://cdn.coinranking.com/yvUG4Qex5/solana.svg
Rank Url: https://coinranking.com/coin/zNZHO_Sjf+solana-sol

DOGE 0.06402262465188333
Icon Url: https://cdn.coinranking.com/H1arXIuOZ/doge.svg
Rank Url: https://coinranking.com/coin/a91GCGd_u96cF+dogecoin-doge

MATIC 0.8397064959901155
Icon Url: https://cdn.coinranking.com/WulYRq14o/polygon.png
Rank Url: https://coinranking.com/coin/uW2tk-ILY0ii+polygon-matic

DOT 6.3728697554070655
Icon Url: https://cdn.coinranking.com/RsljYqnbu/polkadot.svg
Rank Url: https://coinranking.com/coin/25W7FG7om+polkadot-dot

SHIB 0.000011283672136356
Icon Url: https://cdn.coinranking.com/D69LfI-tm/shib.png
Rank Url: https://coinranking.com/coin/xz24e0BjL+shibainu-shib

DAI 0.9999569400125321
Icon Url: https://cdn.coinranking.com/mAZ_7LwOE/mutli-collateral-dai.svg
Rank Url: https://coinranking.com/coin/MoTuySvg7+dai-dai

TRX 0.06256176177306583
Icon Url: https://cdn.coinranking.com/behejNqQs/trx.svg
Rank Url: https://coinranking.com/coin/qUhEFk1I61atv+tron-trx

WETH 1362.397502144277
Icon Url: https://cdn.coinranking.com/KIviQyZlt/weth.svg
Rank Url: https://coinranking.com/coin/Mtfb0obXVh59u+wrappedether-weth

UNI 6.971980114788267
Icon Url: https://cdn.coinranking.com/1heSvUgtl/uniswap-v2.svg?size=48x48
Rank Url: https://coinranking.com/coin/_H5FVG9iW+uniswap-uni

AVAX 17.1362582942352
Icon Url: https://cdn.coinranking.com/S0C6Cw2-w/avax-avalanche.png
Rank Url: https://coinranking.com/coin/dvUj0CzDZ+avalanche-avax

WBTC 20038.435620622542
Icon Url: https://cdn.coinranking.com/o3-8cvCHu/wbtc[1].svg
Rank Url: https://coinranking.com/coin/x4WXHge-vvFY+wrappedbtc-wbtc

ATOM 13.114687648013726
Icon Url: https://cdn.coinranking.com/HJzHboruM/atom.svg
Rank Url: https://coinranking.com/coin/Knsels4_Ol-Ny+cosmos-atom

OKB 15.64915348672489
Icon Url: https://cdn.coinranking.com/xcZdYtX6E/okx.png
Rank Url: https://coinranking.com/coin/PDKcptVnzJTmN+okb-okb

LTC 53.80516063162182
Icon Url: https://cdn.coinranking.com/BUvPxmc9o/ltcnew.svg
Rank Url: https://coinranking.com/coin/D7B1x_ks7WhV5+litecoin-ltc

FTT 24.665477602034645
Icon Url: https://cdn.coinranking.com/WyBm4_EzM/ftx-exchange.svg
Rank Url: https://coinranking.com/coin/NfeOYfNcl+ftxtoken-ftt

ETC 28.1042534488605
Icon Url: https://cdn.coinranking.com/rJfyor__W/etc.svg
Rank Url: https://coinranking.com/coin/hnfQfsYfeIGUQ+ethereumclassic-etc

XMR 148.74687260845832
Icon Url: https://cdn.coinranking.com/Syz-oSd_Z/xmr.svg
Rank Url: https://coinranking.com/coin/3mVx2FX_iJFp5+monero-xmr

ALGO 0.3511650422184013
Icon Url: https://cdn.coinranking.com/lzbmCkUGB/algo.svg
Rank Url: https://coinranking.com/coin/TpHE2IShQw-sJ+algorand-algo

XLM 0.12046748494413159
Icon Url: https://cdn.coinranking.com/78CxK1xsp/Stellar_symbol_black_RGB.svg
Rank Url: https://coinranking.com/coin/f3iaFeCKEmkaZ+stellar-xlm

BCH 118.93218340005522
Icon Url: https://cdn.coinranking.com/By8ziihX7/bch.svg
Rank Url: https://coinranking.com/coin/ZlZpzOJo43mIo+bitcoincash-bch

BTCB 20056.05558921233
Icon Url: https://cdn.coinranking.com/Swr_SeZio/4023.png
Rank Url: https://coinranking.com/coin/9_jH48RBW+bitcoinbep2-btcb

NEAR 3.6313332745364115
Icon Url: https://cdn.coinranking.com/Cth83dCnl/near.png
Rank Url: https://coinranking.com/coin/DCrsaMv68+nearprotocol-near

CRO 0.1097271300620471
Icon Url: https://cdn.coinranking.com/2o91jm73M/cro.svg
Rank Url: https://coinranking.com/coin/65PHZTpmE55b+cronos-cro

LUNC 0.000290403608018928
Icon Url: https://cdn.coinranking.com/F-PJdF8Um/LUNA.svg
Rank Url: https://coinranking.com/coin/AaQUAs2Mc+terraclassic-lunc

WEMIX 1.8088383642082868
Icon Url: https://cdn.coinranking.com/1N84MQsoO/7548.png
Rank Url: https://coinranking.com/coin/08CsQa-Ov+wemixtoken-wemix

FLOW 1.7066734952451308
Icon Url: https://cdn.coinranking.com/xh8X8QBss/flow.png
Rank Url: https://coinranking.com/coin/QQ0NCmjVq+flow-flow

ENS 17.216468455023016
Icon Url: https://cdn.coinranking.com/fmYxEUV5a/cropped-logo37-Converted-01-192x192.png
Rank Url: https://coinranking.com/coin/SbWqqTui-+energyswap-ens

FIL 5.545448462680433
Icon Url: https://cdn.coinranking.com/vUmvv-IQA/FIL3-filecoin.svg?size=48x48
Rank Url: https://coinranking.com/coin/ymQub4fuB+filecoin-fil

ICP 6.014622469643834
Icon Url: https://cdn.coinranking.com/1uJ_RVrmC/dfinity-icp.png
Rank Url: https://coinranking.com/coin/aMNLwaUbY+internetcomputerdfinity-icp

VET 0.02355157781586008
Icon Url: https://cdn.coinranking.com/B1_TDu9Dm/VEN.svg
Rank Url: https://coinranking.com/coin/FEbS54wxo4oIl+vechain-vet

CAKE 4.679829633557056
Icon Url: https://cdn.coinranking.com/aRtgdw7bQ/pancakeswap-cake-logo.png
Rank Url: https://coinranking.com/coin/ncYFcP709+pancakeswap-cake

MANA 0.700177411016985
Icon Url: https://cdn.coinranking.com/ph_svUzXs/decentraland(1).svg
Rank Url: https://coinranking.com/coin/tEf7-dnwV3BXS+decentraland-mana

IMX 0.764355126097645
Icon Url: https://cdn.coinranking.com/naRGT2Y_X/10603.png
Rank Url: https://coinranking.com/coin/Z96jIvLU7+immutablex-imx

HBAR 0.058052505411859745
Icon Url: https://cdn.coinranking.com/dSCnSLilQ/hedera.svg
Rank Url: https://coinranking.com/coin/jad286TjB+hedera-hbar

FRAX 1.0014307404744005
Icon Url: https://cdn.coinranking.com/BpVNCX-NM/frax.png
Rank Url: https://coinranking.com/coin/KfWtaeV1W+frax-frax

QNT 138.35634673022093
Icon Url: https://cdn.coinranking.com/a-i9Dl392/quant.png
Rank Url: https://coinranking.com/coin/bauj_21eYVwso+quant-qnt

EGLD 55.29726372307632
Icon Url: https://cdn.coinranking.com/X62ruAuZQ/Elrond.svg
Rank Url: https://coinranking.com/coin/omwkOTglq+elrond-egld

XTZ 1.4303529448198662
Icon Url: https://cdn.coinranking.com/HkLUdilQ7/xtz.svg
Rank Url: https://coinranking.com/coin/fsIbGOEJWbzxG+tezos-xtz

CHZ 0.21577787378252844
Icon Url: https://cdn.coinranking.com/gTsOlSnwR/4066.png
Rank Url: https://coinranking.com/coin/GSCt2y6YSgO26+chiliz-chz

SAND 0.8493460426374936
Icon Url: https://cdn.coinranking.com/kd_vwOcnI/sandbox.png
Rank Url: https://coinranking.com/coin/pxtKbG5rg+thesandbox-sand

LDO 1.509867291755627
Icon Url: https://cdn.coinranking.com/Wp6LFY6ZZ/8000.png
Rank Url: https://coinranking.com/coin/Pe93bIOD2+lidodaotoken-ldo

EOS 1.1704482714528321
Icon Url: https://cdn.coinranking.com/PqOYrWSje/eos2.svg
Rank Url: https://coinranking.com/coin/iAzbfXiBBKkR6+eos-eos

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.

Hacks

Find and use an API as part of your project. An API and a little coding logic will be a big step toward getting meaningful data for a project. There are many API providers, find one that might work for your project to complete this hack. When picking an API you are looking for something that will work with either JavaScript Fetch or Python Request. Here are some samples, these are not qualified in any way.

Show API and format results in either Web Page or Jupyter Notebook. Ultimately, I will expect that we do APIs in backend (Python/Flask). However, for this Hack you can pick your preference. We will discuss pros and cons in next API tech talk.