You are on page 1of 55

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

You might also like