Skip to content

Commit

Permalink
Create Mainfile.py
Browse files Browse the repository at this point in the history
  • Loading branch information
Aqiry committed Feb 6, 2021
1 parent 97e9b0d commit 11b02e0
Showing 1 changed file with 231 additions and 0 deletions.
231 changes: 231 additions & 0 deletions Mainfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,231 @@
import speech_recognition as sr
import os
import sys
import re
import webbrowser
import smtplib
import requests
import subprocess
from pyowm import OWM
import youtube_dl
# import vlc
import urllib
# import urllib2
import urllib.request as urllib2
import json
from bs4 import BeautifulSoup as soup

# import pyaudio
# from urllib2 import urlopen
try:
# For Python 3.0 and later
from urllib.request import urlopen
except ImportError:
# Fall back to Python 2's urllib2
from urllib import urlopen
import wikipedia
import random
from time import strftime
import pyttsx3

#Building a voice assistant
'''
Supported commands :
1. Open reddit subreddit : Opens the subreddit in default browser.
2. Open xyz.com : replace xyz with any website name
3. Send email/email : Follow up questions such as recipient name, content will be asked in order.
4. Tell a joke/another joke : Says a random dad joke.
5. Current weather in {cityname} : Tells you the current condition and temperture
7. Hello
8. play me a video : Plays song in your VLC media player
9. change wallpaper : Change desktop wallpaper
10. news for today : reads top news of today
11. time : Current system time
12. top stories from google news (RSS feeds)
13. tell me about xyz : tells you about xyz
'''

def textToSpeech(textInput):
# initialisation
engine = pyttsx3.init()
engine.say(textInput)
engine.runAndWait()

def sofiaResponse(audio):
"speaks audio passed as argument"
print(audio)
for line in audio.splitlines():
textToSpeech(audio)
# for line in audio.splitlines():
# os.system("say " + line)

def myCommand():
"listens for commands"
r = sr.Recognizer()
with sr.Microphone() as source:
print('Say something...')
r.pause_threshold = 1
r.adjust_for_ambient_noise(source, duration=1)
audio = r.listen(source)
try:
command = r.recognize_google(audio).lower()
print('You said: ' + command + '\n')
#loop back to continue to listen for commands if unrecognizable speech is received
except sr.UnknownValueError:
print('....')
command = myCommand();
return command

def assistant(command):
try:
"if statements for executing commands"
openGoogle = 'open google'
# open subreddit Reddit
if openGoogle in command:
reg_ex = re.search(openGoogle + '(.*)', command)
url = 'https://www.google.com/'
if reg_ex:
subreddit = reg_ex.group(1)
# url = url + 'r/' + subreddit
webbrowser.open(url)
sofiaResponse('The ' + openGoogle + ' has been opened for you Sir.')

elif 'sleep' in command:
sofiaResponse('Bye bye Sir. Have a nice day')
sys.exit()

# open website
elif 'open' in command:
reg_ex = re.search('open (.+)', command)
if reg_ex:
domain = reg_ex.group(1)
print(domain)
url = 'https://www.' + domain
webbrowser.open(url)
sofiaResponse('The website you have requested has been opened for you Sir.')
else:
pass

# greetings
elif 'hey jarvis' in command:
day_time = int(strftime('%H'))
if day_time < 12:
sofiaResponse('Hello Sir. Good morning')
elif 12 <= day_time < 18:
sofiaResponse('Hello Sir. Good afternoon')
else:
sofiaResponse('Hello Sir. Good evening')

elif 'who am i' in command:
sofiaResponse("Sir, Your name is wasique haidry")
elif 'help me' in command:
sofiaResponse("""
You can use these commands and I'll help you out:
1. Open reddit subreddit : Opens the subreddit in default browser.
2. Open xyz.com : replace xyz with any website name
3. Send email/email : Follow up questions such as recipient name, content will be asked in order.
4. Tell a joke/another joke : Says a random dad joke.
5. Current weather in {cityname} : Tells you the current condition and temperture
7. Greetings
8. play me a video : Plays song in your VLC media player
9. change wallpaper : Change desktop wallpaper
10. news for today : reads top news of today
11. time : Current system time
12. top stories from google news (RSS feeds)
13. tell me about xyz : tells you about xyz
""")



# time
elif 'time' in command:
import datetime
now = datetime.datetime.now()
sofiaResponse('Current time is %d hours %d minutes' % (now.hour, now.minute))


# play youtube song
elif 'play me a song' in command:
path = 'C:\\Users\\faraz.naqvi\\Downloads'
folder = path
for the_file in os.listdir(folder):
file_path = os.path.join(folder, the_file)
try:
if os.path.isfile(file_path):
os.unlink(file_path)
print(file_path)
except Exception as e:
print(e)

sofiaResponse('What song shall I play Sir?')
mysong = myCommand()
if mysong:
flag = 0
url = "https://www.youtube.com/results?search_query=" + mysong.replace(' ', '+')
response = urllib2.urlopen(url)
html = response.read()
soup1 = soup(html, "lxml")
url_list = []
for vid in soup1.findAll(attrs={'class': 'yt-uix-tile-link'}):
if ('https://www.youtube.com' + vid['href']).startswith("https://www.youtube.com/watch?v="):
flag = 1
final_url = 'https://www.youtube.com' + vid['href']
url_list.append(final_url)

url = url_list[0]
ydl_opts = {}

os.chdir(path)
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])
vlc.play(path)

if flag == 0:
sofiaResponse('I have not found anything in Youtube ')

# change wallpaper
elif 'change wallpaper' in command:
folder = '/Users/nageshsinghchauhan/Documents/wallpaper/'
for the_file in os.listdir(folder):
file_path = os.path.join(folder, the_file)
try:
if os.path.isfile(file_path):
os.unlink(file_path)
except Exception as e:
print(e)
api_key = '***************'
url = 'https://api.unsplash.com/photos/random?client_id=' + api_key # pic from unspalsh.com
f = urllib2.urlopen(url)
json_string = f.read()
f.close()
parsed_json = json.loads(json_string)
photo = parsed_json['urls']['full']
urllib.urlretrieve(photo,
"/Users/nageshsinghchauhan/Documents/wallpaper/a") # Location where we download the image to.
subprocess.call(["killall Dock"], shell=True)
sofiaResponse('wallpaper changed successfully')

# ask me anything
elif 'tell me about' in command:
reg_ex = re.search('tell me about (.*)', command)
try:
if reg_ex:
topic = reg_ex.group(1)
ny = wikipedia.page(topic)
sofiaResponse(ny.content[:500].encode('utf-8'))
except Exception as e:
print(e)
sofiaResponse(e)
else:
sofiaResponse('Sir. I dont have answer to that, Sorry')
except:
print("Thanks")


# sofiaResponse('Hi User, I am Sophia and I am your personal voice assistant, Please give a command or say "help me" and I will tell you what all I can do for you.')
sofiaResponse('Hello wasique i am your personal trait seeker' )
#loop to continue executing multiple commands
while True:
assistant(myCommand())

0 comments on commit 11b02e0

Please sign in to comment.