Python RapidAPI
APIs can be found all over the internet. A great consolidator of many APIs is RapidAPI. In this blog we will use a site to consolidates API stats. Learning a few lines of code and you can start extracting lots of data from the internet via APIs.
- Python, RapidAPI Terms
- Covid19 RapidAPI Example
- Digital Coin Example
- Formatting Digital Coin example
- Go deeper into APIs
- Hacks
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
# 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
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!")
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.
- In the Nighthawk Coders APCSP you can find an Overview and Examples using APIs:APCSP APIs menu- Using Covid RapidAPI
- JavaScript frontend API code in APCSP Fastpages GitHub repo: https://github.com/nighthawkcoders/APCSP/blob/master/_posts/2022-07-10-PBL-rapidapi.md
- Making a Jokes API (this will next API tech talk)
- Frontend. JavaScript frontend code in APCSP fastpages GitHub repo: https://github.com/nighthawkcoders/APCSP/blob/master/_posts/2022-07-10-PBL-jokes.md
- Backend Endpoints. Python code that allows Frontend access: https://github.com/nighthawkcoders/flask_portfolio/blob/main/api.py
- Backend Jokes Management. Python code that support Create, Read, Update, Delete (CRUD): https://github.com/nighthawkcoders/flask_portfolio/blob/main/model_jokes.py
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)