파이톤을 이용해서 저희만의 J.A.R.V.I.S. 두 번째 부분을 구축해 보도록 하겠습니다.

100653 단어 programmingpython

마지막 부분에서 우리는 이미 개인 보조원의 설정을 완성했다.이 부분에서, 우리는 우리의 개인 조수가 실행할 수 있는 각종 오프라인과 온라인 기능을 추가할 것이다.다양한 API를 사용하여 다양한 소스에서 데이터를 가져옵니다.functions이라는 폴더를 만듭니다.

오프라인 기능

functions 폴더에 os_ops.py이라는 파이톤 파일을 만듭니다.이 파일에서, 우리는 각종 운영체제와 상호작용하는 함수를 만들 것이다.
import os
import subprocess as sp

paths = {
    'notepad': "C:\\Program Files\\Notepad++\\notepad++.exe",
    'discord': "C:\\Users\\ashut\\AppData\\Local\\Discord\\app-1.0.9003\\Discord.exe",
    'calculator': "C:\\Windows\\System32\\calc.exe"
}

위 스크립트에서 우리는 소프트웨어 이름은 키이고 경로는 값인 paths이라는 사전을 만들었다.시스템에 따라 경로를 변경하고 필요할 때 소프트웨어 경로를 추가할 수 있습니다.

1. 카메라 켜기


이 기능은 시스템에서 카메라를 켜는 데 사용됩니다.이 명령은 subprocess 모듈을 사용하여 실행됩니다.
def open_camera():
    sp.run('start microsoft.windows.camera:', shell=True)
2. 메모장 열기와 불협화음
이러한 함수는 시스템에서 Notepad++ 및 Discord를 여는 데 사용됩니다.
def open_notepad():
    os.startfile(paths['notepad'])

def open_discord():
    os.startfile(paths['discord'])
3. 명령 프롬프트 열기
이 기능은 시스템에서 명령 프롬프트를 여는 데 사용됩니다.
def open_cmd():
    os.system('start cmd')
4. 계산기 열기
이 기능은 시스템에서 계산기를 여는 데 사용됩니다.
def open_calculator():
    sp.Popen(paths['calculator'])

온라인 기능


