再也不怕和老外交流了!我用python實現一個微信聊天翻譯助手!

来源:https://www.cnblogs.com/7758520lzy/archive/2020/01/05/12152712.html
-Advertisement-
Play Games

當你遇到 一些外國小哥哥小姐姐很心動、想結識交流,但英語水平或其他水平還在提升階段,這個小工具可以幫你渡過難關! Teach you how to flirt gracefully with code 。在本文中,我將詳細講解這個翻譯的具體實現!對於實現的主要功能: 通過微信聊天監聽一些關鍵的口令, ...


當你遇到 一些外國小哥哥小姐姐很心動、想結識交流,但英語水平或其他水平還在提升階段,這個小工具可以幫你渡過難關! Teach you how to flirt gracefully with code 。在本文中,我將詳細講解這個翻譯的具體實現!對於實現的主要功能: 通過微信聊天監聽一些關鍵的口令,開啟自己說的話的翻譯模式和對面說的話的翻譯模式!

設計思路:前面有了調用翻譯,我們可以和 翻譯介面 和 微信的api 結合起來做一些有趣的事情,主要就是利用微信api對 自己發的消息進行監測 ,然後有些 關鍵字判斷 作為開關、修改翻譯語言等等(邏輯可以自己設置),接著去 請求有道翻譯

,利用程式自動發送翻譯的話給對方。然後再假裝把自己當成一無所知的萌新------看你怎麼操作了(手動滑稽)

當然,如果你有個南韓朋友,他說的話自動翻成中文,發給你,你說的話自動翻成韓文再發給他。有本事有資源的小哥哥小姐姐可以去 試試洋妞洋娃娃 !

詳細設計

既然前面的思路很明確了,那麼咱麽一步一步來,如何攻剋其中的種種問題。主要兩個方面, 一個 是單獨的 微信api 和單獨的 請求有道翻譯一些其他規則 , 另一 方面是將兩者整合起來,可以讓人人性化的操作!

當然解決了這兩項之後,你就可以自己實現一些邏輯開關,而我就用我的邏輯簡單的實現了一下!

環境: win/linux 編譯器: pycharm 額外模塊: itchat、requests

微信api

微信方公開了微信網頁版的api。python中的 itchat 模塊就可以直接使用。當然摸索起來也是需要時間。有些必要的學習步驟我就放上了。

1 . 對於itchat模塊的掃碼登錄。後面可以不加參數,但是加了這個hotReaload之後短期內可以不需要掃碼,不然 每次啟動掃碼耽誤 效率。

import itchat
itchat.auto_login(hotReload=True)
複製代碼

2 . 至於還有一個發消息的api也很簡單,後面的userName是用戶的唯一的被加密的欄位,當然,文件傳輸助手有專門id,還有其他搜索好友名通過返回的json串也可以獲得用的該id。總之這個欄位很好獲得。

itchat.send("你好",toUserName = userName)
複製代碼

3 . 最重要的就是消息的監聽了,對於消息監聽,大部分百度到的結果都是將程式做成機器人,監聽對面消息然後自動回覆,但是筆者要的不是這個效果,我是想監聽自己移動端微信發的消息然後進行分析啥啥啥的。

對於正常的監聽都是這樣的

# 註冊消息響應事件,消息類型為itchat.content.TEXT,即文本消息。也可以監聽多種類型可自行百度
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
   return msg['Text']#return “字元串” 當接受到對面消息時候,就會發過去充當機器人 
itchat.run()
複製代碼

但是,如果你如果再其中print(msg).你會發現你自己發的消息也會被監聽到,這裡的就是 from you send to he/she 。所以可以獲取裡面內容自己 利用itchat 發送 send 的 api 主動發送消息。當然,你發送的內容主體等各種信息都在裡面,py正好也很方便操作字典。

那麼這部分的最終設計是這樣的: 其中如果是對面發來的消息我們直接return 字元串就會發送,如果是自己發的消息,自己send調用發送信息即可!

