Java通过URL获取公众号文章生成HTML的方法

发布时间:2020-09-03 17:57:44 作者:暴怒大吊
来源:脚本之家 阅读:192

说明:通过公众号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;
 }
}

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. php获取url地址的方法
  2. php解析url以及获取url中的参数值的方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java 公众号文章 ava

上一篇:mysql双机热备实现方案【可测试】

下一篇:python 解决flask uwsgi 获取不到全局变量的问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》