package com.songhaozhi.mayday.util; import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; import javax.imageio.ImageIO; import org.springframework.util.Assert; import com.songhaozhi.mayday.model.domain.ArticleCustom; import com.songhaozhi.mayday.model.dto.MaydayConst; import com.sun.syndication.feed.rss.Channel; import com.sun.syndication.feed.rss.Description; import com.sun.syndication.feed.rss.Item; import com.sun.syndication.io.FeedException; import com.sun.syndication.io.WireFeedOutput; /** * @author : 宋浩志 * @createDate : 2018年10月30日 */ public class MaydayUtil { /** * 推送百度 * * @param blog_url * 在搜索资源平台验证的站点 * @param token * 在搜索资源平台申请的推送用的准入密钥 * @param urls * 文章路径 * @return */ public static String baiduPost(String blogUrl, String token, String urls) { StringBuffer result = new StringBuffer(); PrintWriter out = null; BufferedReader br = null; try { URL url = new URL(" http://data.zz.baidu.com/urls?site=" + blogUrl + "&token=" + token + ""); // 打开和url之间的连接 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("User-Agent", "curl/7.12.1"); conn.setRequestProperty("Host", "data.zz.baidu.com*"); conn.setRequestProperty("Content-Type", "text/plain"); conn.setRequestProperty("Content-Length", "83"); // 设置是否向httpUrlConnection输出,设置是否从httpUrlConnection读入,此外发送post请求必须设置这两个 // 最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet, // post与get的 不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new PrintWriter(conn.getOutputStream()); // 发送请求参数即数据 out.print(urls.trim()); // 缓冲数据 out.flush(); // 获取URLConnection对象对应的输入流 InputStream is = conn.getInputStream(); // 构造一个字符流缓存 br = new BufferedReader(new InputStreamReader(is)); String line = ""; while ((line = br.readLine()) != null) { result.append(line); } // 关闭流 is.close(); // 断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。 // 固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。 conn.disconnect(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (out != null) { out.close(); } if (null != br) { br.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result.toString(); } /** * 转换文件大小 * * @param size * @return */ public static String parseSize(long size) { if (size < 1024) { return String.valueOf(size) + "B"; } else { size = size / 1024; } if (size < 1024) { return String.valueOf(size) + "KB"; } else { size = size / 1024; } if (size < 1024) { size = size * 100; return String.valueOf((size / 100)) + "." + String.valueOf((size % 100)) + "MB"; } else { size = size * 100 / 1024; return String.valueOf((size / 100)) + "." + String.valueOf((size % 100)) + "GB"; } } /** * 获取文件长和宽 * * @param file * file * @return String */ public static String getImageWh(File file) { try { BufferedImage image = ImageIO.read(new FileInputStream(file)); return image.getWidth() + "x" + image.getHeight(); } catch (Exception e) { e.printStackTrace(); return ""; } } /** * 生成rss * @param articles * @return */ public static String buildRss(List<ArticleCustom> articles)throws FeedException{ Assert.notEmpty(articles, "posts must not be empty"); Channel channel=new Channel(); channel.setFeedType("rss_2.0"); if(MaydayConst.OPTIONS.get("blog_name")==null) { channel.setTitle(""); }else { channel.setTitle(MaydayConst.OPTIONS.get("blog_name")); } if(MaydayConst.OPTIONS.get("blog_url")==null) { channel.setLink(""); }else { channel.setLink(MaydayConst.OPTIONS.get("blog_url")); } if(MaydayConst.OPTIONS.get("blog_url")==null) { channel.setUri(""); }else { channel.setUri(MaydayConst.OPTIONS.get("blog_url")); } if(MaydayConst.OPTIONS.get("seo_describe")==null) { channel.setDescription(""); }else { channel.setDescription(MaydayConst.OPTIONS.get("seo_describe")); } channel.setLanguage("zh-CN"); List<Item> items=new ArrayList<>(); for (int i = 0; i < articles.size(); i++) { Item item=new Item(); Description descr = new Description(); item.setTitle(articles.get(i).getArticleTitle()); item.setLink(MaydayConst.OPTIONS.get("blog_url")+"/post/"+articles.get(i).getArticleUrl()); item.setPubDate(articles.get(i).getArticleNewstime()); descr.setValue(articles.get(i).getArticleContent()); item.setDescription(descr); items.add(item); } channel.setItems(items); WireFeedOutput out = new WireFeedOutput(); return out.outputString(channel); } }