ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

ExcelでYAHOOの株価など、Webページを読み込む方法:その2 マクロ編

2006-05-30 22:17:22 | Officeソフト&VBA

前回のExcelでYAHOOの株価など、Webページを読み込む方法:その1 ショートカット編で書いたとおり、今回は、WebページをExcelで読み込んで、そのデータを利用しよう!のマクロ編です。

 といっても、すっごく、かんたんなのだ。

 Workbooks.Open Filename:=開こうとするURL名

 で、Excel上で、そのサイトをExcelのシートとして扱える
 (昨日の、ショートカット編とおんなじようになる)

 たとえば、昨日と同じ例、YAHOOファイナンスで、エイベックスの株価の場合
 (エイベックスの銘柄コードは7860なので)
 URLはhttp://quote.yahoo.co.jp/q?s=7860&d=v1&k=c3&h=on&z=m

 したがって、ホームページは
Workbooks.Open Filename:= _
"http://quote.yahoo.co.jp/q?s=7860&d=v1&k=c3&h=on&z=m"
 とかくと、開くことができる。



ということで、これを使った例を一つ。
■仕様
以下のように、Excelのシートが出来ていて

(ただし、はじめは、株価は入っていない。証券(銘柄)コードははいっている)
「開始!」ボタンを押すと、A列の4行目から、A列に証券コードが入っている間、
YAHOOの株価欄を検索し、株価を同じ行のB列に入れていく。
(結果が上記の画像)

ただし、
・「開始!」ボタンは、ボタン1で登録されていて、
  ボタンを押すと「ボタン1_Click()」を実行するものとする

・YAHOO株価欄のURLは、
 "http://quote.yahoo.co.jp/q?s=" & cd & "&d=v1&k=c3&h=on&z=m"
 cdのところに、証券コードが入る。
 (cdの両隣の&は、VBAにおける文字列連結の意味)

・上記のURLで、セルE37が、とりあえず、今のところ、株価である
 (つまり、はじめ、ショートカット編の方法で読んでみて、たしかめたところ
  E37が、そうだった)




■ プログラム
 ボタンをクリックすると実行される「ボタン1_Click()」の内容は、こんなかんじ
Sub ボタン1_Click()
    Dim url As String
    Dim cd As String
    Dim sosa_sh As Worksheet
            
    Set sosa_sh = ActiveSheet       '   現在の操作画面のシートを取っておく
    gyo = 4                         '   4行目から開始
    
    Do While sosa_sh.Cells(gyo, 1) <> ""
            '   コード取得してURL設定
        cd = sosa_sh.Cells(gyo, 1)
        url = "http://quote.yahoo.co.jp/q?s=" & cd & "&d=v1&k=c3&h=on&z=m"
            
            '   読み込み開始=>この時点で、アクティブシートは、これになる
        Workbooks.Open Filename:=url
        
            '   値を設定
        sosa_sh.Cells(gyo, 2) = ActiveSheet.Range("E37")    '   E37が株価
            
            '   読み込んだページをクローズ
        ActiveWorkbook.Close
        
            '   次の行へ
        gyo = gyo + 1
    Loop
    
End Sub

(上記< > ¥ は、本当は半角です)




ってなことで、Webページを読み込む場合は、AJAXより、Excelのほうが、ずっと簡単だったりする。
 なお、YAHOOは将来、URLやセルを変えるかもしれない。
 (つーか、この実験をやったのは昨日なので、今日は、もう違う可能性すらある)
 そのため読み込みURLやセルは、別途シート上に定義しておき、それを
 参照する形のほうが、安全かも。。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ExcelでYAHOOの株価など、Webページを読み込む方法:その1 ショートカット編

2006-05-30 22:12:51 | Officeソフト&VBA

 前の株価を無料で取得したり、検索結果を得るスクリーン・スクレイピング技術(AJAX版)と問題点で、AJAXで読み込んでたけど、実は、Excelで読み込むと、もっと簡単に操作できる。

 どんなに簡単にできるか、2回にわけて説明する。

 その1(今回のブログ)では、手作業でショートカットを利用して読み込む
 その2では、マクロを使って読み込む。

 では、第一回目手作業で読み込む方法。

 上記のAJAXと比較するため、エイベックスの株価を読み込む方法を示す




