目錄
- 1. 準備擷取紙黃金資料的api,配置Linux下的jdk環境
- 2.編寫java程式代碼
-
- 2.1 建立java項目
- 2.2 建立lib目錄,指定jar存放位置
- 2.3 編寫調用api的代碼
- 2.4 JSONObject解析擷取的json資料
- 2.5 main方法中調用并執行程式
- 3.代碼打包
- 4.linux中部署定時任務,執行java程式
- 5.最後,附上java源碼
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
解釋一下上面的代碼
最後,開啟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