當前位置 主頁 > 網站技術 > 代碼類 > 最大化 縮小

    Java通過URL獲取公眾號文章生成HTML的方法

    欄目:代碼類 時間:2019-12-31 12:07

    說明:通過公眾號URL獲取的內容,文字可以正常顯示,但是圖片存在跨域訪問的問題,微信不允許跨域訪問公眾號圖片,所以需要將公眾號圖片從存入本地后,再上傳至OSS,然后把HTML中的圖片全部替換為自己的OSS地址就可以了

    這里就需要在后臺對HTML進行DOM的解析,需要用的Jsoup

    <dependency>
      <groupId>com.aliyun.oss</groupId>
      <artifactId>aliyun-sdk-oss</artifactId>
      <version>2.2.3</version>
     
     </dependency>
     <dependency>
       <groupId>org.jsoup</groupId>
       <artifactId>jsoup</artifactId>
       <version>1.9.2</version>
     </dependency>
    

    controller

    package com.iueang.controller;
     
    import java.io.File;
    import java.util.HashMap;
    import java.util.Map;
     
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
     
    import com.iueang.util.DownLoadImg;
    import com.iueang.util.GetBody;
    import com.iueang.util.OssUtil2;
    import com.iueang.util.UrlUtil;
    @Controller
    public class TestUrl {
     
     @RequestMapping("tohtml")
     public String tohtml() {
     return "html/index.html";
     }
     @RequestMapping("getHtml")
     @ResponseBody
     public Map<String,String> getHtml(String url){
     //獲取url文章生成文本
     String html = UrlUtil.getAccess(url);
     String reg = "<html>(.*?)</html>";
     String head=GetBody.getSubUtilSimple(html, reg);
     String HTTPHOST="http://yueang2.oss-cn-qingdao.aliyuncs.com/testimg/";
     String newsBody=head;
     Document doc = Jsoup.parse(newsBody);
        Elements pngs = doc.select("img[data-src]");
        System.out.println(pngs);
        for (Element element : pngs) {
        //獲取圖片地址
         String imgUrl = element.attr("data-src");
         //下載圖片到本地
         String filename=DownLoadImg.downloadPicture(imgUrl);
      File file =new File("D:\\m2\\"+filename);
      //上傳至oss
      Boolean flag = OssUtil2.uploadFileToOss(file, "testimg/"+filename);
      if(flag) {
      file.delete();
      }
         String newsrc =HTTPHOST + filename;
         element.attr("src", newsrc);
        }
        newsBody = doc.toString();
        System.out.println(newsBody);
     Map<String,String> map=new HashMap<String, String>();
     map.put("resultHtml", newsBody);
     return map;
     
     }
    }
    

    util工具類

    GetBody類

    package com.iueang.util;
     
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
     
    public class GetBody {
     
     public static String getSubUtilSimple(String html, String reg) {
      Pattern pattern = Pattern.compile(reg);// 匹配的模式
         Matcher m = pattern.matcher(html);
         while(m.find()){
           return m.group(1);
         }
         return "";
     }
     
    }
    

    OssUtil類

    package com.iueang.util;
     
    import java.io.File;
    import java.util.HashMap;
    import java.util.Map;
     
    import com.aliyun.oss.OSSClient;
    import com.aliyun.oss.model.ObjectMetadata;
     
    public class OssUtil2 { 
     //以下幾個參數值必填,參考文章最后文檔
     static String endpoint = "http://oss-cn-qingdao.aliyuncs.com";
     static String accessKeyId = "oss獲取";
     static String accessKeySecert = "oss獲取";
     static String bucketName = "yueang2";
     
     /**
     * 上傳單個文件到OSS
     * @param file 要上傳的文件File對象
     * @param objName 上傳后的文件名,包含文件夾,比如 game/game/test.txt
     * @return
     */
     public static boolean uploadFileToOss(File file, String objName) {
       try {
         OSSClient ossClient = null;
         try {
           ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecert);
         }catch (Exception e){
           e.printStackTrace();
         }
         ObjectMetadata meta = new ObjectMetadata();
         ossClient.putObject(bucketName, objName, file, meta);
         ossClient.shutdown();
       } catch (Exception e) {
         e.printStackTrace();
         return false;
       }
       return true;
     }
    }
    
    
青海十一选五开奖数据 上海天天彩选4中奖规则 排列3字谜 真人捕鱼游戏大圣闹海 qq麻将怎么下载不了了 内蒙古十一选五任五遗漏查询 如何看懂股票的k线 真人打麻将四人 北京pk赛车技巧论坛 华东15选5玩法 王者捕鱼现金版