因此,我使用Google DFA Reporting API提取广告系列报告文件列表并下载最新版本。
function transferData() {
var getFile = gapi.client.dfareporting.reports.files.get({
'profileId': '12345', // My DFA profile ID
'reportId': reportId, // The ID of the report type
'fileId': runId // The ID of the final report (corresponding to the report type defined earlier)
});
getFile.then(function (response) {
var URL = response.result.urls.browserUrl;
window.open(URL); // Open the download link
}, function (reason) {
console.log('Error: ' + reason.result.error.message);
});
}
这段代码返回URL变量,该变量本质上是CSV报告文件的下载链接,例如, https://storage.googleapis.com/dfa_-700df587fcd884268484ea3d1/campaign_report.csv?GoogleAccessId=12345m@developer.gserviceaccount.com&Expires=12345&Signature=12345
但是现在我需要以某种方式解析这个CSV文件。我以前做的是立即让用户重新上传他们刚下载的CSV文件,这样我就可以通过PHP解析服务器端了。但是,我想避免下载然后上传过程并稍微自动化一些事情。我尝试使用AJAX,但偶然发现了一个CORS错误,说明交叉来源请求被阻止了。使用jsonp作为数据类型会绕过CORS错误,但无法使用,因为服务器返回了一个CSV文件,对吗?
那么我可以通过API为我提供的下载URL以某种方式自动解析CSV文件,而不需要用户在下载后立即重新上传CSV吗?
答案 0 :(得分:0)
您有几个选择:
选项1 让用户将文件的URL发送回服务器,而不是下载文件并重新上传。然后,服务器可以下载并解析文件本身。
选项2
为javascript编写自己的csv解析器,使用像string.split
这样简单的东西可以用于你知道格式的非常基本的csv。
选项3 使用像Papa Parse这样的csv解析库在浏览器中为你做一些硬盘。
您可以使用以下代码实现选项2或3:
<script>
function loadDoc(url) {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 && xhttp.status == 200) {
parseFile(xhttp.responseText);
}
};
xhttp.open("GET", url, true);
xhttp.send();
}
function parseFile(csvFile){
//contents of the csv file are now in csvFile
alert(csvFile);
}
</script>