package cn.strong.leke.bigdata.util;
import cn.strong.leke.bigdata.app.SparkEnvManager;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.spark.sql.*;
/**
* 获取假日日数据并保存到clickhouse
*/
public class HolidayUtilOneNode {
private static final String url="jdbc:clickhouse://spark-142:8123/db";
private static final String username= "default";
private static final String password= "password";
private static final SparkSession spark = SparkEnvManager.initSparkSession();
public static void main(String[] args) throws Exception {
Map mapTypes = new HashMap<Object, Object>();
//获取一年所有日期
Integer year = Integer.valueOf(args[0]);
// 获取节假日不包含双休
String url = "https://timor.tech/api/holiday/year/" + year;
try {
//请求日历接口
String s1 = HttpClientUtils(url, "UTF-8");
//解析响应数据
JSONObject jsonObject = JSONObject.parseObject(s1);
String holiday = jsonObject.getString("holiday");
mapTypes = JSON.parseObject(holiday);
JSONArray array = JSON.parseArray(mapTypes.values().toString());
System.out.println("array = " + array);
saveDateToClickHouse(array);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void saveDateToClickHouse(JSONArray jsonArray) throws Exception {
try {
Class.forName("ru.yandex.clickhouse.ClickHouseDriver");
Connection conn = DriverManager.getConnection(url, username, password);
StringBuilder sb = new StringBuilder("INSERT INTO letao_third_icc.holiday (date, name, is_holiday) VALUES ");
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String date = jsonObject.getString("date");
String name = jsonObject.getString("name");
boolean holiday = jsonObject.getBoolean("holiday");
int is_holiday = holiday ? 1 : 0;
sb.append("('").append(date).append("', '").append(name).append("', ").append(is_holiday).append("),");
}
sb.deleteCharAt(sb.length() - 1); // 删除最后一个逗号
String sql = sb.toString();
Statement stmt = conn.createStatement();
stmt.executeUpdate(sql);
stmt.close();
conn.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
public static String HttpClientUtils(String url, String charset) throws Exception {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(url);
CloseableHttpResponse response = httpClient.execute(httpGet);
try {
HttpEntity entity = response.getEntity();
if (entity != null) {
return EntityUtils.toString(entity, charset);
}
} finally {
response.close();
httpClient.close();
}
return null;
}
}
实时获取最新节假日调休日
最新推荐文章于 2024-05-31 17:05:47 发布