# 註冊消息響應事件,消息類型為itchat.content.TEXT,即文本消息
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
     #xxxxx 邏輯處理如果自己發
     itchat.send(transtr, toUserName=msg['ToUserName'])#將字元串transtr發給你發的人
     #xxxxx 邏輯處理如果ta發
     return transtr#這個加上是如果對面發消息的監聽。也就是對面發消息過來你直接return就會自動發送
itchat.run()
複製代碼

有道api

對於其他的前面已經分析過,這裡需要註意的是翻譯成的語言,比如中翻譯英( en )、日語( ja)、韓語( ko )等等。所以你點幾個典型的放到邏輯處理裡面就好了。

整體邏輯

當然,我想寫個邏輯可以控制發送翻譯的開始、結束。所以我監聽用 兩個個Boolean類型 控制整個開始和暫停,其中 jud 用來判斷自己是否開啟自己說的話的裝(b)翻譯模式。而參數 isreturn 用來控制判斷是否翻譯洋娃娃說的話。關鍵詞這裡我選 開始 作為開始, 停止 作為結束控制自己說的話。而 翻譯模式 , 停止翻譯 則用來控制開始和停止說的話。 英語、日語、韓語、法語 、等作為翻譯語言更改的關鍵詞。

那麼,一旦程式跑起來,一切都在我們的掌控之中,當然,測試過效率,雖然那個itchat,和有道翻譯的數據都是通過http傳輸的,但是其實 效率還行 ,對於聊天來說傳輸效率是可以接受的。延遲不算很大,能滿足基本需求。但是切記不要太快太頻繁哈,防止有道把你的ip封了你就無法請求了。

代碼和運行結果

就這樣,我把項目的代碼完整的供出來。

項目github地址(微信模塊): github.com/javasmall/p… 歡迎star!

#更多請關註公眾號:bigsai
import itchat
import requests
import hashlib
import time
import urllib.parse

jud=False#預設是先不開啟
isreturn=False#是否回覆
To='en'#翻譯成的語言預設是英語

def nmd5(str):#md5加密
    m = hashlib.md5()
    b = str.encode(encoding='utf-8')
    m.update(b)
    str_md5 = m.hexdigest()
    return  str_md5
def formdata(transtr):
    # 待加密信息
    global To
    headerstr = '5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
    bv=nmd5(headerstr)
    ts=str(round(time.time()*1000))
    salt=ts+'90'
    strexample='fanyideskweb'+transtr+salt+'n%A-rKaT5fb[Gy?;N5@Tj'
    sign=nmd5(strexample)
    i=len(transtr)
    dict={'i':transtr,'from':'AUTO','to':To,'smartresult': 'dict',
          'client':'fanyideskweb',
          'salt':salt,
          'sign':sign,
          'ts':ts,
          'bv':bv,
          'doctype':'json',
          'version':'2.1',
          'keyfrom':'fanyi.web',
          'action':'FY_BY_REALTlME'
    }
    return dict
url='http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
 'Referer':'http://fanyi.youdao.com/',
 'Origin': 'http://fanyi.youdao.com',
 'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
 'X-Requested-With':'XMLHttpRequest',
 'Accept':'application/json, text/javascript, */*; q=0.01',
 'Accept-Encoding':'gzip, deflate',
 'Accept-Language':'zh-CN,zh;q=0.9',
 'Connection': 'keep-alive',
 'Host': 'fanyi.youdao.com',
 'cookie':'_ntes_nnid=937f1c788f1e087cf91d616319dc536a,1564395185984; OUTFOX_SEARCH_USER_ID_NCOO=; [email protected]; JSESSIONID=; ___rl__test__cookies=1'
 }
itchat.auto_login(hotReload=True)#登錄


