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.將公眾號(hào)的文章內(nèi)容(全部html代碼)獲取到
2.然后通過對(duì)一些特殊數(shù)據(jù)進(jìn)行處理更哄,如data-src, <meta name="referrer" content="never">,顏色等進(jìn)行替換
3.對(duì)一些顏色等處理,然后將內(nèi)容再返回給前端痒筒,讓前端嵌套到網(wǎng)頁中進(jìn)行顯示荷并。
顯示的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 發(fā)起一個(gè)GET請(qǐng)求?
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?
}