Computer Science
Project
Subject: Personal
assistant “Jarvis”
Team Member:
i) Shivam
ii) Udit
iii) Divya
Index
Introduction
Index
Certificate
Software and Hardware
Requirement
Source code in python
Output Screen
Explanation
Advantage
MySQL Table
Bibliography
Certificate
This is to certify that Udit Verma, the student of Class
XII-A has successfully completed the research on the
project “Jarvis: The personal assistant” of subject
‘Computer Science’ under the guidance of “Diksha
Khurrana” subject teacher of Computer science during
year 2022-23.
Teacher’s signature Principal signature
________________ _______________
Hardware and Software
Requirement
Hardware requirement for our project is:
i. I3 3rd generation
ii. Ram 8gb
iii. Microphone
Software requirement for our project:
i. Window 10 and above
ii. Internet connection when assistant is
taking command
Source Code
import subprocess
import sys
import wolframalpha
import pyttsx3
import tkinter
import json
import random
import operator
import speech_recognition as sr
import datetime
import wikipedia
import webbrowser
import os
import winshell
import pyjokes
import feedparser
import smtplib
import ctypes
import time
import requests
import shutil
from twilio.rest import Client
from clint.textui import progress
from ecapture import ecapture as ec
from bs4 import BeautifulSoup
import win32com.client as wincl
from urllib.request import urlopen
from PIL import Image
import PIL.Image
from Jarvis import JarvisAssistant
import re
import os
import random
import pprint
import datetime
import requests
import sys
import urllib.parse
import pyjokes
import time
import pyautogui
import pywhatkit
import wolframalpha
from PIL import Image
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtCore import QTimer, QTime, QDate, Qt
from PyQt5.QtGui import QMovie
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.uic import loadUiType
#from Jarvis.features.gui import Ui_MainWindow
#from Jarvis.config import config
from trial1ui import Ui_MainWindow
from signup_page import SignUp
import credentials as cr
from py_mainform import mainform
from tkinter import *
from tkinter import ttk, messagebox
import pymysql
import os
class login_page:
def __init__(self, root):
self.window = root
self.window.title("Log In PySeek")
# Set the window size
# Here 0,0 represents the starting point of the window
self.window.geometry("1280x800+0+0")
self.window.config(bg = "white")
#============================================================================
#==============================DESIGN
PART===================================
#============================================================================
self.frame1 = Frame(self.window, bg="yellow")
self.frame1.place(x=0, y=0, width=450, relheight = 1)
label1 = Label(self.frame1, text= "Py", font=("times new roman", 40,
"bold"), bg="yellow", fg="red").place(x=100,y=300)
label2 = Label(self.frame1, text= "Seek", font=("times new roman", 40,
"bold"), bg="yellow", fg="RoyalBlue1").place(x=162,y=300)
label3 = Label(self.frame1, text= "It's all about Python",
font=("times new roman", 13, "bold"), bg="yellow",
fg="brown4").place(x=100,y=360)
#=============Entry Field & Buttons============
self.frame2 = Frame(self.window, bg = "gray95")
self.frame2.place(x=450,y=0,relwidth=1, relheight=1)
self.frame3 = Frame(self.frame2, bg="white")
self.frame3.place(x=140,y=150,width=500,height=450)
self.email_label = Label(self.frame3,text="Email Address",
font=("helvetica",20,"bold"),bg="white", fg="gray").place(x=50,y=40)
self.email_entry = Entry(self.frame3,font=("times new
roman",15,"bold"),bg="white",fg="gray")
self.email_entry.place(x=50, y=80, width=300)
self.password_label = Label(self.frame3,text="Password",
font=("helvetica",20,"bold"),bg="white", fg="gray").place(x=50,y=120)
self.password_entry = Entry(self.frame3,font=("times new
roman",15,"bold"),bg="white",fg="gray",show="*")
self.password_entry.place(x=50, y=160, width=300)
#================Buttons===================
self.login_button = Button(self.frame3,text="Log
In",command=self.login_func,font=("times new roman",15,
"bold"),bd=0,cursor="hand2",bg="blue",fg="white").place(x=50,y=200,width=300)
self.forgotten_pass = Button(self.frame3,text="Forgotten
password?",command=self.forgot_func,font=("times new roman",10,
"bold"),bd=0,cursor="hand2",bg="white",fg="blue").place(x=125,y=260,width=150)
self.create_button = Button(self.frame3,text="Create New
Account",command=self.redirect_window,font=("times new roman",18,
"bold"),bd=0,cursor="hand2",bg="green2",fg="white").place(x=80,y=320,width=250
)
def login_func(self):
if self.email_entry.get()=="" or self.password_entry.get()=="":
messagebox.showerror("Error!","All fields are
required",parent=self.window)
else:
try:
connection=pymysql.connect(host=cr.host, user=cr.user,
password=cr.password, database=cr.database)
cur = connection.cursor()
cur.execute("select * from student_register where email=%s and
password=%s",(self.email_entry.get(),self.password_entry.get()))
row=cur.fetchone()
if row == None:
messagebox.showerror("Error!","Invalid USERNAME &
PASSWORD",parent=self.window)
else:
obj = JarvisAssistant()
# ================================ MEMORY
==============================================================================
=============================
GREETINGS = ["hello jarvis", "jarvis", "wake up jarvis",
"you there jarvis", "time to work jarvis", "hey jarvis",
"ok jarvis", "are you there"]
GREETINGS_RES = ["always there for you sir", "i am ready
sir",
"your wish my command", "how can i help
you sir?", "i am online and ready sir"]
EMAIL_DIC = {
'myself': 'freegameclaim@gmail.com',
'my official email': 'freegameclaim@gmail.com',
'my second email': 'freegameclaim@gmail.com',
'my official mail': 'freegameclaim@gmail.com',
'my second mail': 'freegameclaim@gmail.com'
CALENDAR_STRS = ["what do i have", "do i have plans", "am
i busy"]
#
==============================================================================
=========================================================================
def speak(text):
obj.tts(text)
app_id = "GU4J9A-2X9G3JXJJK"
def computational_intelligence(question):
try:
client = wolframalpha.Client(app_id)
answer = client.command(question)
answer = next(answer.results).text
print(answer)
return answer
except:
speak("Sorry sir I couldn't fetch your question's
answer. Please try again ")
return None
def startup():
speak("Initializing Jarvis")
speak("Starting all systems applications")
hour = int(datetime.datetime.now().hour)
if hour>=0 and hour<=12:
speak("Good Morning")
elif hour>12 and hour<18:
speak("Good afternoon")
else:
speak("Good evening")
c_time = obj.tell_time()
speak(f"Currently it is {c_time}")
speak("I am Jarvis. Online and ready sir. Please tell
me how may I help you")
def wishMe():
hour = int(datetime.datetime.now().hour)
if hour>= 0 and hour<12:
speak("Good Morning Sir and madam !")
elif hour>= 12 and hour<18:
speak("Good Afternoon Sir and madam !")
else:
speak("Good Evening Sir and madam !")
assname =("mansshiva")
speak("I am your Assistant")
speak(assname)
#def wish():
#hour = int(datetime.datetime.now().hour)
#if hour>=0 and hour<=12:
#speak("Good Morning")
# elif hour>12 and hour<18:
# speak("Good afternoon")
#else:
#speak("Good evening")
#c_time = obj.tell_time()
#speak(f"Currently it is {c_time}")
#speak("I am Jarvis. Online and ready sir. Please
tell me how may I help you")#
# if __name__ == "__main__":
class MainThread(QThread):
def __init__(self):
super(MainThread, self).__init__()
def run(self):
self.TaskExecution()
def TaskExecution(self):
startup()
while True:
command = obj.mic_input()
if re.search('date', command):
date = obj.tell_me_date()
print(date)
speak(date)
elif "time" in command:
time_c = obj.tell_time()
print(time_c)
speak(f"Sir the time is {time_c}")
elif re.search('launch', command):
dict_app = {
'chrome': 'C:/Program
Files/Google/Chrome/Application/chrome'
app = command.split(' ', 1)[1]
path = dict_app.get(app)
if path is None:
speak('Application path not found')
print('Application path not found')
else:
speak('Launching: ' + app + 'for you
sir!')
obj.launch_any_app(path_of_app=path)
elif command in GREETINGS:
speak(random.choice(GREETINGS_RES))
elif re.search('open', command):
domain = command.split(' ')[-1]
open_result = obj.website_opener(domain)
speak(f'Alright sir !! Opening {domain}')
print(open_result)
elif re.search('weather', command):
city = command.split(' ')[-1]
weather_res = obj.weather(city=city)
print(weather_res)
speak(weather_res)
elif re.search('tell me about', command):
topic = command.split(' ')[-1]
if topic:
wiki_res = obj.tell_me(topic)
print(wiki_res)
speak(wiki_res)
else:
speak(
"Sorry sir. I couldn't load your
command from my database. Please try again")
elif "buzzing" in command or "news" in command
or "headlines" in command:
news_res = obj.news()
speak('Source: The Times Of India')
speak('Todays Headlines are..')
for index, articles in
enumerate(news_res):
pprint.pprint(articles['title'])
speak(articles['title'])
if index == len(news_res)-2:
break
speak('These were the top headlines, Have
a nice day Sir!!..')
elif 'search google for' in command:
obj.search_anything_google(command)
elif "play music" in command or "hit some
music" in command:
music_dir = "F://Songs//Imagine_Dragons"
songs = os.listdir(music_dir)
for song in songs:
os.startfile(os.path.join(music_dir,
song))
elif 'youtube' in command:
video = command.split(' ')[1]
speak(f"Okay sir, playing {video} on
youtube")
pywhatkit.playonyt(video)
elif "calculate" in command:
question = command
answer =
computational_intelligence(question)
speak(answer)
elif "what is" in command or "who is" in
command:
question = command
answer =
computational_intelligence(question)
speak(answer)
#elif "what do i have" in command or "do i
have plans" or "am i busy" in command:
# obj.google_calendar_events(command)
if "make a note" in command or "write this
down" in command or "remember this" in command:
speak("What would you like me to write
down?")
note_text = obj.mic_input()
obj.take_note(note_text)
speak("I've made a note of that")
elif "close the note" in command or "close
notepad" in command:
speak("Okay sir, closing notepad")
os.system("taskkill /f /im notepad++.exe")
if "joke" in command:
joke = pyjokes.get_joke()
print(joke)
speak(joke)
elif "system" in command:
sys_info = obj.system_info()
print(sys_info)
speak(sys_info)
elif "where is" in command:
place = command.split('where is ', 1)[1]
current_loc, target_loc, distance =
obj.location(place)
city = target_loc.get('city', '')
state = target_loc.get('state', '')
country = target_loc.get('country', '')
time.sleep(1)
try:
if city:
res = f"{place} is in {state}
state and country {country}. It is {distance} km away from your current
location"
print(res)
speak(res)
else:
res = f"{state} is a state in
{country}. It is {distance} km away from your current location"
print(res)
speak(res)
except:
res = "Sorry sir, I couldn't get the
co-ordinates of the location you requested. Please try again"
speak(res)
elif "ip address" in command:
ip =
requests.get('https://api.ipify.org').text
print(ip)
speak(f"Your ip address is {ip}")
elif "switch the window" in command or "switch
window" in command:
speak("Okay sir, Switching the window")
pyautogui.keyDown("alt")
pyautogui.press("tab")
time.sleep(1)
pyautogui.keyUp("alt")
elif "where i am" in command or "current
location" in command or "where am i" in command:
try:
city, state, country =
obj.my_location()
print(city, state, country)
speak(
f"You are currently in {city} city
which is in {state} state and country {country}")
except Exception as e:
speak(
"Sorry sir, I coundn't fetch your
current location. Please try again")
elif "take screenshot" in command or "take a
screenshot" in command or "capture the screen" in command:
speak("By what name do you want to save
the screenshot?")
name = obj.mic_input()
speak("Alright sir, taking the
screenshot")
img = pyautogui.screenshot()
name = f"{name}.png"
img.save(name)
speak("The screenshot has been succesfully
captured")
elif "show me the screenshot" in command:
try:
img =
PIL.Image.open('D://JARVIS//JARVIS_2.0//' + name)
img.show(img)
speak("Here it is sir")
time.sleep(2)
except IOError:
speak("Sorry sir, I am unable to
display the screenshot")
elif "hide all files" in command or "hide this
folder" in command:
os.system("attrib +h /s /d")
speak("Sir, all the files in this folder
are now hidden")
elif "visible" in command or "make files
visible" in command:
os.system("attrib -h /s /d")
speak("Sir, all the files in this folder
are now visible to everyone. I hope you are taking this decision in your own
peace")
# if "calculate" in command or "what is" in
command:
# command = command
# answer =
computational_intelligence(command)
# speak(answer)
elif "don't listen" in command or "stop
listening" in command:
speak("for how much time you want to stop
manshiva from listening commands")
a = int(command())
time.sleep(a)
print(a)
elif "manshiva" in command:
wishMe()
speak("manshiva in your service Mister")
elif "what's your name" in command or "What is
your name" in command:
speak("My friends call me")
speak("manshiva")
print("My friends call me", "manshiva")
elif "who made you" in command or "who created
you" in command:
speak("I have been created by love .")
elif "who i am" in command:
speak("If you talk then definitely your
human you love.")
elif "why you came to world" in command:
speak("to remembere my love")
elif "who are you" in command:
speak("I am your virtual assistant created
by love")
elif 'reason for you' in command:
speak("I was created as a Minor project by
Mister Shivam ,Udit and Divya ")
elif 'change background' in command:
ctypes.windll.user32.SystemParametersInfoW(20,
0,
"Location of wallpaper",
0)
speak("Background changed successfully")
elif "Good Morning" in command:
speak("A warm" +command)
speak("How are you Mister")
speak("manshiva")
# most asked question from google Assistant
elif "will you be my gf" in command or "will
you be my bf" in command:
speak("I'm not sure about, may be you
should give me some time")
elif "how are you" in command:
speak("I'm fine, glad you me that")
elif "i love you" in command:
speak("i know you love only her that is
infinity ")
#new fn addition
elif "goodbye" in command or "offline" in
command or "bye" in command:
speak("Alright sir, going offline. It was
nice working with you")
sys.exit()
startExecution = MainThread()
class Main(QMainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.start.clicked.connect(self.startTask)
self.ui.exit.clicked.connect(self.close)
def __del__(self):
sys.stdout = sys.__stdout__
# def run(self):
# self.TaskExection
def startTask(self):
self.ui.movie =
QtGui.QMovie("C://Users//prachi//Desktop//output folder//Comp-1_1.gif")
self.ui.label.setMovie(self.ui.movie)
self.ui.movie.start()
startExecution.start()
app = QApplication(sys.argv)
jarvis = Main()
jarvis.show()
exit(app.exec_())
except Exception as e:
messagebox.showerror("Error!",f"Error due to
{str(e)}",parent=self.window)
def forgot_func(self):
if self.email_entry.get()=="":
messagebox.showerror("Error!", "Please enter your Email
Id",parent=self.window)
else:
try:
connection = pymysql.connect(host=cr.host, user=cr.user,
password=cr.password, database=cr.database)
cur = connection.cursor()
cur.execute("select * from student_register where email=%s",
self.email_entry.get())
row=cur.fetchone()
if row == None:
messagebox.showerror("Error!", "Email Id doesn't exists")
else:
connection.close()
#=========================SECOND
WINDOW===============================
#------------Toplevel:create a window top of another
window-----------
#------------focus_force:Helps to to focus on the current
window------
#-----Grab:Helps to grab the current window until user
ungrab it------
self.root=Toplevel()
self.root.title("Forget Password?")
self.root.geometry("400x440+450+200")
self.root.config(bg="white")
self.root.focus_force()
self.root.grab_set()
title3 = Label(self.root,text="Change your
password",font=("times new roman",20,"bold"),bg="white").place(x=10,y=10)
title4 = Label(self.root,text="It's quick and
easy",font=("times new roman",12),bg="white").place(x=10,y=45)
title5 = Label(self.root, text="Select your question",
font=("times new roman", 15, "bold"), bg="white").place(x=10,y=85)
self.sec_ques = ttk.Combobox(self.root,font=("times new
roman",13),state='readonly',justify=CENTER)
self.sec_ques['values'] = ("Select","What's your pet
name?","Your first teacher name","Your birthplace", "Your favorite movie")
self.sec_ques.place(x=10,y=120, width=270)
self.sec_ques.current(0)
title6 = Label(self.root, text="Answer", font=("times new
roman", 15, "bold"), bg="white").place(x=10,y=160)
self.ans = Entry(self.root,font=("arial"))
self.ans.place(x=10,y=195,width=270)
title7 = Label(self.root, text="New Password",
font=("times new roman", 15, "bold"), bg="white").place(x=10,y=235)
self.new_pass = Entry(self.root,font=("arial"))
self.new_pass.place(x=10,y=270,width=270)
self.create_button =
Button(self.root,text="Submit",command=self.change_pass,font=("times new
roman",18,
"bold"),bd=0,cursor="hand2",bg="green2",fg="white").place(x=95,y=340,width=200
)
#=========================================================================
except Exception as e:
messagebox.showerror("Error", f"{e}")
def change_pass(self):
if self.email_entry.get() == "" or self.sec_ques.get() == "Select" or
self.new_pass.get() == "":
messagebox.showerror("Error!", "Please fill the all entry field
correctly")
else:
try:
connection = pymysql.connect(host=cr.host, user=cr.user,
password=cr.password, database=cr.database)
cur = connection.cursor()
cur.execute("select * from student_register where email=%s and
question=%s and answer=%s",
(self.email_entry.get(),self.sec_ques.get(),self.ans.get()))
row=cur.fetchone()
if row == None:
messagebox.showerror("Error!", "Please fill the all entry
field correctly")
else:
try:
cur.execute("update student_register set password=%s
where email=%s", (self.new_pass.get(),self.email_entry.get()))
connection.commit()
messagebox.showinfo("Successful", "Password has
changed successfully")
connection.close()
self.reset_fields()
self.root.destroy()
except Exception as er:
messagebox.showerror("Error!", f"{er}")
except Exception as er:
messagebox.showerror("Error!", f"{er}")
def redirect_window(self):
self.window.destroy()
# Importing the signup window.
# The page must be in the same directory
root = Tk()
obj = SignUp(root)
root.mainloop()
def reset_fields(self):
self.email_entry.delete(0,END)
self.password_entry.delete(0,END)
# The main function
if __name__ == "__main__":
root = Tk()
obj = login_page(root)
root.mainloop()
Output Screen
Explanation
Do you remember J.A.R.V.I.S., Tony Stark's virtual
personal assistant? If you've seen any of the
Ironman or Avengers movies, I'm sure you do.
Have you ever wondered whether you could
create your own personal assistant? Yes?
We have created one for you by utilising our time
in python.
We have different function as per your need and
we have linked it to web like:
i. If you say play music it will play a music for
your music folder
ii. If you say YouTube it will open YouTube in
your chrome
iii. If you say tell me about a person he will
Wikipedia that person tell top line on
Wikipedia
iv. If you say calculate a sum it will calculate it and
tell answer
v. If you say show me screenshot then he will
show screenshot from screenshot folder
Advantage
Chances are we have all heard about or maybe even used voice assistant
technology in one form or another. Leading tech-giants have all launched
products that support voice technology. Some examples include Google’s
Assistant, Amazon’s Alexa, Microsoft’s Cortana, and, of course, Apple’s
Siri.
In the past few years, more companies have been exploring personal
voice assistant technology for app development and tech-business.
Encompassing the advantages, this has translated into an increase in
usage and awareness from consumers. Global auditing company PwC, in
recent research, states that from the 1000 consumers (aged 18–64)
questioned, the knowledge about voice technology was at 90% of the
subjects, and a majority (72%) had also used a voice assistant.
According to research on Juniper, about 3.25 billion voice assistants in
use currently and the numbers are poised to get to 8 billion personal
voice assistants in use by 2023. Now with breakthroughs in artificial
intelligence assistive technology, these voice assistants are increasingly
useful in enterprise settings.
More business owners need to consider the various benefits they can
derive from the advantages of voice-activated personal assistant I will be
discussing below.
Enhances e-Commerce Marketing
For those in the e-Commerce industry, these voice assistant technology-
enabled chatbots are a great way to thrill customers, by providing them
with the ease of online shopping on any device. Also, businesses get data
gathered from consumer information based on their interests, device,
cart/purchase history, access location, search history, etc. The data
collected can be used for personalized marketing strategies and improved
Search Engine Optimization (SEO) for your business website
Provides 24/7 Customer Support
Consumers request for round the clock support. Sometimes there are
instances when they require assistance at odd hours, and when help isn’t
available, it becomes a frustrating experience. To avoid such situations,
voice assistants come in handy. A digital talking assistant does not require
any off days or sick leaves that interrupt customer care and experiences.
Take, for instance, if you run a hotel using voice assistant technology, if a
guest gets too cold or warm at night, rather than call the front desk or
fiddle with instruments, the guest can make use of the in-room smart
speaker. Therefore, you eliminate the need for night support staff
because you are covered with personal assistant technology, and your
24/7 customer support is guaranteed.
Eradicates Language Barriers
While travelling abroad or even while interacting with content online,
most people have to deal with language barriers. So what’s the solution?
Including personal assistant technology integrated with automatic
translation to help ease the language barrier.
For example, Google’s assistant is compatible with 27 different languages
and working on adding more languages. Thus, when consumers are able
to communicate with you in their native language, it can unequivocally
lead to better customer experience and more business for you.
Helps Streamline Operations
Another excellent business benefit of personal voice assistants is that it
streamlines operations that come with integrating digital assistants into
your business. Even with emerging innovations and deep learning, these
talking assistants never stop working. They are continually accessing
reports, analyzing data, and ensuring critical systems are updated.
You can make use of Alexa Skills and Google Actions to facilitate specific
actions for your customers. Artificial intelligence assistant technology
helps your business to streamline day-to-day operations that are always
being supervised. Things such as remembering important dates,
deadlines, booking appointments, scheduling, etc. can be all triggered
using specific voice commands.
Saves Time by Automating Repetitive Tasks
Automating repeated tasks to a voice-activated personal assistant frees
up the human time and resources. Also, it can efficiently perform these
mundane tasks with no errors, which often leads to an improvement in
customer satisfaction. While voice assistants are left to deal with routine
tasks, humans can dedicate more time to duties where human
intervention is required for successful business solutions and services.
Additionally, introducing voice assistants to your workforce will not only
impact your consumers’ experience but will also improve the overall
productivity level of your business. A report from Gartner states that by
2021, Artificial Intelligent assistant technology will not only generate $2.9
trillion in business value but also recover 6.2 billion employee working
hours.
Enables Smart Offices
Voice assistants also allow the creation of smart and connected offices. If
a voice-activated personal assistant knows that a particular part of the
office space will not be in use, it can connect with smart office solutions
to turn off the lights and other utilities until the area is needed. You can
do this by simply setting up a smart thermostat to your voice assistant
and tell it when you’re leaving the office so that your heating and lights
get turned off. Also, office and business resources can be ordered using
simple voice commands and likewise set to give alerts when supplies are
running low.
Aids Hand-free Operation
Voice talking gives consumers hands-free access to many functions
because you only need the voice to activate them. So it makes it easier
and faster to do certain things. The research from PwC shows that
consumers often make use of personal voice assistant while doing other
tasks such as cooking, watching TV, driving, etc.
The research also shows that several demographic groups find it easy to
use voice assistance. Hence the high adoption rate of voice technology
poses great potential for companies that can utilise the technology to
their advantage.
Conclusion
One thing is for sure. Personal voice assistance technology is here to stay.
Just the simple thought of talking to a device to get some tasks done is an
appealing innovation that presents multiple opportunities, most notably
for businesses. The voice talking technology is poised to continue to shift
consumer behaviour, and it, if necessary, for businesses to prepare to
meet consumer needs. Getting into the voice technology space today is
bound to make a huge difference and give your brand an edge in a highly
competitive market.
Disclaimer: Being a follower of ‘Chatbots Journal’ offers lots of perks :) A
consultation session with experts from across the industries is a major
one. Submit your query here and we will connect you with the right
chatbot experts. He might be sitting next door, you never know.
Bio
Dominic Beaulieu is an expert writer who specializes in creating various
training and professional upgrade courses, materials and manuals. He
mainly writes on development, digital marketing, design, business
strategies, etc. This breadth of specialization allows him to write expert
columns on the most pressing topics in today’s society and to specialize in
creating writing reviews in Pick The Writer and Writing Judge.
MySQL Table
Bibliography
Books:
Computer Science with python Class
12th author Sumita Arora
People:
Diksha Khurrana
Website:
https://
www.geeksforseeks.org/build-a-
virtual-assistant-using-python/amp/
https://en.wikipedia.org/api/
rest_v1/
https://youtube.com/playlist?
list=PLq_SHLFD-
pSD_LeiV2dyAHgED7PDF48Jq