|
@@ -74,7 +74,16 @@ func DownloadUsdaPsdDataTask(cont context.Context) (err error) {
|
|
//todo 设置下载频率
|
|
//todo 设置下载频率
|
|
// 获取最近两年的年份
|
|
// 获取最近两年的年份
|
|
years := []int{time.Now().Year() + 1, time.Now().Year()}
|
|
years := []int{time.Now().Year() + 1, time.Now().Year()}
|
|
- err = DownloadUsdaPsdData(years)
|
|
|
|
|
|
+ var commodities []string
|
|
|
|
+ commodities = append(commodities, "0813800", "0813200", "0813600", "0813100", "0813500", "4242000", "4233000", "4235000", "4243000", "4244000", "4234000", "4239100", "4232000", "4236000", "2223000", "2232000", "2221000", "2226000", "2222000", "2224000")
|
|
|
|
+ for _, commodity := range commodities {
|
|
|
|
+ err = DownloadUsdaPsdData(commodity, years)
|
|
|
|
+ if err != nil {
|
|
|
|
+ utils.FileLog.Info("DownloadUsdaPsdData " + commodity + "ErrMsg:" + err.Error())
|
|
|
|
+ }
|
|
|
|
+ //time.Sleep(time.Duration(utils.RangeRand(2, 10)*10) * time.Second)
|
|
|
|
+ utils.FileLog.Info("DownloadUsdaPsdData " + commodity + " 爬取成功")
|
|
|
|
+ }
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
@@ -109,7 +118,7 @@ func DownloadUsdaFmsDataTask(cont context.Context) (err error) {
|
|
// Oilseed, Soybean:2222000
|
|
// Oilseed, Soybean:2222000
|
|
// Oilseed, Sunflowerseed:2224000
|
|
// Oilseed, Sunflowerseed:2224000
|
|
// 美国农业部月度供需平衡表数据
|
|
// 美国农业部月度供需平衡表数据
|
|
-func DownloadUsdaPsdData(years []int) (err error) {
|
|
|
|
|
|
+func DownloadUsdaPsdData(commodityCode string, years []int) (err error) {
|
|
defer func() {
|
|
defer func() {
|
|
if err != nil {
|
|
if err != nil {
|
|
msg := "失败提醒" + "downloadUsdaPsdData ErrMsg:" + err.Error()
|
|
msg := "失败提醒" + "downloadUsdaPsdData ErrMsg:" + err.Error()
|
|
@@ -123,10 +132,11 @@ func DownloadUsdaPsdData(years []int) (err error) {
|
|
dataUrl := "https://apps.fas.usda.gov/PSDOnlineApi/api/query/RunQuery"
|
|
dataUrl := "https://apps.fas.usda.gov/PSDOnlineApi/api/query/RunQuery"
|
|
|
|
|
|
var commodities []string
|
|
var commodities []string
|
|
- commodities = append(commodities, "0813800", "0813200", "0813600", "0813100", "0813500", "4242000", "4233000", "4235000", "4243000", "4244000", "4234000", "4239100", "4232000", "4236000", "2223000", "2232000", "2221000", "2226000", "2222000", "2224000")
|
|
|
|
- //commodities = append(commodities, "0430000")
|
|
|
|
|
|
+ //commodities = append(commodities, "0813800", "0813200", "0813600", "0813100", "0813500", "4242000", "4233000", "4235000", "4243000", "4244000", "4234000", "4239100", "4232000", "4236000", "2223000", "2232000", "2221000", "2226000", "2222000", "2224000")
|
|
|
|
+ commodities = append(commodities, commodityCode)
|
|
commodityCodes := strings.Join(commodities, ",")
|
|
commodityCodes := strings.Join(commodities, ",")
|
|
attributeUrl = attributeUrl + "commodityCodes=" + commodityCodes
|
|
attributeUrl = attributeUrl + "commodityCodes=" + commodityCodes
|
|
|
|
+ fmt.Println("attributeUrl", attributeUrl)
|
|
// 定义请求参数
|
|
// 定义请求参数
|
|
// 获取属性入参
|
|
// 获取属性入参
|
|
attributeBody, e := utils.HttpGetNoCookie(attributeUrl)
|
|
attributeBody, e := utils.HttpGetNoCookie(attributeUrl)
|
|
@@ -162,12 +172,14 @@ func DownloadUsdaPsdData(years []int) (err error) {
|
|
req.Countries = countries
|
|
req.Countries = countries
|
|
req.MarketYears = marketYears
|
|
req.MarketYears = marketYears
|
|
req.OptionColumn = "year"
|
|
req.OptionColumn = "year"
|
|
- //req.ChkPrevMonth = true
|
|
|
|
|
|
+ req.ChkPrevMonth = true
|
|
|
|
+ req.ChkYearChange = true
|
|
req.SortOrder = "Commodity/Country/Attribute"
|
|
req.SortOrder = "Commodity/Country/Attribute"
|
|
|
|
|
|
// 构造httppost请求
|
|
// 构造httppost请求
|
|
reqBody, _ := json.Marshal(req)
|
|
reqBody, _ := json.Marshal(req)
|
|
// 解析返回值
|
|
// 解析返回值
|
|
|
|
+ fmt.Println("reqBody", string(reqBody))
|
|
|
|
|
|
headerParams := make(map[string]string)
|
|
headerParams := make(map[string]string)
|
|
//headerParams["Cookie"] = "CT6T=312900; SF_cookie_3=68941398"
|
|
//headerParams["Cookie"] = "CT6T=312900; SF_cookie_3=68941398"
|
|
@@ -525,6 +537,7 @@ func ParseUsdaFmsExcel(path string) (err error) {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// 月度供需
|
|
func handleUsdaFasPsd(item *UsdaPsdData) (err error) {
|
|
func handleUsdaFasPsd(item *UsdaPsdData) (err error) {
|
|
//设置缓存key,防止重复处理
|
|
//设置缓存key,防止重复处理
|
|
errMsg := ""
|
|
errMsg := ""
|
|
@@ -570,7 +583,7 @@ func handleUsdaFasPsd(item *UsdaPsdData) (err error) {
|
|
for _, k := range headerSlice {
|
|
for _, k := range headerSlice {
|
|
col, ok := row[k]
|
|
col, ok := row[k]
|
|
if !ok || col == nil {
|
|
if !ok || col == nil {
|
|
- utils.FileLog.Info("col is nil")
|
|
|
|
|
|
+ //utils.FileLog.Info("col is nil")
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
if k == "commodity" {
|
|
if k == "commodity" {
|
|
@@ -584,7 +597,6 @@ func handleUsdaFasPsd(item *UsdaPsdData) (err error) {
|
|
} else {
|
|
} else {
|
|
//数据列
|
|
//数据列
|
|
year, _ := strconv.Atoi(strings.Split(k, "/")[0])
|
|
year, _ := strconv.Atoi(strings.Split(k, "/")[0])
|
|
- month := 0
|
|
|
|
indexName := ""
|
|
indexName := ""
|
|
classifyName := ""
|
|
classifyName := ""
|
|
classifySort := 0
|
|
classifySort := 0
|
|
@@ -592,7 +604,7 @@ func handleUsdaFasPsd(item *UsdaPsdData) (err error) {
|
|
fre := "年度"
|
|
fre := "年度"
|
|
lastStr := "Yearly"
|
|
lastStr := "Yearly"
|
|
// year年度的最后一天日期
|
|
// year年度的最后一天日期
|
|
- dateT := time.Date(year, time.December, 31, 0, 0, 0, 0, time.UTC)
|
|
|
|
|
|
+ dateT := time.Date(year, time.December, 31, 0, 0, 0, 0, time.Local)
|
|
if strings.Contains(k, "(") {
|
|
if strings.Contains(k, "(") {
|
|
fre = "月度"
|
|
fre = "月度"
|
|
lastStr = "Monthly"
|
|
lastStr = "Monthly"
|
|
@@ -605,9 +617,9 @@ func handleUsdaFasPsd(item *UsdaPsdData) (err error) {
|
|
errMsg += fmt.Sprintf("月份转换错误:%s%s\n", monthStr, e.Error())
|
|
errMsg += fmt.Sprintf("月份转换错误:%s%s\n", monthStr, e.Error())
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
- month = int(monthT.Month())
|
|
|
|
// 将year和month拼接成日期,该月的最后一天日期
|
|
// 将year和month拼接成日期,该月的最后一天日期
|
|
- dateT = time.Date(year, time.Month(month), 31, 0, 0, 0, 0, time.UTC)
|
|
|
|
|
|
+ // 获取下一个月份的第一天,减去1天为当前月份的最后一天
|
|
|
|
+ dateT = time.Date(year, monthT.Month(), 1, 0, 0, 0, 0, time.Now().Location()).AddDate(0, 1, -1)
|
|
}
|
|
}
|
|
date := dateT.Format("2006-01-02")
|
|
date := dateT.Format("2006-01-02")
|
|
// 封装成指标数据
|
|
// 封装成指标数据
|
|
@@ -666,7 +678,7 @@ func handleUsdaFasPsd(item *UsdaPsdData) (err error) {
|
|
if err != nil {
|
|
if err != nil {
|
|
return
|
|
return
|
|
}
|
|
}
|
|
- fmt.Println("月度供需 执行成功")
|
|
|
|
|
|
+ fmt.Println("月度供需 " + commodityRow + "执行成功")
|
|
return
|
|
return
|
|
}
|
|
}
|
|
|
|
|