Jobs API Implementation Using Flask¶
This notebook implements a simple jobs API using Flask and Python for data access and demonstration purposes.
JOBS API Implementation Using FLASK¶
Estimated time needed: 45 to 60 minutes
Objectives¶
You will be executing this code so that the client application Collecting Jobs API will be accessing this code executing on the server
In [1]:
!pip install flask
Requirement already satisfied: flask in e:\anaconda\envs\cvpr\lib\site-packages (2.1.2)
WARNING: Ignoring invalid distribution -umpy (e:\anaconda\envs\cvpr\lib\site-packages) WARNING: Ignoring invalid distribution -umpy (e:\anaconda\envs\cvpr\lib\site-packages) WARNING: Ignoring invalid distribution -umpy (e:\anaconda\envs\cvpr\lib\site-packages) WARNING: Ignoring invalid distribution -umpy (e:\anaconda\envs\cvpr\lib\site-packages)
Requirement already satisfied: Werkzeug>=2.0 in e:\anaconda\envs\cvpr\lib\site-packages (from flask) (2.1.1) Requirement already satisfied: Jinja2>=3.0 in e:\anaconda\envs\cvpr\lib\site-packages (from flask) (3.1.1) Requirement already satisfied: click>=8.0 in e:\anaconda\envs\cvpr\lib\site-packages (from flask) (8.1.2) Requirement already satisfied: importlib-metadata>=3.6.0 in e:\anaconda\envs\cvpr\lib\site-packages (from flask) (4.11.3) Requirement already satisfied: itsdangerous>=2.0 in e:\anaconda\envs\cvpr\lib\site-packages (from flask) (2.1.2) Requirement already satisfied: colorama in e:\anaconda\envs\cvpr\lib\site-packages (from click>=8.0->flask) (0.4.4) Requirement already satisfied: zipp>=0.5 in e:\anaconda\envs\cvpr\lib\site-packages (from importlib-metadata>=3.6.0->flask) (3.8.0) Requirement already satisfied: MarkupSafe>=2.0 in e:\anaconda\envs\cvpr\lib\site-packages (from Jinja2>=3.0->flask) (2.1.1)
Dataset Used in this Project¶
The dataset used in this project comes from the following source: https://www.kaggle.com/promptcloud/jobs-on-naukricom under the under a Public Domain license.
Note: We are using a modified subset of that dataset, so to follow the instructions successfully please use the dataset provided, rather than the dataset from the original source.
The original dataset is a csv. We have converted the csv to json as per the requirement of the project.
In [2]:
# !wget --no-check-certificate https://cf-courses-data.s3.us.cloud-object-storage.appdomain.cloud/IBM-DA0321EN-SkillsNetwork/labs/module%201/Accessing%20Data%20Using%20APIs/jobs.json
In [ ]:
import flask
from flask import request, jsonify
import requests
import re
def get_data(key,value,current):
results = list()
for rec in current:
if rec[key].find(value) != -1:
results.append(rec)
return results
app = flask.Flask(__name__)
import json
data = None
with open('jobs.json',encoding='utf-8') as f:
# returns JSON object as
# a dictionary
data = json.load(f)
@app.route('/', methods=['GET'])
def home():
return '''<h1>Welcome to flask JOB search API</p>'''
@app.route('/data/all', methods=['GET'])
def api_all():
return jsonify(data)
@app.route('/data', methods=['GET'])
def api_id():
# Check if keys such as Job Title,KeySkills, Role Category and others are provided as part of the URL.
# Assign the keys to the corresponding variables..
# If no key is provided, display an error in the browser.
res = None
for req in request.args:
if req == 'Job Title':
key = 'Job Title'
elif req == 'Job Experience Required' :
key='Job Experience Required'
elif req == 'Key Skills' :
key='Key Skills'
elif req == 'Role Category' :
key='Role Category'
elif req == 'Location' :
key='Location'
elif req == 'Functional Area' :
key='Functional Area'
elif req == 'Industry' :
key='Industry'
elif req == 'Role' :
key='Role'
elif req=="id":
key="id"
else:
pass
value = request.args[key]
if (res==None):
res = get_data(key,value,data)
else:
res = get_data(key,value,res)
# Use the jsonify function from Flask to convert our list of
# Python dictionaries to the JSON format.
return jsonify(res)
app.run()
* Serving Flask app '__main__' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 127.0.0.1 - - [01/Jul/2022 01:49:16] "GET /data?Key+Skills=Python HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:16] "GET /data?Location=Washington+DC HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:20] "GET /data?Location=Los+Angeles HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:20] "GET /data?Location=New+York HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:20] "GET /data?Location=San+Francisco HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:20] "GET /data?Location=Washington+DC HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:20] "GET /data?Location=Seattle HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:21] "GET /data?Location=Austin HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:21] "GET /data?Location=Detroit HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:22] "GET /data?Key+Skills=C HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:23] "GET /data?Key+Skills=C%23 HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:23] "GET /data?Key+Skills=C%2B%2B HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:23] "GET /data?Key+Skills=Java HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:23] "GET /data?Key+Skills=JavaScript HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:24] "GET /data?Key+Skills=Python HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:24] "GET /data?Key+Skills=Scala HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:24] "GET /data?Key+Skills=Oracle HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:24] "GET /data?Key+Skills=SQL+Server HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:24] "GET /data?Key+Skills=MySQL+Server HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:24] "GET /data?Key+Skills=PostgreSQL HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:49:24] "GET /data?Key+Skills=MongoDB HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:51:02] "GET /data?Key+Skills=C HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:51:02] "GET /data?Key+Skills=C%23 HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:51:02] "GET /data?Key+Skills=C%2B%2B HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:51:03] "GET /data?Key+Skills=Java HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:51:03] "GET /data?Key+Skills=JavaScript HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:51:03] "GET /data?Key+Skills=Python HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:51:03] "GET /data?Key+Skills=Scala HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:51:03] "GET /data?Key+Skills=Oracle HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:51:03] "GET /data?Key+Skills=SQL+Server HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:51:03] "GET /data?Key+Skills=MySQL+Server HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:51:03] "GET /data?Key+Skills=PostgreSQL HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:51:03] "GET /data?Key+Skills=MongoDB HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:38] "GET /data?Key+Skills=Python HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:38] "GET /data?Location=Washington+DC HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:38] "GET /data?Location=Los+Angeles HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:39] "GET /data?Location=New+York HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:39] "GET /data?Location=San+Francisco HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:39] "GET /data?Location=Washington+DC HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:39] "GET /data?Location=Seattle HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:39] "GET /data?Location=Austin HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:39] "GET /data?Location=Detroit HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:40] "GET /data?Key+Skills=C HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:40] "GET /data?Key+Skills=C%23 HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:40] "GET /data?Key+Skills=C%2B%2B HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:40] "GET /data?Key+Skills=Java HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:41] "GET /data?Key+Skills=JavaScript HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:41] "GET /data?Key+Skills=Python HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:41] "GET /data?Key+Skills=Scala HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:41] "GET /data?Key+Skills=Oracle HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:41] "GET /data?Key+Skills=SQL+Server HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:41] "GET /data?Key+Skills=MySQL+Server HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:41] "GET /data?Key+Skills=PostgreSQL HTTP/1.1" 200 - 127.0.0.1 - - [01/Jul/2022 01:55:41] "GET /data?Key+Skills=MongoDB HTTP/1.1" 200 -