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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java实现微信公众号获取临时二维码功能示例

    本文实例讲述了Java实现微信公众号获取临时二维码功能.分享给大家供大家参考,具体如下: 我们做微信公众号开发时为了推广,可能需要服务端去生成公众号的临时二维码,然后再进行一定的图片合成操作,制作一张漂亮的推广海报.别人扫一下二维码进入关注公众号界面,点击关注我们可以拿到二维码里面的信息官网地址 记录一下获取临时二维码操作过程. 1.获取access_token 上一篇文章写了 就不赘述了: 2.根据access_token获取二维码ticket,获取到了二维码ticket就基本山是成功了: 3

  • Java实现的微信公众号获取微信用户信息示例

    本文实例讲述了Java实现的微信公众号获取微信用户信息.分享给大家供大家参考,具体如下: 注:  这里获取用户信息方式和网页授权获取用户信息方式不同.两个access_token不同,返回的结果也不同. 我们很多场景可能需要用户信息 微信公众号获取微信用户信息需要的条件: 1.获取用户openId.可以在用户绑定APP的时候用code换取,也可以在用户关注公众号的时候获取,或者小程序授权时获取.微信公众号code换取openId(详见附录) 2.获取该微信公众号 access_token.方法可

  • 详细Java批量获取微信公众号方法

    最近需要爬取微信公众号的文章信息.在网上找了找发现微信公众号爬取的难点在于公众号文章链接在pc端是打不开的,要用微信的自带浏览器(拿到微信客户端补充的参数,才可以在其它平台打开),这就给爬虫程序造成很大困扰.后来在知乎上看到了一位大牛用php写的微信公众号爬取程序,就直接按大佬的思路整了整搞成java的了.改造途中遇到蛮多细节问题,拿出来分享一下. 系统的基本思路是在安卓模拟器上运行微信,模拟器设置代理,通过代理服务器拦截微信数据,将得到的数据发送给自己的程序进行处理. 需要准备的环境:node

  • Java微信公众号开发之通过微信公众号获取用户信息

    最近由于公司业务,就开始研究微信开发的流程,说实话,这东西刚开始看到时候和看天书的一样,总算,看了一天的文档,测试代码终于出来了. 1.首先需要到微信网站去设置一下,我是直接用的微信测试号. 接口配置信息必须要填写的,所以说必须能将自己的服务发布出去 到此微信配置完毕,接下来就是直接上代码了 2.获取用户信息的方式一共是两种,前提都是用户关注微信公众号,一种是静默获取(snsapi_base,这种方式只能获取openid),另一种是授权获取(snsapi_userinfo,可以获取用户的详细信息

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

    说明:通过公众号URL获取的内容,文字可以正常显示,但是图片存在跨域访问的问题,微信不允许跨域访问公众号图片,所以需要将公众号图片从存入本地后,再上传至OSS,然后把HTML中的图片全部替换为自己的OSS地址就可以了 这里就需要在后台对HTML进行DOM的解析,需要用的Jsoup <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId&g

  • Java微信支付之公众号支付、扫码支付实例

    微信支付现在已经变得越来越流行了,随之也出现了很多以可以快速接入微信支付为噱头的产品,不过方便之余也使得我们做东西慢慢依赖第三方,丧失了独立思考的能力,这次打算分享下我之前开发过的微信支付. 一 .H5公众号支付 要点:正确获取openId以及统一下单接口,正确处理支付结果通知,正确配置支付授权目录 H5的支付方式是使用较为广泛的方式,这种支付方式主要用于微信内自定义菜单的网页,依赖手机上安装的微信客户端,高版本的微信才支持微信支付,下面按我的流程注意说明 1  编写用于支付的页面,由于是测试用

  • 如何通过50行Python代码获取公众号全部文章

    前言 我们平时阅读公众号的文章会遇到一个问题--阅读历史文章体验不好. 我们知道爬取公众号的方式常见的有两种:通过搜狗搜索去获取,缺点是只能获取最新的十条推送文章.通过微信公众号的素材管理,获取公众号文章.缺点是需要申请自己的公众号. 今天介绍一种通过抓包PC端微信的方式去获取公众号文章的方法.相比其他的方法非常方便. 如上图,通过抓包工具获取微信的网络信息请求,我们发现每次下拉刷新文章的时候都会请求 mp.weixin.qq.com/mp/xxx (公众号不让添加主页链接,xxx表示profi

  • 微信小程序获取公众号文章列表及显示文章的示例代码

    微信小程序中如何打开公众号中的文章,步骤相对来说不麻烦. 1.公众号设置 小程序若要获取公众号的素材,公众号需要做一些设置. 1.1 绑定小程序 公众号需要绑定目标小程序,否则无法打开公众号的文章. 在公众号管理界面,点击小程序管理 --> 关联小程序 输入小程序的AppID搜索,绑定即可. 1.2 公众号开发者功能配置 (1) 在公众号管理界面,点击开发模块中的基本配置选项. (2) 开启开发者秘密(AppSecret),注意保存改秘密. (3) 设置ip白名单,这个就是发起请求的机器的外网i

  • 使用Python获取公众号下所有的文章

    导出公众号所有文章 随着互联网的不断发展,网络上兴起了很多的自媒体平台.不用我说,相信大家也能知道当下非常流行的平台都有哪些. 可以说凡是比较知名的自媒体,都有自己的公众号.但是平台的创新与出现可谓层出不穷,如果需要入住平台,肯定需要获取原平台的历史资源. 比如说微信公众号,我们就需要获取微信公众号的文章,将其导出后,入住其他的平台,那么如何获取自己公众号下的所有文章呢? 开发者ID与开发者密码 其实,公众号给我们开发中提供了非常友好的接口,并不需要我们一个一个去爬,就可以获取文章的所有链接.

  • python实现给微信公众号发送消息的方法

    本文实例讲述了python实现给微信公众号发送消息的方法.分享给大家供大家参考,具体如下: 现在通过发微信公众号信息来做消息通知和告警已经很普遍了.最常见的就是运维通过zabbix调用shell脚本给微信发消息,起到告警的作用.当要发送的信息较多,而且希望按照指定格式显示的好看一点的时候,shell处理起来,个人感觉不太方便.于是我用Python重写了发微信的功能. #coding:utf-8 import urllib2 import json import sys def getMsg():

  • Python 抓取微信公众号账号信息的方法

    搜狗微信搜索提供两种类型的关键词搜索,一种是搜索公众号文章内容,另一种是直接搜索微信公众号.通过微信公众号搜索可以获取公众号的基本信息及最近发布的10条文章,今天来抓取一下微信公众号的账号信息 爬虫 首先通过首页进入,可以按照类别抓取,通过"查看更多"可以找出页面链接规则: import requests as req import re reTypes = r'id="pc_\d*" uigs="(pc_\d*)">([\s\S]*?)&

  • Java Spring Controller 获取请求参数的几种方法详解

    Java Spring Controller 获取请求参数的几种方法  1.直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交.若"Content-Type"="application/x-www-form-urlencoded",可用post提交 url形式:http://localhost:8080/SSMDemo/demo/addUser1?username=lixiaoxi&password=1

  • 通过微信公众平台获取公众号文章的方法示例

    我之前自己维护了一个公众号,但因为个人关系很久没有更新了,今天上来缅怀一下,却偶然发现了一个获取微信公众号文章的方法. 之前获取方法有很多,通过搜狗.清博.网页端.客户端等等都还可以,这个可能并没有其他的优秀,但是操作简单,很容易理解. so. 首先需要有一个微信公众平台的账号 微信公众平台:https://mp.weixin.qq.com/ 登陆之后,进入首页,点击新建群发. 选择自建图文: 似乎像是公众号运营教学了 进入编辑页面之后,点击超链接 弹出选择框,我们在框中输入对应的公众号名字,即

随机推荐