Reputation: 1
Following this post:
C# WebClient - Getting an HTML from URI instead of CSV_
The problem is that the csv was compiled with javascript in the browser. In the same post, recommendation is use Casperjs but there are options using c# or how could use casperjs to get a csv from OBIEE?
Someone have an example of that?
Additional information:
I found a webpage with this links: xls, xml, csv
When i clic each link a get the .csv file for example, but if i try to use WebClient c# a got HTML with javascript functions and i understood that the page is something like a template with following functions:
an array filled with data that i need:
var datos = [];
function to fill that array:
function llenaArreglo(){
var serie = new Array("12/01/1984", "18/01/1984", "DTF", "36,45%");
datos.push(serie);
... and it repeat the same code for each data tuple (it's funny), filling the data array.
function that choose the type of download from request:
function downloadByType(){
var type = gup("download_type", location.href);
if(type=="csv"){
downloadCsv()
}
if(type=="xml"){
downloadXml()
}
}
function to download, it seem that re-write content of the current page with the data in the choosen format:
function download(data, filename, type) {
var a = document.createElement("a"),
//textEncoder = new TextEncoder('utf-16');
//var contentEncoded = textEncoder.encode([data]);
file = new Blob([data], {type: type});
if (window.navigator.msSaveOrOpenBlob) // IE10+
window.navigator.msSaveOrOpenBlob(file, filename);
else { // Others
var url = URL.createObjectURL(file);
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
setTimeout(function() {
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 0);
}
}
And the function for csv format:
function downloadCsv(){
var dataCsv = "\ufeff"+"fecha_inicio;fecha_final;tasa_interes;valor_tasa\n";
for(var i=0; i<datos.length;i++){
serie = datos[i];
var fecha_inicio = serie[0];
var fecha_final = serie[1];
var tasa_interes = serie[2];
var valor_tasa = validarNulo(serie[3]);
dataCsv += fecha_inicio+";"+fecha_final+
";"+tasa_interes+
";"+valor_tasa+"\n";
}
download(dataCsv, "Tasas_captacion_semanales_DTF_CDT_TCC.csv", "data:text/txt;charset=windows-1252;");
}
If i use the WebClient c# option, i only get this HTML with javascript code... i tried to use "CasperJS" but i get same result and i don't know how to call "download" function or may be get "datos" variable.
I will try in CasperJS the following code:
casper.start('URL').thenEvaluate(
function(){
data= datos;
});
casper.run(function() {
this.echo('my data:' + data);
this.exit(); });
But i thing i am wrong and i need to know how to get the last result of the webpate.
Upvotes: -1
Views: 127
Reputation: 1
I resolve my trouble with CasperJS, not is the ideal solution but it's a solution. I scraped the code to get the variable "datos" (array with data):
var casper = require('casper').create();
casper.start('uri', function() {
//this code copied from other post about casperjs
var myVarInCasper = this.evaluate(function() {
var myVarInBrowser;
myVarInBrowser = datos;
return myVarInBrowser;
});
var dataCsv = "\ufeff"+"col001;col002;col003;col003\n";
//the same code, copied from HTML
for(var i=0; i<myVarInCasper.length;i++){
serie = myVarInCasper[i];
var col1 = serie[0];
var col2 = serie[1];
var col4 = serie[2];
var col5 = serie[3];
dataCsv += col1+";"+col2+";"+col3+";"+col4+"\n";
}
this.echo(dataCsv);
});
casper.run();
with the above code i get CSV in console and i re-direct ouput to file in Windows and create a BATCH file with command line. Something like:
casperjs.exe sample.js > result.csv
Upvotes: 0