Is api data (YQL Console) related to yahoo.finance?

I am trying to use yql for yahoo financial data. I checked the Show Community Table in the YQL console to see the database under the Yahoo tag. I see the tables below it, but I do not get the results here it looks like this:

select * from yahoo.finance.analystestimate where the character is in ('YHOO')

{ "query": { "count": 1, "created": "2016-03-28T10:25:01Z", "lang": "en-US", "diagnostics": { "url": [ { "execution-start-time": "1", "execution-stop-time": "767", "execution-time": "766", "content": "http://www.datatables.org/yahoo/finance/yahoo.finance.analystestimate.xml" }, { "execution-start-time": "771", "execution-stop-time": "1821", "execution-time": "1050", "content": "http://finance.yahoo.com/q/ae?s=YHOO" } ], "publiclyCallable": "true", "javascript": { "execution-start-time": "769", "execution-stop-time": "1823", "execution-time": "1054", "instructions-used": "5139", "table-name": "yahoo.finance.analystestimate" }, "user-time": "1824", "service-time": "1806", "build-version": "0.2.842" }, "results": { "results": { "symbol": "YHOO" } } } } 

here the results are displayed as empty. Something has changed? How can I find out what happened?

Is there an alternative solution that I can use to get this data?

+6
source share
2 answers

The JS developer used to create the table no longer works. It is partially formatted. You can see that it captures the page and then escapes it.

 function getelement(row) { if (row.hasOwnProperty("p")) return (row.p.text()); return (row.font.text()); } // Setup Query from finance.yahoo.com var url = "http://finance.yahoo.com/q/ae?s=" + symbol; var restquery = y.rest(url); var rawresult = restquery.accept("text/html").get().response; var aequery = y.xpath(rawresult, "//table[@class='yfnc_tableout1']/tr[count(td)=0]/parent::*|" + "//table[@class='yfnc_tableout1']/tr/td/table"); // Process Results var aedata = < results symbol = { symbol } > < /results>; var i = 0; while(i < aequery.length()) { var table = aequery[i]; var thead = table.tr[0]; var tname = thead.th[0].strong.text().toString().replace(/ / g, ""); var fname1 = thead.th[1].p.text().toString().replace(/\n.*/, ""); var fname2 = thead.th[2].p.text().toString().replace(/\n.*/, ""); var fname3 = thead.th[3].p.text().toString().replace(/\n.*/, ""); var fname4 = thead.th[4].p.text().toString().replace(/\n.*/, ""); fname1 = fname1.replace(/[\s\.]+/g, "").replace(/\&/, ""); fname2 = fname2.replace(/[\s\.]+/g, "").replace(/\&/, ""); fname3 = fname3.replace(/[\s\.]+/g, "").replace(/\&/, ""); fname4 = fname4.replace(/[\s\.]+/g, "").replace(/\&/, ""); var tblval = < { tname } > < /{tname}>; var j = 1; while(j < table.tr.length()) { var row = table.tr[j].td; var rname = row[0].p.text().toString().replace(/ [\s\.] + /g, ""); rname = rname.replace(/\ (.*\) / g, "").replace(/\%/, "").replace(/^(\d)/, "_$1"); rname = rname.replace(/\//, ""); var rval1 = getelement(row[1]); var rval2 = getelement(row[2]); var rval3 = getelement(row[3]); var rval4 = getelement(row[4]); tblval.appendChild( < { rname } > < { fname1 } > { rval1 } < /{fname1}> <{fname2}>{rval2}</ { fname2 } > < { fname3 } > { rval3 } < /{fname3}> <{fname4}>{rval4}</ { fname4 } > < /{rname}>); j = j + 1; } aedata.appendChild(tblval); i = i + 1; } // Return aedata strucuture response.object = aedata; 
0
source

Yes, the HTML structure for finance.yahoo.com was changed around the beginning of 2015, so the implementation of the YQL table needs to be updated.

Please check the following GH pull requests that are aimed at fixing current problems:

They overlap a bit, so you can check both of them (it is advisable to check the first).

Or you can check out my yql-tables fork (which also contain many other fixes) where I combined this PR , so find yahoo.finance.analystestimate.xml here here , the other is not merge on top of the other.

0
source

All Articles