(1)まず、YAHOOファイナンスにいき、
 コードに 7860 と入力する(7860は、エイベックスの銘柄コード)

(2)そうすると、エイベックスの株価が出る。
   そしたら、IEを使ってる人は、アドレスのところにあるURLを選択し、
   画面のどこかに、ドラッグ&ドロップする。
   そうすると、そのページのショートカットができる

 <出来ない人やIE以外の人>
 左ボタンをクリック、ポップアップメニューで、新規作成→ショートカットを選択
 ショートカットの作成ダイアログがでてきたら、
  http://quote.yahoo.co.jp/q?s=7860&d=v1&k=c3&h=on&z=m
 と、表示したいURL(ここでは、エイベックスの株価のURL)を入れる
 次へボタンをおして、名前をてきとうに入れて完了。

(3)Excelを立ち上げる

(4)ファイル→開くを選択
   ダイアログが出てきたら、ファイルの種別を「すべてのファイル」にする
   そしたら、(2)で作ったショートカットを探して、見つかったら
   そいつをクリックして、「開く」ボタンクリック

(5)そうすると、ホームページを読み込む
   セルE37に株価が来る

あとは、もう、普通のExcelシートとおなじなので、処理加工は、かんたん。
ってことで、スクリーン・スクレイピングを行う場合、Excelに読み込んだほうが簡単。
なお、今回はExcel2002で動作確認を行っています。




 でも、このやり方では、自動化していないので、 東証のXBRL(財務諸表のXML)をExcelに読み込んで、PERとか計算しようと思ったが。。 でやろうとしているような、自動的に株価をとってくるまでには、いたっていない。

 そのような、自動的に株価をとってくるためには、マクロを使わないといけない。
 そのマクロによる、Webページの読み込みについては、もし、覚えていたら、このシリーズの次回に書こうと思う。それができると、PERも。。ばっちし(^^)v

(YAHOOが、フォーマットを変えない限り。。。)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

眞鍋かをりさんがポットキャスティングの女王!にみる、ポッドキャストによる広告市場

2006-05-30 16:57:54 | Weblog

 ここのニュースによると
眞鍋かをり、今度は「ポッドキャストの女王になります」
http://www.itmedia.co.jp/news/articles/0605/29/news065.html


 眞鍋かをりさんが、ポットキャスティングの女王になったようです。
 さては、しょこたんにブログの女王を追われたので?
 とか、そーいうことは、今回は置いておいて(それはそれで興味あるけど)

 その、眞鍋さんのやっている、ポッドキャスト、Tokyo localをみてみましょう
 (うん、とうきょうのろーかる?溜池。。しょこたんの溜池Nowを意識してる?
  ってのは考えすぎか?)

 このページ
 
”眞鍋かをり”のポッドキャスト Tokyo local
 http://tokyolocal.jp/


そのページをみると、もう全面的に、プロアクティブの宣伝が入ってます。
ちなみに、プロアクティブっていうのは、
ここ http://www.grj.jp/proactiv/
にあるように、にきびをなおすやつで、深夜番組みると、よくやってるよ。




で、気がついたんだけど、ポットキャスティングに広告入れたり、こういうように企業がポッドキャスティングを支援するっていうのは、あんまりなかったような。。

 新たな広告媒体かもしんない。

 そのうち、ポッドキャスティングの前に宣伝を入れたり??。。

 そのうち、企業のIRなんかも、ポッドキャスティングになったり、
 会社のマニュアルもポッドキャスティングになる。。なわきゃないか(^^;)



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

株価を無料で取得したり、検索結果を得るスクリーン・スクレイピング技術(AJAX版)と問題点

2006-05-30 15:39:52 | JavaとWeb

 今日Web2.0をしらべていたときに、ここに「スクリーン・スクレイピング」っていう言葉が出てきて、なんじゃらほい?と思って調べたら、
あ、あれのことか。。
Yahoo!ファイナンス> ヘルプ> 口座管理サービス(MoneyLook)関連FAQ >データ取得の方法から、引用すると(以下斜体が、そこからの引用)

