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

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

response = requests.request("GET", url, headers=headers, params=querystring)
#print(response.text),code that was here, and prints data but not organized
# 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"]}')
BTC Bitcoin 19019.692601412236
ETH Ethereum 1275.981046778156
USDT Tether USD 1.0008357499300082
USDC USDC 0.9999464730992366
BNB Binance Coin 270.4836507435338
XRP XRP 0.48797208096314443
BUSD Binance USD 1.0002539785611668
ADA Cardano 0.39274012668027775
SOL Solana 31.213285693496978
DOGE Dogecoin 0.060010078988127026
DOT Polkadot 6.172263857680936
MATIC Polygon 0.7924419916033493
DAI Dai 1.0004440794986533
SHIB Shiba Inu 0.000010239546758115
TRX TRON 0.061632878266572676
WETH Wrapped Ether 1281.6760033178323
AVAX Avalanche 15.95525738308197
UNI Uniswap 5.996724894113082
CAKE PancakeSwap 4.513896677401089
OKB OKB 15.532498572789972
ATOM Cosmos 12.240506388874534
LTC Litecoin 51.969430596739514
FTT FTX Token 23.202055081957585
ETC Ethereum Classic 23.789031757050072
XMR Monero 143.86584226761553
XLM Stellar 0.11666428062459974
ALGO Algorand 0.31967020766842275
BTCB Bitcoin BEP2 19072.20658350895
BCH Bitcoin Cash 110.95810428752968
CRO Cronos 0.10233727630522153
NEAR NEAR Protocol 3.1854587896924587
LUNC Terra Classic 0.00027929480331639
ENS EnergySwap 16.81105186368912
WEMIX WEMIX TOKEN 1.6476465530337432
FLOW Flow 1.58774065613345
QNT Quant 157.11231112437548
FIL Filecoin 5.13982171736081
VET VeChain 0.022775607381817217
HBAR Hedera 0.06150616441107996
MANA Decentraland 0.6525914456119929
ICP Internet Computer (DFINITY) 5.255600495523902
IMX Immutable X 0.6856456397537142
FRAX Frax 1.0002281172878007
EGLD Elrond 55.190523215170685
XTZ Tezos 1.3428065060439651
SAND The Sandbox 0.7802226434657944
CHZ Chiliz 0.19150550764855237
HT Huobi Token 5.301888123719538
LDO Lido DAO Token 1.3255904735336002
EOS EOS 1.043718367026238

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

BIT 0.4432458940699627
Icon Url: https://cdn.coinranking.com/0ClFW1IpO/bitdao.png
Rank Url: https://coinranking.com/coin/N2IgQ9Xme+bitdao-bit

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

HT 5.1421816446765
Icon Url: https://cdn.coinranking.com/ryFpQe0c7/ht.svg
Rank Url: https://coinranking.com/coin/DXwP4wF9ksbBO+huobitoken-ht

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

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.