golang+html 微信公众号在网页中嵌套显示

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 

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容