スクリーン・スクレイピング技術とは、ウェッブサイトの表示構成を解析し、必要な文字や数字だけを抽出する技術で、その抽出ルールをまとめたものをスクレイピング・モジュールと呼びます。


具体的に例をあげたほうがわかりやすいので、
無料で見れる、YAHOOの株価情報から、エイベックスの株価を抜く方法をしめそう。




YAHOOの株価情報で、検索時7860(エイベックスの銘柄コード)をいれるとわかるけど、
URLは、こんなかんじ。これで、株価が表示される
http://quote.yahoo.co.jp/q?s=7860&d=v1&k=c3&h=on&z=m

さて、このソースを取得するには、昨日のAJAXのプログラム、httpRequestのURLを上記のものにして、responseXMLをresponseTextにすると、テキストが取得できる。それを、テキストエリアに入れてみることにしよう(テキストエリアは、昨日のよりもっと大きくしてある)。

こんなかんじ
<?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>

<title>AJAX版?RSS読み取りだよ</title>

<script language="javascript" type="text/javascript">
var	httpObj;

//*==============================================//
//*	関数:httpRequest()			*//
//	内容:XML読み取り開始			*//
//*==============================================//
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;
}

//*==============================================//
//*	関数:DataRead()			*//
//	内容:XML読み取ったあと			*//
//*==============================================//
function DataRead()
{
        if (httpObj.readyState == 4 && httpObj.status == 200)
	{
		document.form1.textarea1.value =httpObj.responseText;
       	}
}

</script>
</head>


<body bgcolor="#ffffff" 
    onload="httpRequest('http://quote.yahoo.co.jp/q?s=7860&d=v1&k=c3&h=on&z=m')">
<form action="" name="form1">
    <textarea name="textarea1" rows="100" cols="80"></textarea>
</form>

</body>
</html>

(上記の < > ¥ は実際は半角)

で、これを実行すると、テキストボックスのなかに、検索した結果のソースコードが入ってくる。
ここで、(実際にこの結果を見ると、明らかなのだが)
「関連情報」という言葉の後にある行に、コード、事情、名称、時間、株価の順で(これ以降もつづく)はいっている。

っていうことは、そのresponseTextで受け取ったことばに検索をかけて、まず

1.「関連情報」を検索
2.直後のtrタグを検索
3.そのあとのtdタグを検索し、5個目の値をとってくれば、株価

ってことになって、ただで、株価が取得できるのだ!




このように、HTMLを解析して、値をとってくる技術を言う。
javascriptでやる場合、上記のように、responseTextでうけとって、あとは目印となる言葉を検索していくことによって、実現できる。

 しかし、大きな問題がある。
 実は、これをやってみるとわかるのだが、何の前触れもなく、見た目はそっくりなんだけど、タグをマイナーチェンジしていることがある。
 その場合、引っかからなくなってしまったりする。

 そーすると、プログラム書き換えとなるが、それは面倒なので、抽象的な形でパターンを記述して、ちょっとぐらいかわっても、値を取得できるようにしないとたいへん。

 むかし、検索結果を表示するので、それをやって、困ったことを思い出した。


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

更新料がタダに!ソースネクストのウィルスセキュリティ

2006-05-30 02:39:28 | Weblog

ここのニュース
「更新が無料」のセキュリティソフト、ソースネクストが発売
http://www.itmedia.co.jp/news/articles/0605/29/news070.html


によると(以下斜体は上記記事より引用)

セキュリティソフトでは一般的な「年間更新料」を無料にした「ウイルスセキュリティZERO」をソースネクストが発売する。

そうだ。

おお、これはいい。でも儲かるのか?と思ったけど、
この更新料0の、ソースネクストセキュリティ0は、3970円
いままでのは1年で1980円だから。。。2年以上使わないと、元が取れない。
うーん、買い替え期間って、いま、そんなもんなのかもしんないねえ。。

とにかく、でも便利だ。
次の更新のときには、これにしよう。。(ウィリアムのいたずらは、今ウィリスセキュリティを使っていて、このまえ、更新したばっか)

。。。うん、更新料0円なら、今更新してもいいのか?もう、更新期間関係ないんだから(^^)
 まあ、お金があるときに検討しようっと!
 

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする