因此,我使用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&过期=1234&签名=12345
但是现在我需要以某种方式解析这个CSV文件。我过去所做的是立即让用户重新上传他们刚刚下载的CSV文件,这样我就可以通过PHP在服务器端解析它。然而,我希望避免下载然后上传的过程,并稍微自动化一些。我尝试使用AJAX,但偶然发现一个CORS错误,称跨源请求被阻止。使用jsonp作为数据类型绕过了CORS错误,但无法使用,因为服务器返回了CSV文件,对吧?
那么,我是否可以通过API提供的下载URL自动解析CSV文件,而无需用户在下载CSV后立即重新部署它?
您有几个选项:
选项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>