1. 前言
大家好,我是安果!
之前寫過一篇文章,文中提出了一種方案,可以實現每天自動給微信群群發新聞早報
如何利用 Python 爬蟲實現給微信群發新聞早報?(詳細)
但是對於很多人來說,首先編寫一款 App 需要一定的移動端開發經驗,其次還需要另外編寫無障礙服務應用,如此顯得有一定難度的
本篇文章將介紹另外一種方案,即:利用前面文章介紹的 AutoJS 來實現自動給微信群傳送新聞早報
2. 爬蟲及服務
為了演示方便,這裡以百度熱搜為新聞早報資料來源,
使用 Requests + BeautifulSoup 按熱度,爬取熱度最高的 15 條資料
import requests
from bs4 import BeautifulSoup
def baidu_top_tipic():
"""百度熱搜"""
requests_page = requests.get('http://top.baidu.com/buzz?b=1&c=513&fr=topbuzz_b42_c513')
soup = BeautifulSoup(requests_page.text, "lxml")
# 查詢
soup_text = soup.find_all("div", class_='c-single-text-ellipsis', text=True)
top_list = []
for index, text in enumerate(soup_text):
top_list.append((str(index + 1) + "、" + text.string.strip()))
# 取熱度最高的15條資料
return '\n'.join(top_list[:15])
然後,利用 FastAPI 編寫獲取新聞早報的 API,部署到雲伺服器上(這裡以 CentOS 為例)
import uvicorn
from fastapi import FastAPI
from every_news import *
# pip3 install uvicorn
# pip3 install fastapi
# 例項化
app = FastAPI()
# 每日新聞
@app.get("/news")
async def rsc_api():
msg = get_news()
return {
"code": 200,
"msg": msg
}
if __name__ == '__main__':
uvicorn.run(app='news_api:app', host="0.0.0.0",
port=6789, reload=True, debug=True)
最後,執行下面命令使服務在後臺執行
# 命令列後臺執行
# 日誌目錄:/news_api.log
nohup python3 /xag/news_api.py > /news_api.log 2>&1 &
3. 自動化傳送群聊
在 VS Code 中編寫 AutoJS 指令碼
首先,定義一個給群聊傳送訊息的方法
PS:使用 click() 座標執行點選操作僅適用於 Android 7.0+
//API呼叫獲取新聞資料
var url = "http://host:6789/news";
//傳送群聊名稱
var group_name = "群聊名稱";
//傳送資訊給微信群
function send_wx_msg(group_name, send_msg) {
//如果休眠,喚醒裝置
//注意:為了保證耗電低,設定睡眠(10s無操作)
device.wakeUpIfNeeded()
//開啟微信
app.launch("com.tencent.mm");
text("微信").waitFor()
//點選進入到聊天介面
var chat_element_bounds = text(group_name).findOne().bounds();
//支援Android7.0+
click(chat_element_bounds.centerX(), chat_element_bounds.centerY());
sleep(3000)
id("auj").className("EditText").findOne().setText(send_msg)
sleep(3000)
//傳送訊息
text("傳送").click()
log("傳送成功!")
//返回到手機桌面
back();
home();
然後,在主執行緒中啟動一個新的執行緒,呼叫 API 介面,獲取資料後將資料傳送出去
//執行緒
threads.start(function () {
//獲取新聞
http.get(url, {}, function (res, err) {
//錯誤
if (err) {
log("抱歉!今天獲取新聞失敗。。。")
return;
}
log("今日新聞獲取成功!")
let html = res.body.string();
let msg = JSON.parse(html).msg;
send_wx_msg(group_name, msg)
});
})
接著,使用 VS Code 將原始碼匯入到手機裝置上
最後,選中原始檔 - 右鍵 - 更多 - 定時任務,設定定時任務即可
4. 最後
如此,即可以實現每天早上給指定群傳送新聞早報的功能
當然,如果涉及多個群聊的傳送,只需要使用 AutoJS 查詢多個目標群聊物件 + 頁面滑動,遍歷進行傳送資訊即可
另外,由於無障礙服務的不穩定性,可以在設定中 AutoJS 應用服務的優先順序,保證程式的穩定執行
如果你覺得文章還不錯,請大家 點贊、分享、留言 下,因為這將是我持續輸出更多優質文章的最強動力!
推薦閱讀