Java如何通过URL获取公众号文章生成HTML
创始人
2024-12-23 23:02:52
0次

说明:通过公众号URL获取的内容,文字可以正常显示,但是图片存在跨域访问的问题,微信不允许跨域访问公众号图片,所以需要将公众号图片从存入本地后,再上传至OSS,然后把HTML中的图片全部替换为自己的OSS地址就可以了

这里就需要在后台对HTML进行DOM的解析,需要用的Jsoup

 com.aliyun.oss  aliyun-sdk-oss  2.2.3     org.jsoup   jsoup   1.9.2

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;@Controllerpublic class TestUrl {  @RequestMapping("tohtml") public String tohtml() { return "html/index.html"; } @RequestMapping("getHtml") @ResponseBody public Map getHtml(String url){ //获取url文章生成文本 String html = UrlUtil.getAccess(url); String reg = "(.*?)"; 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 map=new HashMap(); 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; }}

DownLoadImg类

package com.iueang.util; import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.net.MalformedURLException;import java.net.URL;import java.util.UUID; import sun.misc.BASE64Encoder;public class DownLoadImg { public static String downloadPicture(String urlList) {  String filename="iueang"+UUID.randomUUID().toString()+".png";  String path="D:/m2/"+filename;     URL url = null;     try {       url = new URL(urlList);       DataInputStream dataInputStream = new DataInputStream(url.openStream());       FileOutputStream fileOutputStream = new FileOutputStream(new File(path));       ByteArrayOutputStream output = new ByteArrayOutputStream();        byte[] buffer = new byte[1024];       int length;        while ((length = dataInputStream.read(buffer)) > 0) {         output.write(buffer, 0, length);       }       BASE64Encoder encoder = new BASE64Encoder();       String encode = encoder.encode(buffer);       fileOutputStream.write(output.toByteArray());       dataInputStream.close();       fileOutputStream.close();     } catch (MalformedURLException e) {       e.printStackTrace();     } catch (IOException e) {       e.printStackTrace();     }     System.out.println("Download返回的filname="+filename); return filename;   }}

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...