-
Notifications
You must be signed in to change notification settings - Fork 0
/
threemoreday.gs
72 lines (64 loc) · 2.55 KB
/
threemoreday.gs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
function fetchDataForDateRange(startDate, endDate) {
// 獲取名為 "三大法人每日" 的工作表
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("三大法人每日");
if (!sheet) {
Logger.log("找不到名為 '三大法人每日' 的工作表");
return;
}
// 設置起始和結束日期
var start = new Date(startDate);
var end = new Date(endDate);
// 遍歷起始和結束日期之間的每一天
for (var d = new Date(start); d <= end; d.setDate(d.getDate() + 1)) {
var dateString = Utilities.formatDate(d, "GMT+8", "yyyyMMdd");
Logger.log("正在取得 " + dateString + " 的資料");
// 檢查該日期的資料是否已經存在於工作表中
if (!isDataExists(sheet, dateString)) {
fetchDataAndWriteToSheet(dateString, sheet);
}
Utilities.sleep(10000); // 每次請求之間暫停 10 秒以避免超過 API 限制
}
}
function fetchDataAndWriteToSheet(dateString, sheet) {
// 設定請求的 URL 和日期
var url = 'https://www.twse.com.tw/rwd/zh/fund/BFI82U?response=json&dayDate=' + dateString;
try {
// 發送請求並獲取回應
var response = UrlFetchApp.fetch(url);
var content = response.getContentText();
var jsonData = JSON.parse(content);
// 檢查是否成功獲取到數據
if (jsonData['stat'] === 'OK') {
var data = [
jsonData['date'],
jsonData['data'][0][1], jsonData['data'][0][2],
jsonData['data'][1][1], jsonData['data'][1][2],
jsonData['data'][2][1], jsonData['data'][2][2],
jsonData['data'][3][1], jsonData['data'][3][2],
jsonData['data'][4][1], jsonData['data'][4][2]
];
// 將數據寫入工作表
sheet.appendRow(data);
Logger.log("日期 " + dateString + " 的數據已成功寫入");
} else {
Logger.log("未能成功獲取日期 " + dateString + " 的數據");
}
} catch (error) {
Logger.log("請求出現錯誤: " + error.toString());
}
}
function isDataExists(sheet, dateString) {
// 獲取工作表中的日期列
var dateColumn = sheet.getRange(2, 1, sheet.getLastRow() - 1, 1).getValues().flat();
// 檢查日期是否存在於日期列中
return dateColumn.some(function(date) {
return Utilities.formatDate(new Date(date), "GMT+8", "yyyyMMdd") === dateString;
});
}
function testFetchDataForDateRange() {
// 設定想要獲取資料的日期範圍
var startDate = "2023-01-01"; // 起始日期
var endDate = "2023-01-31"; // 結束日期
// 呼叫函數並傳入起始和結束日期
fetchDataForDateRange(startDate, endDate);
}