偶然间看了下新闻联播,发现有些信息还挺有用的,就做了个exe,让电脑任务计划程序每天打开电脑就自动记事本弹出咋天播放过的新闻内容
Maven
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna-platform -->
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna-platform</artifactId>
<version>5.8.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna -->
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.8.0</version>
</dependency>
MainController
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinDef;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.KeyEvent;
import java.io.IOException;
import java.util.Calendar;
/**
* @author YuLF
* @version 1.0
* @date 2021/5/11 22:33
*/
public class MainController {
private static final String EVERYDAY_NEWS = "http://mrxwlb.com/%s/";
/**
* 以文本模式获取每天的新闻联播主要播放内容
*/
public static void main(String[] args) throws Exception {
//1.获得咋天新闻的URL
String yesterdayNewsAddr = String.format(EVERYDAY_NEWS, getYesterdayNews());
//2.获得DOM
Document dom = getDom(yesterdayNewsAddr);
//3.获得标题内容
assert dom != null;
String newsContent = resolverContent(dom);
//4.调用记事本显示
callWindow(newsContent);
}
/**
* 把文本设置到剪贴板(复制)
*/
public static void setClipboardString(String text) {
/* 获取系统剪贴板 */
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
/* 封装文本内容 */
Transferable trans = new StringSelection(text);
/* 把文本内容设置到系统剪贴板 */
clipboard.setContents(trans, null);
}
/**
* 显示记事本窗口
*
* @param displayContent 显示内容
*/
public static void callWindow(String displayContent) throws Exception {
setClipboardString(displayContent);
Runtime run = Runtime.getRuntime();
//打开记事本程序
Process exec = run.exec("notepad.exe");
WinDef.HWND hwnd = User32.INSTANCE.FindWindow(null, "Untitled - Notepad");
//显示记事本窗口
User32.INSTANCE.ShowWindow(hwnd, 9);
User32.INSTANCE.SetForegroundWindow(hwnd);
Robot r = new Robot();
//Ctrl+v
r.setAutoWaitForIdle(true);
r.keyPress(17);
r.keyPress(KeyEvent.VK_V);
r.keyRelease(KeyEvent.VK_V);
r.keyRelease(17);
//等待30秒自动关闭记事本窗口
/*r.delay(30000);
exec.destroy();*/
}
/**
* 解析获得的新闻内容
*
* @param dom 网页dom
*/
private static String resolverContent(Document dom) {
Elements elements = dom.select(".entry-content ul li");
StringBuilder sb = new StringBuilder();
String newsTitle = dom.select(".entry-content p").get(0).select("strong").text();
sb.append("【").append(newsTitle).append("】").append("\r\n");
int count = 0;
for (Element e : elements) {
sb.append((++count)).append(".").append(e.text()).append("\r\n");
}
return sb.toString();
}
private static String getYesterdayNews() {
Calendar c = Calendar.getInstance();
return String.format("%s年%s月%s日新闻联播文字版", c.getWeekYear(), c.get(Calendar.MONTH) + 1, c.get(Calendar.DAY_OF_MONTH) - 1);
}
/**
* 获得Dom
*
* @param url 网页URL
* @return 返回网页DOM
*/
public static Document getDom(String url) {
Connection conn;
conn = Jsoup.connect(url).timeout(80000);
//模拟客户端请求头
conn.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
conn.header("Accept-Encoding", "gzip, deflate, sdch");
conn.header("Accept-Language", "zh-CN,zh;q=0.8");
conn.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36");
try {
return conn.get();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
exe(需要装java)
https://download.youkuaiyun.com/download/qq_42235984/18610660