とあるサイトから情報を取得するJavaScript
クロスサイトスクリプティング対策で行けないかと思ったけど,window.openだとリダイレクトで同じホストになるから行けるみたい。
var downloadAsTextFile = function(fileName, content) { var bom = new Uint8Array([0xEF, 0xBB, 0xBF]); var blob = new Blob([bom, content]); var url = window.URL || window.webkitURL; var blobURL = url.createObjectURL(blob); var a = document.createElement('a'); a.download = fileName; a.href = blobURL; a.click(); }; var downloadAsCSVFile = function(fileName, rows) { var content = ""; for( var i in rows) { var ary = rows[i]; for (var j = 0, m = ary.length; j < m; ++j) { content += '"' + ("" + ary[j]).replace('"', '""') + '"'; if (j !== m) { content += ','; } } content += '\n'; } downloadAsTextFile(fileName, content); }; var getInfo = function(urls, rows_or_cb, callback) { var rows = rows_or_cb; if(!Array.isArray(rows)) { rows = [["名称", "信託報酬", "信託財産留保額"]]; callback = rows_or_cb; } var url = urls.pop(); if(!url) { callback(rows); return; } console.log("open", url, "count", urls.length); var w =window.open(url, "dummy", 'width=100,height=100'); $(w).load(function() { var t = $(w.document).find("#CONTENTSAREA01"); rows.push([ w.location.href.match(/param6=(\w+)/i)[1], t.find("div.md-l-utl-mt10 > h3:first").text().trim(), t.find("p:contains('信託報酬')").closest("tr").next("tr").text().trim(), t.find("p:contains('信託財産留保額')").closest("tr").next("tr").text().trim(), ]); w.close(); getInfo(urls, rows, callback); }); }; var urls = $("tr.md-l-tr-03 td.vaM > a").filter(function(){ return this.href.match(/param6=(\w+)/i); }).map(function(){ return this.href; }).toArray(); getInfo(urls, function(rows) { downloadAsCSVFile("hoge.csv", rows); });
urls=$(".middleAreaM2 tr tr:contains('投資信託(金額/特定預り)')").next().find("tr a[href*='ActionID=DefaultAID']").filter(function(){return this.href.match(/fund_sec_code=\w+/)}).map(function(){return this.href}).toArray();