# 註冊消息響應事件,消息類型為itchat.content.TEXT,文本消息
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
    # 返回信息調用信息
    global jud
    global To
    global  isreturn
    text=msg['Text']
    dict = formdata(text)
    if "翻譯模式" in text:
        isreturn =True
    elif "停止翻譯" in text:
        isreturn=False
    if  "開始" in text:
        jud=True
    elif  "停止" in text:
        jud=False
    elif "英語" in text:
        To = 'en'
    elif "日語" in text:
        To = 'ja'
    elif "韓語" in text:
        To = 'ko'
    elif "法語" in text:
        To = 'fr'
    if jud:#說明需要運行
        dict['to']=To
        dict['from']= 'AUTO'
        dict = urllib.parse.urlencode(dict)
        dict = str(dict)
        req = requests.post(url, timeout=1, data=dict, headers=header)
        val = req.json()
        transtr = val['translateResult'][0][0]['tgt']
        print(msg)
        itchat.send(transtr, toUserName=msg['ToUserName'])
    ##返回監聽對面說的話
    if isreturn:
        dict['from']='AUTO'
        dict['to']='zh-CHS'##翻譯成中文
        dict = urllib.parse.urlencode(dict)
        # dict = str(dict)
        req = requests.post(url, timeout=1, data=dict, headers=header)
        val = req.json()
        transtr = val['translateResult'][0][0]['tgt']
        print(msg)
        return 'ta說:'+str(transtr)#這個加上是如果對面發消息的監聽。比如你是雙向翻譯可以嘗試下
# 綁定消息響應事件後,讓itchat運行起來,監聽消息
itchat.run()

複製代碼

鑒於筆者真沒有洋娃娃所以只能模擬了 簡單運行測試結果(拿隊友手機自導自演)

結語

當然,這或許可能很有趣,又或許可能很無聊很簡單,只是不同的人可能有不同的看法,不同的時間段、不同的交際都可能有不同的看法,所以請各位大佬不喜勿噴,當然,如果有改進的建議,還請指出!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本系列筆記主要基於《深入理解Java虛擬機:JVM高級特性與最佳實踐 第2版》,是這本書的讀書筆記。 記憶體分配一般關註的是對象在堆上分配的情況,對象主要分配在新生代的Eden區中,如果啟用了本地線程分配緩衝,將按線程優先在TLAB上分配。少數情況下也會直接分配在老年代中,這取決於使用的垃圾收集器組合 ...
  • 0x00 抓包分析 簡單的搜索之後發現,很多參數都是登陸上面這個請求返回的值,這個請求在輸入完賬號游標到達密碼框時就會生成! 0x01 加密邏輯分析 搜索su=可以很快找到加密的位置,上圖看到e.su和e.sp都是由sinaSSOEncoder這個函數生成的,搜索sinaSSOEncoder發現就是 ...
  • 1.python 讀取Excel text.xlsx內容如下: 運行結果: 2.python 寫入Excel 運行結果: rw r r 1 root root 17920 8月 6 11:53 partitions.xls 3.python Excel寫入表內 user_zw.xls的內容: 查詢表 ...
  • 首先需要安裝三個包: 1.製作英文字母的詞雲 效果圖: 代碼實現: 其中,test.txt文件內容如下 2.製作中文的詞雲 效果圖: 代碼實現: 其中alice.txt文件內容: 1.png模板內容: 看著還挺像。 ...
  • 1.用python調用python腳本 另外一個python腳本b.py如下: 運行結果: 2.python調用shell方法os.system() shell腳本如下: 運行結果: 3.python調用shell方法os.popen() 運行結果: os.system.popen() 這個方法會打 ...
  • 1 #include<stdio.h> 2 #define N 5 3 main() 4 { 5 int a[N]; 6 int j, i,m; 7 for (i = 0; i < N; i++) 8 { 9 scanf("%d", a + i); 10 } 11 for (i = 0; i < N ...
  • Access Flags 占2個位元組,所以該位元組碼文件的訪問標誌是00 21,0x0021在 Access Flags 中是0x0020和0x0001的並集,表示 ACC PUBLIC與 ACC SUPER合併的結果。說明該類的聲明修飾是public並且繼承Object ...
  • 有關ChakraCore介紹請移步:https://github.com/Microsoft/ChakraCore 使用案例GitHub源碼:https://github.com/pyAppman/ChakraCore 本文主要講下python調用ChakraCore.dll 參考文獻有:https ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...