DEV.to 블로그 게시물용 오디오 생성기 빌드

🎧 이 기사를 들어보세요



나는 읽기보다 듣기를 좋아하는 사람이다. 그리고 읽기보다 듣기를 할 때 생산성이 향상되는 것을 느낍니다. dev.to에는 그런 오디오 기능이 없기 때문에(기본적으로 가져오면 도움이 될 것입니다).

그래서 저는 dev.to 블로그 게시물 URL을 입력하고 다운로드할 수 있는 오디오를 출력하는 도구를 만들었습니다.

도구: https://audioblogs.herokuapp.com/

아래 비디오에서 도구의 작동을 확인할 수 있습니다.




이 도구의 워크플로는 gTTS 모듈을 사용하여 기사/블로그 게시물을 스크랩하고 오디오를 생성하는 것입니다.

사용된 모듈:



  • 요청 - HTML 페이지를 가져오기 위해 HTTP 요청을 보낼 수 있습니다
  • .

  • BeautifulSoup - HTML 페이지를 구문 분석하는 데 도움이 됩니다
  • .

  • gTTS - 입력한 텍스트를 mp3 파일로 저장할 수 있는 오디오로 변환합니다
  • .

  • Streamlit - 아름다운 사용자 정의 웹 앱을 쉽게 만들고 공유할 수 있게 해주는 Python 라이브러리

  • 의 시작하자:

    필요한 모든 모듈 가져오기

    import streamlit as st
    import requests
    from bs4 import BeautifulSoup
    from gtts import gTTS 
    

    웹 페이지의 내용을 변수로 가져오기

    results = requests.get("https://dev.to/sunilaleti/building-a-pdf-locker-gui-application-4l67")
    

    콘텐츠를 이해하기 쉽게 하기 위해 BeautifulSoup을 사용하고 있으며 콘텐츠는 soup 변수에 저장됩니다.

    soup = BeautifulSoup(results.text, "html.parser")
    

    우리는 soup.find를 사용하여 블로그 게시물의 이름을 얻고 요소를 검사하여 클래스 이름을 얻을 수 있습니다.

    Article=soup.find("div",{"class":"crayons-article__header__meta"}).find('h1').get_text()
    

    저자의 이름을 얻으려면

    Author=soup.find("div",{"class":"crayons-article__subheader"}).find('a').get_text()
    

    기사 내용을 얻으려면

    text=soup.find("div", {"id": "article-body"}).find_all(['p','h1','h2','h3','h4','h5','h6','ol','ul'])
    

    콘텐츠와 함께 HTML 태그도 얻습니다. 따라서 모든 HTML 태그를 제거해야 합니다.

    def remove_html_tags(text):
        for item in text:
            try:
                blog.append(item.get_text())
            except:
                pass
    

    이제 콘텐츠를 스크랩하고 정리한 후 gTTS 모듈의 도움으로 오디오를 생성해야 합니다.
    gTTS 모듈은 프랑스어, 스페인어 등과 같은 다른 언어도 지원합니다.

    from gtts import gTTS 
    
    language = 'en'
    myobj = gTTS(text=Text, lang=language, slow=False) 
    
    # Saving the converted audio in an mp3 file name "Audio"
    myobj.save("Audio.mp3") 
    

    이 웹앱은 streamlit을 사용하여 구축되었으며 herokuapp에 배포되었습니다.

    소스 코드:



    import streamlit as st
    import requests
    from bs4 import BeautifulSoup
    from gtts import gTTS 
    def app():
        st.set_page_config(page_title="Audio Blog",page_icon="🎧")
        st.title("Generate Audio for dev.to blogposts")
        url=st.text_area("Enter any DEV.TO blog url ").strip()
        if st.button("submit"):
            if len(url)!=0:
                with st.spinner('Miracles take time to happen \n Just kidding 😂 \n Generating audio..'):
                    results = requests.get(url)
                    soup = BeautifulSoup(results.text, "html.parser") 
                    blog=[]
                    try:
                        Article=soup.find("div",{"class":"crayons-article__header__meta"}).find('h1').get_text()
                        #st.write(Article)
                        Author=soup.find("div",{"class":"crayons-article__subheader"}).find('a').get_text()
                        #st.write(Author)
                        intro="This blogpost {article} is written by {author}".format(article = Article, author = Author)
                        blog.append(intro)
                        text=soup.find("div", {"id": "article-body"}).find_all(['p','h1','h2','h3','h4','h5','h6','ol','ul'])
                        def remove_html_tags(text):
                            for item in text:
                                try:
                                    blog.append(item.get_text())
                                except:
                                    pass
    
                        remove_html_tags(text)
                        Text=""
                        for ele in blog:  
                                Text +=ele+" "
    
                        myobj = gTTS(text=Text, lang='en', slow=False) 
    
                        myobj.save("Audio.mp3")
                        audio_file = open('Audio.mp3', 'rb')
                        audio_bytes = audio_file.read()
                        st.success("Play or download the audio")
                        st.audio(audio_bytes, format='audio/mp3')
                    except:
                        st.error("Enter a valid url")
            else:
                st.error("Enter a valid url")
    
    
    if __name__ == "__main__":
        app()
    

    문제가 있는지 알려주세요. 추가할 사항이 있으면 자유롭게 풀 요청을 보내주세요.


    알레티수닐 / 오디오블로그






    좋은 웹페이지 즐겨찾기