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': "0b6ef107f7msh5606de624633ceap17521ejsn27566d20ff5b",
    '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') # countries is the key, countries_stat is the value
for country in countries:  # countries is a list
    if country["country_name"] == "Philippines":  # this filters for PI
        for key, value in country.items():  # this finds key, value pairs in country
            print(key, value) # look for each level of json --> look for country that you chose/typed --> once it finds that it enters that dictionary
<bound method Response.json of <Response [200]>>
World Totals
dict_items([('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')])
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 Philippines
cases 3,684,500
deaths 60,182
region 
total_recovered 3,610,658
new_deaths 3
new_cases 205
serious_critical 289
active_cases 13,660
total_cases_per_1m_population 32,835
deaths_per_1m_population 536
total_tests 29,427,586
tests_per_1m_population 262,246

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

response = requests.request("GET", url, headers=headers, params=querystring)
print(response.json)
# End Rapid API Code
json = response.json()  # convert response to python json object
<bound method Response.json of <Response [200]>>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

EOS 1.170722475011415
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. I will be using and API relating to weather, to be able to extract data about astronomy in different cities.

import requests

url = "https://weatherapi-com.p.rapidapi.com/astronomy.json"

city = input("Choose a city")
querystring = {"q":city}

headers = {
	"X-RapidAPI-Key": "0b6ef107f7msh5606de624633ceap17521ejsn27566d20ff5b",
	"X-RapidAPI-Host": "weatherapi-com.p.rapidapi.com"
}

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

print(response.json)

print("Location details")
loc = response.json().get('location')  # turn response to json() so we can extract "location"
for key, value in loc.items():  # this finds key, value pairs in city 
    print(key, ":", value)

print()

# This code looks for the chosen city 
print("Astronomy details")
astro = response.json().get('astronomy') 
#print(astro.items())
for key, value in astro.items():
	for x in value.keys() :
		print(x, ":", value[x])

#astro in astronomy:  # astronomy is a list
    #print(astro)
<bound method Response.json of <Response [200]>>
Location details
name : Escondido
region : California
country : United States of America
lat : 33.12
lon : -117.09
tz_id : America/Los_Angeles
localtime_epoch : 1665391413
localtime : 2022-10-10 1:43

Astronomy details
sunrise : 06:49 AM
sunset : 06:21 PM
moonrise : 07:03 PM
moonset : 07:35 AM
moon_phase : Waxing Gibbous
moon_illumination : 99