目录
1. 准备获取纸黄金数据的api,配置Linux下的jdk环境
这里jdk的环境配置不是重点,不做介绍,请参考本人另一教程。
linux安装jdk,并配置java环境变量
2.编写java程序代码
2.1 建立java项目
java项目的建立,代码的编写均在Windows 10 下进行,使用得IDE是idea。如图所示,接下来的操作一路next即可,里不再赘述。
2.2 建立lib目录,指定jar存放位置
再选择file,点击project structure (或者快捷键Ctrl+Alt+Shift+S),打开如下;添加刚才建立的lib目录为jar包存放位置。
配置好后,将json解析的包放到lib中(文末有链接)
2.3 编写调用api的代码
public static void interfaceUtil(String path) {
try {
URL url = new URL(path);
//打开和url之间的连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");//GET和POST必须全大写
conn.connect();
//获取URLConnection对象对应的输入流
InputStream is = conn.getInputStream();
//构造一个字符流缓存
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = new String(br.readLine().getBytes(), "UTF-8");//解决中文乱码问题
/*
*
*这里是对得到的json字符串进行解析,下一点有介绍
*
*/
//关闭流
is.close();
//断开连接
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
2.4 JSONObject解析获取的json数据
try {
JSONArray jsonArray = new JSONObject(str).getJSONArray("result");
JSONObject jsonObject1 = (JSONObject) jsonArray.get(0);
String variety = (String) jsonObject1.getJSONObject("2").get("variety");//名称
String maxpri = (String) jsonObject1.getJSONObject("2").get("maxpri");//最高价
String minpri = (String) jsonObject1.getJSONObject("2").get("minpri");//最低价
String quantpri = (String) jsonObject1.getJSONObject("2").get("quantpri");//涨跌幅
String time = (String) jsonObject1.getJSONObject("2").get("time");//更新时间
String gold = "品种: " + variety + " 最高价: " + maxpri + " 最低价: " + minpri + " 涨跌幅: " + quantpri + " 更新时间: " + time;
System.out.println(gold);
} catch (JSONException e) {
e.printStackTrace();
}
2.5 main方法中调用并执行程序
public static void main(String[] args) {
interfaceUtil("http://web.juhe.cn:8080/finance/gold/bankgold?key=f088a42235385bf15fe7a118ad1fa38d");//get请求
}
运行结果如下
3.代码打包
接下来将代码打成jar包(包含第三方包),同样打开project structure,添加自己的项目
点击apply,然后开始打包,选择Build,找到Build Artifacts,然后build打包
得到的jar包的存储位置:
看见该目录下有两个jar包,一个是项目,一个是第三方依赖(json解析的一个包)
4.linux中部署定时任务,执行java程序
将上面得到的两个jar包导入Ubuntu中。(记住这两个jar保存放的位置)
下面进行定时任务设置,crontab –e进行设置,(前提是已经安装crontab,具体步骤这里不做介绍请参看本人另一教程)这篇文章中有大量篇幅讲述cron定时任务的用法
教你如何使用Linux中的curl神器定时爬取数据并批量发到别人邮箱
28 21 * * * /usr/java/jdk1.8.0_241/bin/java -jar /home/lk/Downloads/javaPojs/JavaPro_jar/JavaPro.jar > /home/lk/1.txt
解释一下上面的代码
28 21 * * * #这一部分表示每天21:28的时候执行后面的命令
/usr/java/jdk1.8.0_241/bin/ #这个是自己的jdk的绝对路径
java -jar /home/lk/Downloads/javaPojs/JavaPro_jar/JavaPro.jar #是运行jar包的命令;中间的路径是该jar报的绝对路径
> /home/lk/1.txt #表示将输出结果写入/home/lk/目录下的1.txt文件中
最后,开启cron服务;
命令:sudo service cron start
然后可以查看执行情况。
上面显示已经执行。我们可以回到目标位置,发现1.txt中确有我们需要的数据
5.最后,附上java源码
以及完整项目打包好的jar包,以及json包的链接
package com;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* @author lk
* @date 2020/4/17 0016 15:19
* @description:
*/
public class GoldApi {
public static void interfaceUtil(String path) {
try {
URL url = new URL(path);
//打开和url之间的连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");//GET和POST必须全大写
conn.connect();
//获取URLConnection对象对应的输入流
InputStream is = conn.getInputStream();
//构造一个字符流缓存
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String str = new String(br.readLine().getBytes(), "UTF-8");//解决中文乱码问题
try {
JSONArray jsonArray = new JSONObject(str).getJSONArray("result");
JSONObject jsonObject1 = (JSONObject) jsonArray.get(0);
String variety = (String) jsonObject1.getJSONObject("2").get("variety");//名称
String maxpri = (String) jsonObject1.getJSONObject("2").get("maxpri");//最高价
String minpri = (String) jsonObject1.getJSONObject("2").get("minpri");//最低价
String quantpri = (String) jsonObject1.getJSONObject("2").get("quantpri");//涨跌幅
String time = (String) jsonObject1.getJSONObject("2").get("time");//更新时间
String gold = "品种: " + variety + " 最高价: " + maxpri + " 最低价: " + minpri + " 涨跌幅: " + quantpri + " 更新时间: " + time;
System.out.println(gold);
} catch (JSONException e) {
e.printStackTrace();
}
//关闭流
is.close();
//断开连接
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
interfaceUtil("http://web.juhe.cn:8080/finance/gold/bankgold?key=f088a42235385bf15fe7a118ad1fa38d");//get请求
}
}
完整项目链接:
链接:https://pan.baidu.com/s/1moTiK416x22NsjZcKmSrTw
提取码:d3w2