欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java通過(guò)URL獲取公眾號(hào)文章生成HTML的方法

 更新時(shí)間:2019年12月31日 10:13:07   作者:暴怒大吊  
這篇文章主要介紹了Java通過(guò)URL獲取公眾號(hào)文章生成HTML的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

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

這里就需要在后臺(tái)對(duì)HTML進(jìn)行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 { 
 //以下幾個(gè)參數(shù)值必填,參考文章最后文檔
 static String endpoint = "http://oss-cn-qingdao.aliyuncs.com";
 static String accessKeyId = "oss獲取";
 static String accessKeySecert = "oss獲取";
 static String bucketName = "yueang2";
 
 /**
 * 上傳單個(gè)文件到OSS
 * @param file 要上傳的文件File對(duì)象
 * @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;
   }
}
 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java經(jīng)典問(wèn)題:連個(gè)字符串互為回環(huán)變位

    java經(jīng)典問(wèn)題:連個(gè)字符串互為回環(huán)變位

    連個(gè)字符串互為回環(huán)變位經(jīng)常出現(xiàn)在java程序員面試中,這個(gè)是考驗(yàn)程序員的解題思路和方法的最經(jīng)典的一題,小編為大家詳細(xì)分析一下,一起來(lái)學(xué)習(xí)吧。
    2017-11-11
  • Java遞歸簡(jiǎn)單實(shí)現(xiàn)n的階乘

    Java遞歸簡(jiǎn)單實(shí)現(xiàn)n的階乘

    這篇文章主要介紹了Java遞歸簡(jiǎn)單實(shí)現(xiàn)n的階乘,遞歸(recursion)就是子程序(或函數(shù))直接調(diào)用自己或通過(guò)一系列調(diào)用語(yǔ)句間接調(diào)用自己,是一種描述問(wèn)題和解決問(wèn)題的基本方法,下面我們舉一個(gè)小小的例子詳情了解一下,需要的朋友可以參考下
    2021-12-12
  • SpringBoot框架DataSource多數(shù)據(jù)源配置方式

    SpringBoot框架DataSource多數(shù)據(jù)源配置方式

    這篇文章主要介紹了SpringBoot框架DataSource多數(shù)據(jù)源配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java編程實(shí)現(xiàn)統(tǒng)計(jì)一個(gè)字符串中各個(gè)字符出現(xiàn)次數(shù)的方法

    Java編程實(shí)現(xiàn)統(tǒng)計(jì)一個(gè)字符串中各個(gè)字符出現(xiàn)次數(shù)的方法

    這篇文章主要介紹了Java編程實(shí)現(xiàn)統(tǒng)計(jì)一個(gè)字符串中各個(gè)字符出現(xiàn)次數(shù)的方法,涉及java針對(duì)字符串的遍歷、判斷、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • Mybatis通過(guò)Spring完成代理類注入的流程分析

    Mybatis通過(guò)Spring完成代理類注入的流程分析

    這篇文章主要介紹了Mybatis通過(guò)Spring完成代理類注入的流程分析,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • Java8中使用一行代碼讀取文件

    Java8中使用一行代碼讀取文件

    這篇文章主要介紹了Java8中使用一行代碼讀取文件,要注意,本文介紹的方法不適合讀取很大的文件,因?yàn)榭赡艽嬖趦?nèi)存空間不足的問(wèn)題,需要的朋友可以參考下
    2015-03-03
  • 帶你快速上手Servlet

    帶你快速上手Servlet

    這篇文章主要介紹了帶你快速上手Servlet,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java二維數(shù)組計(jì)算集合總結(jié)

    Java二維數(shù)組計(jì)算集合總結(jié)

    本篇文章給大家整理了關(guān)于Java二維數(shù)組計(jì)算集合的內(nèi)容總結(jié),有需要的讀者們可以參考下。
    2018-02-02
  • MyBatis-Plus 修改和添加自動(dòng)填充時(shí)間方式

    MyBatis-Plus 修改和添加自動(dòng)填充時(shí)間方式

    這篇文章主要介紹了MyBatis-Plus 修改和添加自動(dòng)填充時(shí)間方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java?io文件操作從文件讀取數(shù)據(jù)的六種方法

    java?io文件操作從文件讀取數(shù)據(jù)的六種方法

    這篇文章主要為大家介紹了java?io操作總結(jié)從文件讀取數(shù)據(jù)的六種方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-03-03

最新評(píng)論