はじめに
MicrosoftのInternet Explorer(以下、IE)やExcelは、職場のほとんどのパソコン環境に入っており、多くの人が手軽に利用できるアプリケーションです。これらのソフトは単体で利用することもできますが、簡単なプログラムを書くことで、便利に連動させて使うことが可能です。前々回は、WebページのURLをExcelにまとめて保存するアプリケーションを、前回は保存したデータをスライドショー表示するアプリケーションを作りました。
今回は、それらのソースコードを改造して、検索キーワードを元に、Googleの検索結果100位を日時付きで保存し、好きな日時のデータをスライドショー表示するアプリケーションを作ります。簡単なSEOツールとして活用できる物なので、実用的だと思います。
これまでの第1回、第2回とソースコードが被る部分が多いので、今回は大きな変更があった部分だけを取り上げ、最後に全部のソースコードを掲載する形式にしようと思います。まだこれまでの記事を読んでいない場合は、前々回、前回の記事をまずは確認してみてください。
それでは、以下、変更点を中心にアプリケーションを作成していきます。以下に利用イメージを示します。
本記事は、以下の順序で進みます。
- 「ie2excel.hta」から「google_get.hta」への改造
- 「web_slide_show.hta」から「google_slide_show.hta」への改造
- まとめ
対象読者
JavaScriptをある程度使いこなせる人、およびHTMLに関して基本的な知識がある人を対象にしています。
また、プログラムの性質上、Excelを持っている方が対象になります。Excelは、ほとんどの職場環境に導入されていると思いますので、多くの方に当てはまると思います。
今回の記事は、第1回、第2回の記事を読んでいる人が対象になります。まだご覧になっていない方は、先に確認してください。
必要な環境
IE 4.0以上が必要です。基本的には、IE 6.0以上を想定して作っています。ExcelはExcel 97以上を対象としています。本プログラムは、Windows XP+IE 6環境でテストしています。動作しない場合は、セキュリティの設定などを確認してください。
「ie2excel.hta」から「google_get.hta」への改造
大きな改造点は2箇所です。変更点の1箇所目は、IEにわたすURLです。「ie2excel.hta」ではURLを入力してIEを開いていたのですが、「google_get.hta」では、検索キーワードを指定して、Googleの検索結果をIEで開いています。2箇所目は、リストの保存方法です。「ie2excel.hta」ではリストの末尾に追加していましたが、今回は、検索語と検索日時を最初の行に付けて、2列ずつ、横向きにデータを追加していきます。
それでは、以下、大きな変更点があった部分のプログラムを示します。
var xlPath = "google_save.xls"; // Excelファイルのファイル名
var colNoMax = 10000; // 縦列最大値
var googleUrl =
"http://www.google.com/search?&hl=ja&num=100&lr=lang_ja"
+ "&ie=shift-jis&oe=shift-jis&q=";
:
:
// IEにURLを渡す
IE.Navigate( googleUrl + f.q.value );
:
:
//==== Excelの入力位置を走査 =====================================
//
// 空行を探して、そこを入力開始位置にする
//
for ( colNo = 1; colNo < colNoMax; colNo ++ ) {
// セルの文字列を取得
cellStr = sheet.Cells( rowNo, colNo );
// 空のセルを見つけたら抜ける
if ( "" + cellStr == "undefined" ) {
break;
}
}
:
:
//==== Excelのセルに、検索語と日時を書き込み =====================
//
nowDate = new Date();
year = nowDate.getYear();
if ( year < 2000 ) year += 1900;
mon = nowDate.getMonth() + 1;
date = nowDate.getDate();
hour = nowDate.getHours();
min = nowDate.getMinutes();
sec = nowDate.getSeconds();
sheet.Cells( rowNo, colNo ) = f.q.value;
sheet.Cells( rowNo, colNo + 1 ) = year + "/" + mon + "/" + date
+ " " + hour + ":" + min + ":" + sec;
rowNo ++;
:
:
//==== IEからURLを取得してExcelのセルに書き込み ==================
//
//A
タグの配列を取得する
aArry = IE.Document.getElementsByTagName( "a" );
aArryLen = aArry.length;
for ( i = 0; i < aArryLen; i ++ ) {
// 空のリンクは飛ばす
if ( aArry[i].innerText == "" || aArry[i].href == "" )
continue;
// 検索結果か確認
if ( aArry[i].className != "l" ) continue;
:
:
}
:
:
<form name="f">
検索したい言葉を入力して、ボタンを押してください。<br>
Googleでの検索結果のリストをExcelに保存します。<br>
<input type="txt" name="q" value="CodeZine" size=80><br>
<input type="button" value="Googleで検索" onClick="GetUrl()">
</form>
まずはgoogleUrl
を使って、googleUrl + f.q.value
として、Googleでの検索結果のURLを作成しています。
次にExcelの入力位置を走査する方向が、縦から横に変わっています。そして、1行目に検索語と検索日時を保存する処理を追加しています。また、データの保存先も「google_save.xls」に変更しています。
これらの動きは、実際にアプリケーションを実行して確かめてください。
最後に、ポイントとなるのはaArry[i].className != "l"
という部分です。Googleの検索結果のHTMLのタグを見ると、どうやらこの部分が検索結果になっているようです。というわけで、この判定で、効率よく検索結果を収集することができます。そのうち変更される可能性もありますが、とりあえずはこれで大丈夫だと思います。