日期:2018/10/25

工具:Python寫Line Bot

內容:今天試著把我預設的文字訊息利用google語音來進行回覆,經過了debug很多次最後成功了!!主要是利用下列這段網址

stream_url = 'https://google-translate-proxy.herokuapp.com/api/tts?query='+t+'&language=zh-tw'

利用這段網址可以把訊息放在標記紅色的t位置,就可以變成語音檔了,例如我要(哈囉吳教授 最近很忙嗎)的reply語音訊息,就只要改一下的網址:

stream_url = 'https://google-translate-proxy.herokuapp.com/api/tts?query=哈囉吳教授 最近很忙嗎&language=zh-tw'

加上下列程式碼,就可以讓line bot回覆語音檔

 

import re
from urllib.parse import quote
def doing(event,text):
    patterns = ['你好','hi','hello','哈囉','嗨']
    r = ['教授最近好嗎','哈囉吳教授 最近很忙嗎','在做實驗室測試','這邊是中正大學','哈囉阿','帥哥 找我嗎?']
    n = random.randint(0,5)
    for pattern in patterns:
        if re.search(pattern,text.lower()):
                t =  quote(r[n])   #把中文字改成網頁的編碼格式,利用我import進來的urllib.parse模組的quote方法來幫忙我們做到
                stream_url = 'https://google-translate-proxy.herokuapp.com/api/tts?query='+t+'&language=zh-tw'
                message = AudioSendMessage(
                    original_content_url = stream_url,
                    duration=20000
                )
                line_bot_api.reply_message(event.reply_token,message)

 

這邊是我寫的一個涵式,主要是用來reply用的,下面是訊息事件的處理

.......
.......
.......
以面程式碼省略...
.......
.......
from urllib.parse import quote
# 處理訊息:
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
  if doing(event,event.message.text)!=None:
        return

import os
if __name__ == "__main__":
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

 

如下圖:

1540482117368.jpg

但是有個問題就是,不管長度多少都是顯示20秒,因為我在def涵式裡面是宣告duration=20000,而 duration是指音訊的時間長短設定 ,單位是 milliseconds (千分之一秒),所以可以依據文字長短,用條件判斷式來給予音訊長度,而上面的do涵式大致上利用了幾個套件方法幫助我們達到我們要的目的,re套件跟urllib.parse,前者主要是做正則表示判斷,例如re.search(pattern,text.lower()): 主要是要判斷patterns串列裡面內容跟text有沒有相同或是包含這些字,如果有的話,才進行下面判斷,而後者urllib.parse 要這個套件幫忙我把中文字轉成網頁接受的編碼,不然就會出錯,反證最後順利完成~因此來紀錄一下~

 

 

arrow
arrow
    文章標籤
    line bot python google 語音
    全站熱搜

    KV 發表在 痞客邦 留言(2) 人氣()