3月 132008
http://q.hatena.ne.jp/1204789749
この質問で「スクレイピング」ってはじめて知りました。
同様のことは他のツールを使ってやってましたけど、
JavaScriptだけでこんなことができるなんて、すごい(^^)
回答者さんのリンク先のプログラムを参考に、任意の
銘柄コードを入力すると、Yahoo!からデータを取ってくる
プログラムを作ってみました。
<?xml version="1.0">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script language="javascript" type="text/javascript">
<!--
varhttpObj;
function httpRequest(target_url)
{
try
{
if(window.XMLHttpRequest)
{
httpObj = new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
httpObj = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
alert('エラーです');
return;
}
}
catch(e)
{
alert('エラーです');
return;
}
//データを取得する
httpObj.open("GET", target_url, true);
httpObj.onreadystatechange = DataRead;
httpObj.send("");
return;
}
function DataRead()
{
if (httpObj.readyState == 4 && httpObj.status == 200)
{
//取得したレスポンスをgetTextに入れる
var getText=httpObj.responseText;
//kanrenにgetTextの「関連情報」から始まるテキストを入れる
var kanren=getText.substring(getText.indexOf('関連情報',0));
//trtagにkanrenの「<tr」から始まるテキストを入れる
var trtag=kanren.substring(kanren.indexOf('<tr',0));
//trtagの5つ目の「<td」の位置を調べて
var found=-1;
for (var i=1;i<=5;i++){
found=trtag.indexOf('<td',found+1);
}
//trtagの5つ目の「<td」以降の文字列で「<b」で始まるところの3文字あとの文字列をstartkabukaに入れる
var startkabuka=trtag.substring(trtag.indexOf('<b',found)+3);
//startkabukaの「</b」で始まる前までの文字をkabukaに入れる
var kabuka=startkabuka.substring(0,startkabuka.indexOf('</b',0));
//kabukaをフォームに入れる
document.form1.getkabuka.value=kabuka;
}
}
//-->
</script>
</head>
<body>
<form name="form1">
銘柄コード<input type="text" name="code" style="ime-mode:disabled">の
<input type="button" value="株価GET" onclick="httpRequest('http://quote.yahoo.co.jp/q?s='+document.form1.code.value+'&d=v1&k=c3&h=on&z=m')"><br>
株価<input type="text" name="getkabuka">円
</form>
</body>
</html>
取得した文字列から必要なところを抜き出すのは、きっと
もっと良い方法があるんでしょうけど、とりあえずベタな
文字列関数で。
こちらにおいておきます→
http://www.simple-sys.com/archive/jsstudy_4.html
と思ってサーバーに置いて実行しようとしたら、エラーが出ちゃいました(^^;)
多分、Same-Originポリシー
によるものかな?
ローカルにHTMLファイルを落とせば使えました。
あとブラウザーによって使えなかったりするのかな?
IE6なら動きました。
こちらによれば、
new ActiveXObject(“Microsoft.XMLHTTP”) はIEでしか使えないっぽいですね。