如何在Google Apps Script中获取CSV文件?解码失败求助
解决Google Apps Script获取KRX CSV文件的问题
问题根源
原代码存在三个关键问题:
- 请求
GenerateOTP和download_csv接口时错误使用application/json类型,而KRX接口实际接受**表单格式(x-www-form-urlencoded)**的请求体 - 传递OTP时直接传入HTTP响应对象,而非提取响应文本内容
- KRX返回的CSV采用EUC-KR编码,直接用
getContentText()会因编码不匹配导致乱码
修改后的代码
function myFunction() { // 1. 获取OTP var gen_otp_url = 'http://data.krx.co.kr/comm/fileDn/GenerateOTP/generate.cmd'; var gen_otp_data = { 'locale': 'ko_KR', 'mktId': 'STK', 'trdDd': '20221205', 'money': '1', 'csvxls_isNo': 'false', 'name': 'fileDown', 'url': 'dbms/MDC/STAT/standard/MDCSTAT03901' }; var otpOptions = { 'method': 'post', 'contentType': 'application/x-www-form-urlencoded', // 修正为表单格式 'payload': gen_otp_data }; var otpResponse = UrlFetchApp.fetch(gen_otp_url, otpOptions); var otp = otpResponse.getContentText().trim(); // 提取纯OTP字符串 Logger.log('OTP: ' + otp); // 2. 下载并解析CSV var csv_url = 'http://data.krx.co.kr/comm/fileDn/download_csv/download.cmd'; var gen_csv_data = { 'code': otp // 传入正确的OTP字符串 }; var csvOptions = { 'method': 'post', 'contentType': 'application/x-www-form-urlencoded', // 统一表单格式 'muteHttpExceptions': true, 'payload': gen_csv_data }; var csvResponse = UrlFetchApp.fetch(csv_url, csvOptions); // 转换EUC-KR编码为UTF-8文本 var csvBytes = csvResponse.getContent(); var csvText = Utilities.newBlob(csvBytes, 'text/csv; charset=EUC-KR').getDataAsString(); Logger.log(csvText); }
关键修改说明
- 修正请求类型:将两个请求的
contentType改为application/x-www-form-urlencoded,匹配KRX接口的参数要求 - 正确传递OTP:通过
getContentText().trim()提取纯OTP字符串,避免传递响应对象导致的参数错误 - 编码转换:利用
Utilities.newBlob将EUC-KR编码的字节数据转换为UTF-8格式,解决乱码问题
内容的提问来源于stack exchange,提问作者아잉쿠
相关产品推荐
相关产品推荐

