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': "7dc092b8d8mshcbfaccb5c82b9eap1fe7fdjsna2cb1a33dcb0",
    'x-rapidapi-host': "corona-virus-world-and-india-data.p.rapidapi.com"
}

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

# 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)
<bound method Response.json of <Response [200]>>
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": "7dc092b8d8mshcbfaccb5c82b9eap1fe7fdjsna2cb1a33dcb0",  # place your key here (done)
	"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"

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 19447.476815309095
Icon Url: https://cdn.coinranking.com/bOabBYkcX/bitcoin_btc.svg
Rank Url: https://coinranking.com/coin/Qwsogvtv82FCd+bitcoin-btc

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

AAVE 75.71684610571637
Icon Url: https://cdn.coinranking.com/4bpYKqV4X/AAVE.png
Rank Url: https://coinranking.com/coin/ixgUfzmLR+aave-aave

THETA 1.064434960212497
Icon Url: https://cdn.coinranking.com/HJHg2k9Lf/theta.svg
Rank Url: https://coinranking.com/coin/B42IRxNtoYmwK+thetatoken-theta

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.

Personal API Example

# API i'm using: https://rapidapi.com/kaushalsharma880-GAglnDIvTy/api/programming-memes-images/

import requests
import PIL
from PIL import Image
import urllib.request

url = "https://programming-memes-reddit.p.rapidapi.com/"

headers = {
    "X-RapidAPI-Key": "7dc092b8d8mshcbfaccb5c82b9eap1fe7fdjsna2cb1a33dcb0",
    "X-RapidAPI-Host": "programming-memes-reddit.p.rapidapi.com"
}

response = requests.request("GET", url, headers=headers)
js = response.json()
ind = 0
for r in js:
    if ind > 10:
        break
    urllib.request.urlretrieve(r['link'],"img.png")
    img = Image.open('img.png')
    display(img)
    ind += 1