우리는 몇 가지 온라인 기능을 추가할 것이다.그들은 다음과 같습니다.
  • 내 IP 주소 찾기
  • 위키백과에서
  • 검색
  • 유튜브에서 동영상 재생
  • 구글에서
  • 검색
  • WhatsApp 메시지 보내기
  • 이메일
  • 최신 뉴스톱
  • 날씨 보고서
  • 히트작 수상
  • 랜덤 농담 획득
  • 랜덤 제안 획득
  • online_ops.py 디렉터리에 functions이라는 파일을 만들고 함수를 하나씩 만들기 시작합니다.현재 파일에 다음 코드를 추가합니다.
    import requests
    import wikipedia
    import pywhatkit as kit
    from email.message import EmailMessage
    import smtplib
    from decouple import config
    
    API를 사용하기 전에 API와 Python을 사용하는 방법에 익숙하지 않으면 this tutorial을 보십시오.

    1. 내 IP 주소 찾기


    ipify은 간단한 공용 IP 주소 API를 제공합니다.우리는 이 URL에서 GET 요청을 보내기만 하면 됩니다: https://api64.ipify.org/?format=json.JSON 데이터를 다음과 같이 반환합니다.
    {
      "ip": "117.214.111.199"
    }
    
    그리고 우리는 간단하게 JSON 데이터에서 ip을 되돌릴 수 있다.그러면 이 방법을 만듭니다.
    def find_my_ip():
        ip_address = requests.get('https://api64.ipify.org?format=json').json()
        return ip_address["ip"]
    

    2. 위키백과에서 검색


    위키백과에서 검색하기 위해서, 우리는 첫 번째 부분에 설치된 wikipedia 모듈을 사용할 것이다.
    def search_on_wikipedia(query):
        results = wikipedia.summary(query, sentences=2)
        return results
    
    wikipedia 모듈에서 우리는 summary() 방법이 있는데, 이것은 하나의 조회를 매개 변수로 받아들인다.그 밖에 우리는 필요한 문장의 수를 전달할 수 있다.그리고 우리는 간단하게 결과를 되돌려보낸다.

    3. 유튜브에서 영상 재생


    유튜브에서 영상을 재생할 때 우리는 PyWhatKit를 사용한다.kit으로 도입했습니다.
    def play_on_youtube(video):
        kit.playonyt(video)
    
    PyWhatKit에는 테마를 매개 변수로 받아들이는 playonyt() 방법이 있습니다.그리고 유튜브에서 주제를 검색해 가장 적합한 영상을 재생한다.덮개 아래에 PyAutoGUI를 사용합니다.

    4. 구글에서 검색


    우리는 다시 PyWhatKit를 사용하여 구글에서 검색할 것이다.
    def search_on_google(query):
        kit.search(query)
    
    그것은 우리가 즉시 구글에서 검색할 수 있도록 도와줄 수 있는 방법 search()을 가지고 있다.

    5. WhatsApp 메시지 보내기


    PyWhatKit를 사용하여 WhatsApp 메시지를 다시 보냅니다.
    def send_whatsapp_message(number, message):
        kit.sendwhatmsg_instantly(f"+91{number}", message)
    
    우리의 방법은 두 가지 매개 변수인 전화번호 numbermessage을 받아들인다.그리고 sendwhatmsg_instantly() 방법으로 WhatsApp 메시지를 보냅니다.

    6. 이메일 보내기


    전자메일을 보낼 때, 우리는 파이톤에 내장된 smtp 모듈을 사용할 것이다.
    EMAIL = config("EMAIL")
    PASSWORD = config("PASSWORD")
    
    def send_email(receiver_address, subject, message):
        try:
            email = EmailMessage()
            email['To'] = receiver_address
            email["Subject"] = subject
            email['From'] = EMAIL
            email.set_content(message)
            s = smtplib.SMTP("smtp.gmail.com", 587)
            s.starttls()
            s.login(EMAIL, PASSWORD)
            s.send_message(email)
            s.close()
            return True
        except Exception as e:
            print(e)
            return False
    
    이 방법은 receiver_address, subjectmessage을 매개 변수로 받아들인다..env 파일에 e- 메일 및 암호를 추가해야 합니다.

    7. 최신 뉴스 톱기사 얻기


    최신 뉴스 제목을 얻으려면 NewsAPI을 사용하겠습니다.NewsAPI에 무료 계정을 등록하고 API 키를 가져옵니다..env 파일에 뉴스 API 키를 추가합니다.
    NEWS_API_KEY = config("NEWS_API_KEY")
    
    def get_latest_news():
        news_headlines = []
        res = requests.get(
            f"https://newsapi.org/v2/top-headlines?country=in&apiKey={NEWS_API_KEY}&category=general").json()
        articles = res["articles"]
        for article in articles:
            news_headlines.append(article["title"])
        return news_headlines[:5]
    
    위의 방법에서, 우리는 먼저 빈 뉴스 제목 목록을 만듭니다.그런 다음 NewsAPI Documentation에 지정된 API URL에 GET 요청을 보냅니다.요청된 JSON 응답의 예는 다음과 같습니다.
    {
      "status": "ok",
      "totalResults": 38,
      "articles": [
        {
          "source": {
            "id": null,
            "name": "Sportskeeda"
          },
          "author": "Aniket Thakkar",
          "title": "Latest Free Fire redeem code to get Weapon loot crate today (14 October 2021) - Sportskeeda",
          "description": "Gun crates are one of the ways that players in Free Fire can obtain impressive and appealing gun skins.",
          "url": "https://www.sportskeeda.com/free-fire/latest-free-fire-redeem-code-get-weapon-loot-crate-today-14-october-2021",
          "urlToImage": "https://staticg.sportskeeda.com/editor/2021/10/d0b83-16341799119781-1920.jpg",
          "publishedAt": "2021-10-14T03:51:50Z",
          "content": null
        },
        {
          "source": {
            "id": null,
            "name": "NDTV News"
          },
          "author": null,
          "title": "BSF Gets Increased Powers In 3 Border States: What It Means - NDTV",
          "description": "Border Security Force (BSF) officers will now have the power toarrest, search, and of seizure to the extent of 50 km inside three newstates sharing international boundaries with Pakistan and Bangladesh.",
          "url": "https://www.ndtv.com/india-news/bsf-gets-increased-powers-in-3-border-states-what-it-means-2574644",
          "urlToImage": "https://c.ndtvimg.com/2021-08/eglno7qk_-bsf-recruitment-2021_625x300_10_August_21.jpg",
          "publishedAt": "2021-10-14T03:44:00Z",
          "content": "This move is quickly snowballing into a debate on state autonomy. New Delhi: Border Security Force (BSF) officers will now have the power to arrest, search, and of seizure to the extent of 50 km ins… [+4143 chars]"
        },
        {
          "source": {
            "id": "the-times-of-india",
            "name": "The Times of India"
          },
          "author": "TIMESOFINDIA.COM",
          "title": "5 health conditions that can make your joints hurt - Times of India",
          "description": "Joint pain caused by these everyday issues generally goes away on its own when you stretch yourself a little and flex your muscles.",
          "url": "https://timesofindia.indiatimes.com/life-style/health-fitness/health-news/5-health-conditions-that-can-make-your-joints-hurt/photostory/86994969.cms",
          "urlToImage": "https://static.toiimg.com/photo/86995017.cms",
          "publishedAt": "2021-10-14T03:30:00Z",
          "content": "Depression is a mental health condition, but the symptoms may manifest even on your physical health. Unexpected aches and pain in the joints that you may experience when suffering from chronic depres… [+373 chars]"
        },
        {
          "source": {
            "id": null,
            "name": "The Indian Express"
          },
          "author": "Devendra Pandey",
          "title": "Rahul Dravid likely to be interim coach for New Zealand series - The Indian Express",
          "description": "It’s learnt that a few Australian coaches expressed interest in the job, but the BCCI isn’t keen as they are focussing on an Indian for the role, before they look elsewhere.",
          "url": "https://indianexpress.com/article/sports/cricket/rahul-dravid-likely-to-be-interim-coach-for-new-zealand-series-7570990/",
          "urlToImage": "https://images.indianexpress.com/2021/05/rahul-dravid.jpg",
          "publishedAt": "2021-10-14T03:26:09Z",
          "content": "Rahul Dravid is likely to be approached by the Indian cricket board to be the interim coach for Indias home series against New Zealand. Head coach Ravi Shastri and the core of the support staff will … [+1972 chars]"
        },
        {
          "source": {
            "id": null,
            "name": "CNBCTV18"
          },
          "author": null,
          "title": "Thursday's top brokerage calls: Infosys, Wipro and more - CNBCTV18",
          "description": "Goldman Sachs has maintained its 'sell' rating on Mindtree largely due to expensive valuations, while UBS expects a muted reaction from Wipro's stock. Here are the top brokerage calls for the day:",
          "url": "https://www.cnbctv18.com/market/stocks/thursdays-top-brokerage-calls-infosys-wipro-and-more-11101072.htm",
          "urlToImage": "https://images.cnbctv18.com/wp-content/uploads/2019/03/buy-sell.jpg",
          "publishedAt": "2021-10-14T03:26:03Z",
          "content": "MiniGoldman Sachs has maintained its 'sell' rating on Mindtree largely due to expensive valuations, while UBS expects a muted reaction from Wipro's stock. Here are the top brokerage calls for the day:"
        }
      ]
    }
    
    
    뉴스가 articles이라는 목록에 포함되어 있기 때문에 우리는 articles의 변수 res['articles'].을 만들고 있습니다. 현재 우리는 이 articles 목록을 교체하고 article["title"]news_headlines 목록 .에 추가하고 이 목록의 다섯 번째 뉴스 제목으로 돌아가고 있습니다.

    8. 날씨 보고서 얻기


    일기예보를 얻기 위해서 우리는 OpenWeatherMap API을 사용한다.무료 계정을 등록하고 프로그램 ID를 얻습니다. .env 파일에 OPENWEATHER 프로그램 ID를 추가해야 합니다.
    OPENWEATHER_APP_ID = config("OPENWEATHER_APP_ID")
    
    def get_weather_report(city):
        res = requests.get(
            f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={OPENWEATHER_APP_ID}&units=metric").json()
        weather = res["weather"][0]["main"]
        temperature = res["main"]["temp"]
        feels_like = res["main"]["feels_like"]
        return weather, f"{temperature}℃", f"{feels_like}℃"
    
    OpenWeatherMap API에 따르면 위 URL에 대해 도시 이름으로 GET 요청을 보내야 합니다.다음과 같은 JSON 응답이 제공됩니다.
    {
        "coord": {
            "lon": 85,
            "lat": 24.7833
        },
        "weather": [
            {
                "id": 721,
                "main": "Haze",
                "description": "haze",
                "icon": "50d"
            }
        ],
        "base": "stations",
        "main": {
            "temp": 26.95,
            "feels_like": 26.64,
            "temp_min": 26.95,
            "temp_max": 26.95,
            "pressure": 1011,
            "humidity": 36
        },
        "visibility": 3000,
        "wind": {
            "speed": 2.57,
            "deg": 310
        },
        "clouds": {
            "all": 57
        },
        "dt": 1637227634,
        "sys": {
            "type": 1,
            "id": 9115,
            "country": "IN",
            "sunrise": 1637195904,
            "sunset": 1637235130
        },
        "timezone": 19800,
        "id": 1271439,
        "name": "Gaya",
        "cod": 200
    }
    
    우리는 상술한 회신 중의 weather, temperaturefeels_like만 있으면 된다.

    9. 인기 영화 보기


    팝 영화를 얻기 위해 The Movie Database(TMDB) API를 사용합니다.무료 계정을 등록하고 API 키를 받습니다.TMDB API 키를 .env 파일에 추가합니다.
    TMDB_API_KEY = config("TMDB_API_KEY")
    
    def get_trending_movies():
        trending_movies = []
        res = requests.get(
            f"https://api.themoviedb.org/3/trending/movie/day?api_key={TMDB_API_KEY}").json()
        results = res["results"]
        for r in results:
            trending_movies.append(r["original_title"])
        return trending_movies[:5]
    
    최신 뉴스 제목을 위해 작성한 바와 같이 trending_movies 목록을 만들고 있습니다.그런 다음 TMDB API에 따라 GET 요청을 보냅니다.JSON 응답 예는 다음과 같습니다.
    {
      "page": 1,
      "results": [
        {
          "video": false,
          "vote_average": 7.9,
          "overview": "Shang-Chi must confront the past he thought he left behind when he is drawn into the web of the mysterious Ten Rings organization.",
          "release_date": "2021-09-01",
          "title": "Shang-Chi and the Legend of the Ten Rings",
          "adult": false,
          "backdrop_path": "/cinER0ESG0eJ49kXlExM0MEWGxW.jpg",
          "vote_count": 2917,
          "genre_ids": [28, 12, 14],
          "id": 566525,
          "original_language": "en",
          "original_title": "Shang-Chi and the Legend of the Ten Rings",
          "poster_path": "/1BIoJGKbXjdFDAqUEiA2VHqkK1Z.jpg",
          "popularity": 9559.446,
          "media_type": "movie"
        },
        {
          "adult": false,
          "backdrop_path": "/dK12GIdhGP6NPGFssK2Fh265jyr.jpg",
          "genre_ids": [28, 35, 80, 53],
          "id": 512195,
          "original_language": "en",
          "original_title": "Red Notice",
          "overview": "An Interpol-issued Red Notice is a global alert to hunt and capture the world's most wanted. But when a daring heist brings together the FBI's top profiler and two rival criminals, there's no telling what will happen.",
          "poster_path": "/wdE6ewaKZHr62bLqCn7A2DiGShm.jpg",
          "release_date": "2021-11-04",
          "title": "Red Notice",
          "video": false,
          "vote_average": 6.9,
          "vote_count": 832,
          "popularity": 1990.503,
          "media_type": "movie"
        },
        {
          "genre_ids": [12, 28, 53],
          "original_language": "en",
          "original_title": "No Time to Die",
          "poster_path": "/iUgygt3fscRoKWCV1d0C7FbM9TP.jpg",
          "video": false,
          "vote_average": 7.6,
          "overview": "Bond has left active service and is enjoying a tranquil life in Jamaica. His peace is short-lived when his old friend Felix Leiter from the CIA turns up asking for help. The mission to rescue a kidnapped scientist turns out to be far more treacherous than expected, leading Bond onto the trail of a mysterious villain armed with dangerous new technology.",
          "id": 370172,
          "vote_count": 1804,
          "title": "No Time to Die",
          "adult": false,
          "backdrop_path": "/1953j0QEbtN17WFFTnJHIm6bn6I.jpg",
          "release_date": "2021-09-29",
          "popularity": 4639.439,
          "media_type": "movie"
        },
        {
          "poster_path": "/5pVJ9SuuO72IgN6i9kMwQwnhGHG.jpg",
          "video": false,
          "vote_average": 0,
          "overview": "Peter Parker is unmasked and no longer able to separate his normal life from the high-stakes of being a Super Hero. When he asks for help from Doctor Strange the stakes become even more dangerous, forcing him to discover what it truly means to be Spider-Man.",
          "release_date": "2021-12-15",
          "id": 634649,
          "adult": false,
          "backdrop_path": "/vK18znei8Uha2z7ZhZtBa40HIrm.jpg",
          "vote_count": 0,
          "genre_ids": [28, 12, 878],
          "title": "Spider-Man: No Way Home",
          "original_language": "en",
          "original_title": "Spider-Man: No Way Home",
          "popularity": 1084.815,
          "media_type": "movie"
        },
        {
          "video": false,
          "vote_average": 6.8,
          "overview": "After finding a host body in investigative reporter Eddie Brock, the alien symbiote must face a new enemy, Carnage, the alter ego of serial killer Cletus Kasady.",
          "release_date": "2021-09-30",
          "adult": false,
          "backdrop_path": "/70nxSw3mFBsGmtkvcs91PbjerwD.jpg",
          "vote_count": 1950,
          "genre_ids": [878, 28, 12],
          "id": 580489,
          "original_language": "en",
          "original_title": "Venom: Let There Be Carnage",
          "poster_path": "/rjkmN1dniUHVYAtwuV3Tji7FsDO.jpg",
          "title": "Venom: Let There Be Carnage",
          "popularity": 4527.568,
          "media_type": "movie"
        }
      ],
      "total_pages": 1000,
      "total_results": 20000
    }
    
    
    위의 대답에 따르면 우리는 영화의 제목만 필요로 한다.우리는 영화 제목을 얻기 위해 results을 얻었다. 이것은 목록이다. 그리고 그것을 교체해서 trending_movies 목록에 추가했다.마지막으로, 우리는 목록의 다섯 번째 요소를 되돌려줍니다.

    10. 함부로 농담하기


    무작위 농담을 얻기 위해서, 우리는 이 URL에 get 요청을 보내기만 하면 됩니다: https://icanhazdadjoke.com/
    def get_random_joke():
        headers = {
            'Accept': 'application/json'
        }
        res = requests.get("https://icanhazdadjoke.com/", headers=headers).json()
        return res["joke"]
    

    11. 랜덤으로 조언 받기


    무작위 제안을 얻기 위해 Advice Slip API을 사용합니다.***
    def get_random_advice():
        res = requests.get("https://api.adviceslip.com/advice").json()
        return res['slip']['advice']
    
    

    업데이트 기본 방법


    지금까지 main.py 파일의 주요 방법은 다음과 같습니다.
    if __name__ == ' __main__':
        greet_user()
        while True:
            query = take_user_input().lower()
            print(query)
    
    이제 이 주요 방법을 업데이트합시다.여기에 검색 문자열이 있기 때문에, 우리는if-else 사다리꼴 그림을 추가해서 서로 다른 조건을 검사할 수 있습니다.다음 코드를 참조하십시오.
    
    import requests
    from functions.online_ops import find_my_ip, get_latest_news, get_random_advice, get_random_joke, get_trending_movies, get_weather_report, play_on_youtube, search_on_google, search_on_wikipedia, send_email, send_whatsapp_message
    from functions.os_ops import open_calculator, open_camera, open_cmd, open_notepad, open_discord
    from pprint import pprint
    
    if __name__ == ' __main__':
        greet_user()
        while True:
            query = take_user_input().lower()
    
            if 'open notepad' in query:
                open_notepad()
    
            elif 'open discord' in query:
                open_discord()
    
            elif 'open command prompt' in query or 'open cmd' in query:
                open_cmd()
    
            elif 'open camera' in query:
                open_camera()
    
            elif 'open calculator' in query:
                open_calculator()
    
            elif 'ip address' in query:
                ip_address = find_my_ip()
                speak(f'Your IP Address is {ip_address}.\n For your convenience, I am printing it on the screen sir.')
                print(f'Your IP Address is {ip_address}')
    
            elif 'wikipedia' in query:
                speak('What do you want to search on Wikipedia, sir?')
                search_query = take_user_input().lower()
                results = search_on_wikipedia(search_query)
                speak(f"According to Wikipedia, {results}")
                speak("For your convenience, I am printing it on the screen sir.")
                print(results)
    
            elif 'youtube' in query:
                speak('What do you want to play on Youtube, sir?')
                video = take_user_input().lower()
                play_on_youtube(video)
    
            elif 'search on google' in query:
                speak('What do you want to search on Google, sir?')
                query = take_user_input().lower()
                search_on_google(query)
    
            elif "send whatsapp message" in query:
                speak('On what number should I send the message sir? Please enter in the console: ')
                number = input("Enter the number: ")
                speak("What is the message sir?")
                message = take_user_input().lower()
                send_whatsapp_message(number, message)
                speak("I've sent the message sir.")
    
            elif "send an email" in query:
                speak("On what email address do I send sir? Please enter in the console: ")
                receiver_address = input("Enter email address: ")
                speak("What should be the subject sir?")
                subject = take_user_input().capitalize()
                speak("What is the message sir?")
                message = take_user_input().capitalize()
                if send_email(receiver_address, subject, message):
                    speak("I've sent the email sir.")
                else:
                    speak("Something went wrong while I was sending the mail. Please check the error logs sir.")
    
            elif 'joke' in query:
                speak(f"Hope you like this one sir")
                joke = get_random_joke()
                speak(joke)
                speak("For your convenience, I am printing it on the screen sir.")
                pprint(joke)
    
            elif "advice" in query:
                speak(f"Here's an advice for you, sir")
                advice = get_random_advice()
                speak(advice)
                speak("For your convenience, I am printing it on the screen sir.")
                pprint(advice)
    
            elif "trending movies" in query:
                speak(f"Some of the trending movies are: {get_trending_movies()}")
                speak("For your convenience, I am printing it on the screen sir.")
                print(*get_trending_movies(), sep='\n')
    
            elif 'news' in query:
                speak(f"I'm reading out the latest news headlines, sir")
                speak(get_latest_news())
                speak("For your convenience, I am printing it on the screen sir.")
                print(*get_latest_news(), sep='\n')
    
            elif 'weather' in query:
                ip_address = find_my_ip()
                city = requests.get(f"https://ipapi.co/{ip_address}/city/").text
                speak(f"Getting weather report for your city {city}")
                weather, temperature, feels_like = get_weather_report(city)
                speak(f"The current temperature is {temperature}, but it feels like {feels_like}")
                speak(f"Also, the weather report talks about {weather}")
                speak("For your convenience, I am printing it on the screen sir.")
                print(f"Description: {weather}\nTemperature: {temperature}\nFeels like: {feels_like}")
    
    위의 각본은 매우 간단하고 이해하기 쉽다.나는 코드를 전혀 해석하고 싶지 않다.
    주의: Python 3.10에 대해if-else 사다리꼴 그림 대신 Python Match Case을 사용할 수 있습니다.

    최종 코드

    main.py은 다음과 같이 보입니다.
    import requests
    from functions.online_ops import find_my_ip, get_latest_news, get_random_advice, get_random_joke, get_trending_movies, get_weather_report, play_on_youtube, search_on_google, search_on_wikipedia, send_email, send_whatsapp_message
    import pyttsx3
    import speech_recognition as sr
    from decouple import config
    from datetime import datetime
    from functions.os_ops import open_calculator, open_camera, open_cmd, open_notepad, open_discord
    from random import choice
    from utils import opening_text
    from pprint import pprint
    
    USERNAME = config('USER')
    BOTNAME = config('BOTNAME')
    
    engine = pyttsx3.init('sapi5')
    
    # Set Rate
    engine.setProperty('rate', 190)
    
    # Set Volume
    engine.setProperty('volume', 1.0)
    
    # Set Voice (Female)
    voices = engine.getProperty('voices')
    engine.setProperty('voice', voices[1].id)
    
    # Text to Speech Conversion
    def speak(text):
        """Used to speak whatever text is passed to it"""
    
        engine.say(text)
        engine.runAndWait()
    
    # Greet the user
    def greet_user():
        """Greets the user according to the time"""
    
        hour = datetime.now().hour
        if (hour >= 6) and (hour < 12):
            speak(f"Good Morning {USERNAME}")
        elif (hour >= 12) and (hour < 16):
            speak(f"Good afternoon {USERNAME}")
        elif (hour >= 16) and (hour < 19):
            speak(f"Good Evening {USERNAME}")
        speak(f"I am {BOTNAME}. How may I assist you?")
    
    # Takes Input from User
    def take_user_input():
        """Takes user input, recognizes it using Speech Recognition module and converts it into text"""
    
        r = sr.Recognizer()
        with sr.Microphone() as source:
            print('Listening....')
            r.pause_threshold = 1
            audio = r.listen(source)
    
        try:
            print('Recognizing...')
            query = r.recognize_google(audio, language='en-in')
            if not 'exit' in query or 'stop' in query:
                speak(choice(opening_text))
            else:
                hour = datetime.now().hour
                if hour >= 21 and hour < 6:
                    speak("Good night sir, take care!")
                else:
                    speak('Have a good day sir!')
                exit()
        except Exception:
            speak('Sorry, I could not understand. Could you please say that again?')
            query = 'None'
        return query
    
    if __name__ == ' __main__':
        greet_user()
        while True:
            query = take_user_input().lower()
    
            if 'open notepad' in query:
                open_notepad()
    
            elif 'open discord' in query:
                open_discord()
    
            elif 'open command prompt' in query or 'open cmd' in query:
                open_cmd()
    
            elif 'open camera' in query:
                open_camera()
    
            elif 'open calculator' in query:
                open_calculator()
    
            elif 'ip address' in query:
                ip_address = find_my_ip()
                speak(f'Your IP Address is {ip_address}.\n For your convenience, I am printing it on the screen sir.')
                print(f'Your IP Address is {ip_address}')
    
            elif 'wikipedia' in query:
                speak('What do you want to search on Wikipedia, sir?')
                search_query = take_user_input().lower()
                results = search_on_wikipedia(search_query)
                speak(f"According to Wikipedia, {results}")
                speak("For your convenience, I am printing it on the screen sir.")
                print(results)
    
            elif 'youtube' in query:
                speak('What do you want to play on Youtube, sir?')
                video = take_user_input().lower()
                play_on_youtube(video)
    
            elif 'search on google' in query:
                speak('What do you want to search on Google, sir?')
                query = take_user_input().lower()
                search_on_google(query)
    
            elif "send whatsapp message" in query:
                speak('On what number should I send the message sir? Please enter in the console: ')
                number = input("Enter the number: ")
                speak("What is the message sir?")
                message = take_user_input().lower()
                send_whatsapp_message(number, message)
                speak("I've sent the message sir.")
    
            elif "send an email" in query:
                speak("On what email address do I send sir? Please enter in the console: ")
                receiver_address = input("Enter email address: ")
                speak("What should be the subject sir?")
                subject = take_user_input().capitalize()
                speak("What is the message sir?")
                message = take_user_input().capitalize()
                if send_email(receiver_address, subject, message):
                    speak("I've sent the email sir.")
                else:
                    speak("Something went wrong while I was sending the mail. Please check the error logs sir.")
    
            elif 'joke' in query:
                speak(f"Hope you like this one sir")
                joke = get_random_joke()
                speak(joke)
                speak("For your convenience, I am printing it on the screen sir.")
                pprint(joke)
    
            elif "advice" in query:
                speak(f"Here's an advice for you, sir")
                advice = get_random_advice()
                speak(advice)
                speak("For your convenience, I am printing it on the screen sir.")
                pprint(advice)
    
            elif "trending movies" in query:
                speak(f"Some of the trending movies are: {get_trending_movies()}")
                speak("For your convenience, I am printing it on the screen sir.")
                print(*get_trending_movies(), sep='\n')
    
            elif 'news' in query:
                speak(f"I'm reading out the latest news headlines, sir")
                speak(get_latest_news())
                speak("For your convenience, I am printing it on the screen sir.")
                print(*get_latest_news(), sep='\n')
    
            elif 'weather' in query:
                ip_address = find_my_ip()
                city = requests.get(f"https://ipapi.co/{ip_address}/city/").text
                speak(f"Getting weather report for your city {city}")
                weather, temperature, feels_like = get_weather_report(city)
                speak(f"The current temperature is {temperature}, but it feels like {feels_like}")
                speak(f"Also, the weather report talks about {weather}")
                speak("For your convenience, I am printing it on the screen sir.")
                print(f"Description: {weather}\nTemperature: {temperature}\nFeels like: {feels_like}")
    
    
    프로그램을 실행하려면 다음 명령을 실행합니다.
    $ python main.py
    

    결론


    우리는 방금 파이톤의 도움으로 자신의 가상 개인 보조원을 만들었다.원한다면 프로그램에 더 많은 기능을 추가할 수 있습니다.너는 이 항목을 너의 이력서에 추가할 수 있다. 아니면 단지 재미를 위해서이다.
    실제 효과를 확인하려면 비디오를 보십시오.
    Github 저장소 - https://github.com/ashutoshkrris/Virtual-Personal-Assistant-using-Python

    좋은 웹페이지 즐겨찾기