func GetArticleOtherUrl(wxUrl string) (content string, err error) {
bytes, err := utils.Get(wxUrl, nil)
if err != nil {
return "", err
}
content = string(bytes)
content = strings.Replace(content, "data-src=", "src=", len(content))
content = strings.Replace(content, "origin-when-cross-origin", "never", len(content))
content = strings.Replace(content, "strict-origin-when-cross-origin", "never", len(content))
content = strings.Replace(content, "qr_code_pc\"", "qr_code_pc\" style='display: none;'", len(content))
content = strings.Replace(content, "rich_media_area_primary\"", "rich_media_area_primary\" style='background-color: #000 !important;'", len(content))
return content, nil
}
说明
1.将公众号的文章内容(全部html代码)获取到
2.然后通过对一些特殊数据进行处理,如data-src, <meta name="referrer" content="never">,颜色等进行替换
3.对一些颜色等处理,然后将内容再返回给前端,让前端嵌套到网页中进行显示。
显示的html eg:
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="referer" content="never">
<title>Title</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
</head>
<body>
<div style="background-color: #000000" id="c"></div>
<script>
$.ajax({
url: "http://192.168.3.48:8856/article/getArticleOtherUrl?wxUrl=https://mp.weixin.qq.com/s/BhTRCcMrrCptlQj0_EINew",
type: "get",
success: function (t) {
console.log(t)
if (t.code == 0) {
var content = t.data;
$("#c").html(content);
}
},
error: function (t) {
console.log("err:" + t)
}
});
</script>
</body>
</html>
Get 工具
// Get 发起一个GET请求
func Get(url string, headers map[string]string) (response []byte, err error) {
client := http.Client{Timeout: 30 * time.Second}
req, err := http.NewRequest("GET", url, nil)
if err != nil {
return nil, err
}
if len(headers) > 0 {
for key, val := range headers {
req.Header.Set(key, val)
}
}
resp, err := client.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var i int
TRY:
body, err := io.ReadAll(resp.Body)
if err != nil {
i++
if i < 3 {
time.Sleep(time.Second)
goto TRY
}
return nil, err
}
return body, nil
}