//****************************************************************
//***** 東京電力ホームページから電力の使用状況データをダウンロードする
//****************************************************************
// 動作説明
// 本スクリプトは東京電力ホームページから「電力の使用状況」データをダウンロードするためのものである。
// 実行すると指定された時間まで待ち、タイムアップするとデータを自動的にダウンロードする。
// ダウンロードしたデータは、YYMMDD形式のファイル名でdataディレクトリに保存される。
// その後、PCを強制的にシャットダウンする。(休止状態とすることもできる。)
// 使用方法
// 1.start_hh(時)およびstart_nn(分)にダウンロード実行開始時間を設定する。
// 2.本スクリプトを実行する。
// 3.指定された時間にダウンロード実行され、そのデータは保存される。
// 4.その1分後にPCは強制的にシャットダウンされる。
// 注意事項
// ファイル名はYYMMDD形式であるが、ダウンロード開始を0時50分としているのでDDはデータの翌日付となる。
// パブリック変数 IE_VER に、スクリプトで起動されるIEのバージョン番号を正しくセットすること。
// 参考
// 「電力の使用状況」データは毎正時15〜30分後に更新される。
// 前日1日分のデータは、0時30分以降にダウンロードできる。
// ただし、1時15分〜30分以降には当日データが保存され、前日のデータは消去される。
// 1日分データのダウンロードは0時30分から1時15分までの間に行わなければならない。
// このことから本スクリプト作成した。
// 更新情報
// 2011/07/15 ブラウザ(IE)表示完了待ちルーチンを大幅に修正(IE表示更新、リトライなど)
// 2011/06/24 ブラウザ(IE)のバージョンが 9 になったときの不具合解消
//------------------------ メインルーチン ------------------------
// パブリック変数定義
PUBLIC start_hh = 0 // ダウンロード開始時刻(時)
PUBLIC start_nn = 50 // ダウンロード開始時刻(分)
PUBLIC IE_VER = 9 // IEのバージョン番号(8 or 9)
// ----------------------------------------------------------
// タイムカウントを0秒近くに同期(おまけ機能)
// ----------------------------------------------------------
flg = 0
while flg = 0
gettime() // システム時間を取得
fukidasi("タイムカウント同期完了まであと" + (60 - G_TIME_SS) + "秒です", 0, 0, 0, 8, , $000000, $ccffff, 64)
if (G_TIME_SS = 0) then flg = 1 else sleep(0.1)
wend
fukidasi()
// ----------------------------------------------------------
// ダウンロード実行開始時間まで待つ
// ----------------------------------------------------------
x_time() // 実行開始までの時間を表示
flg = 0
while flg = 0
gettime() // システム時間を取得
x_time()
if (G_TIME_HH = start_hh) AND (G_TIME_NN = start_nn) then flg = 1 else sleep(10)
wend
fukidasi("電力の使用状況データをダウンロードしています", 0, 0, 0, 8, , $000000, $ccffff, 64)
// ----------------------------------------------------------
// ダウンロードURLをIEで開く
// ----------------------------------------------------------
IE = CreateOLEObj("InternetExplorer.Application")
IE.Visible = true
IE.Navigate("http://www.tepco.co.jp/forecast/html/images/juyo-j.csv")
BusyWait(IE)
ifb IE_VER = 8 // ------------------------------------- IEのバージョンが8のとき
// ----------------------------------------------------------
// 「ファイルのダウンロード」ウィンドウ取得
// ----------------------------------------------------------
while getid("ファイルのダウンロード","#32770") < 0
sleep(0.2)
wend
id = getid("ファイルのダウンロード","#32770") // ID取得
acw(id)
mouseorg(id)
sleep(0.5) // 表示完了まで0.5秒待つ
clkitem(id,"保存",CLK_BTN) // 「保存」ボタンをクリック
// ----------------------------------------------------------
// 「名前を付けて保存」ウィンドウ取得
// ----------------------------------------------------------
while getid("名前を付けて保存","#32770") < 0
sleep(0.2)
wend
id = getid("名前を付けて保存","#32770") // ID取得
acw(id)
mouseorg(id)
sleep(0.5) // 表示完了まで0.5秒待つ
// ファイル名テキストボックスを選択
kbd(VK_ALT,DOWN,50)
kbd(VK_N,CLICK,50) // ALTキーを押しながらNキークリック
kbd(VK_ALT,UP,50)
// 保存ファイル名を書き込み保存する
gettime() // システム時間を取得
str = "D:\AWK_work\計画停電関係\電力使用状況データ\data\" + G_TIME_YY2 + G_TIME_MM2 + G_TIME_DD2 + ".csv"
kbd(VK_DELETE,CLICK,50) // テキストボックスをクリア
sendstr(id, str) // ファイル名(フルパス)の書き込み
clkitem(id,"保存",CLK_BTN) // 「保存」ボタンをクリック
// ----------------------------------------------------------
// 上書き保存の確認
// ----------------------------------------------------------
sleep(0.5) // 上書保存確認ウィンドウが開くまで0.5秒待つ
id=getid("名前を付けて保存の確認","#32770") // ID取得
ifb id >= 0 // 上書保存確認ウィンドウが開いたら以下を実行
acw(id)
mouseorg(id)
sleep(0.5) // 表示完了まで0.5秒待つ
clkitem(id,"はい",CLK_BTN) // 「はい」ボタンをクリック
endif
elseif IE_VER = 9 // ------------------------------------- IEのバージョンが9のとき
// ----------------------------------------------------------
// ホームページウィンドウIDを取得する
// ----------------------------------------------------------
id=getid("http://www.tepco.co.jp/forecast/html/images/juyo-j.csv - Windows Internet Explorer","IEFrame")
acw(id)
mouseorg(id)
sleep(0.5)
// ----------------------------------------------------------
// データをファイル保存する
// ----------------------------------------------------------
// データページを全て選択しコピーする
kbd(VK_CTRL, DOWN, 40)
kbd(VK_A, CLICK, 300) // 全て選択
kbd(VK_C, CLICK, 300) // クリップボードにコピー
kbd(VK_CTRL, UP, 300)
sleep(0.3)
// コピーしたデータをファイル保存する
str = getstr(0) // コピーした文字列の取得
// ファイルを開く
fid = fopen("D:\AWK_work\計画停電関係\電力使用状況データ\data\" + G_TIME_YY2 + G_TIME_MM2 + G_TIME_DD2 + ".csv", F_WRITE)
fput(fid, str) // データ書き込み
fclose(fid) // ファイルを閉じる
else
msgbox("IEのバージョンは、8 か 9 です。バージョン番号を IE_VER に正しく設定してください。")
endif
// ----------------------------------------------------------
// IEを閉じる
// ----------------------------------------------------------
sleep(0.5)
kbd(VK_ALT, DOWN, 50)
kbd(VK_F4, CLICK, 50) // ALT-F4(アクティブウィンドウを閉じる)
kbd(VK_ALT, UP, 50)
fukidasi()
// ----------------------------------------------------------
// 電源遮断
// ----------------------------------------------------------
fukidasi("間もなくこのパソコンをシャットダウンします", 0, 0, 0, 8, , $000000, $ccffff, 64)
sleep(60) // シャットダウンまで1分待つ
fukidasi()
// poff(P_SUSPEND) // 休止状態へ移行
poff(P_SHUTDOWN or P_FORCE) // 強制シャットダウン実行
//------------------------ メインルーチン終了 ------------------------
// ----------------------------------------------------------
// 関数・サブルーチン
// ----------------------------------------------------------
// 残り時間表示サブルーチン
procedure x_time()
gettime()
x_hh = start_hh - G_TIME_HH
x_nn = start_nn - G_TIME_NN
ifb x_nn < 0
x_nn = x_nn + 60
x_hh = x_hh - 1
endif
if x_hh < 0 then x_hh = x_hh + 24
ifb x_hh = 0
fukidasi("現在" + G_TIME_HH + "時" + G_TIME_NN + "分: " + x_nn + "分後に電力使用状況データをダウンロードします", 0, 0, 0, 8, , $000000, $ccffff, 64)
else
fukidasi("現在" + G_TIME_HH + "時" + G_TIME_NN + "分: " + x_hh + "時間" + x_nn + "分後に電力使用状況データをダウンロードします", 0, 0, 0, 8, , $000000, $ccffff, 64)
endif
fend
// IE表示ビジー待ち
Procedure BusyWait(ie)
Const TIME_OUT = 120 // タイムアウト時間
Const T_NUM = 3 // 再チャレンジ回数
tm = Gettime() // 現在システム時間取得
tout_num = 0 // 再チャレンジ回数初期化
repeat // ビジー待ちループ開始
sleep(0.2)
// タイムアウトのチェック
ifb Gettime() - tm > TIME_OUT
fukidasi("ビジー待ちタイムアウト (" + tout_num + "回)")
kbd(VK_F5, CLICK, 50) // F5キー(最新の情報に更新)
sleep(0.5)
tout_num = tout_num + 1 // タイムアウト再チャレンジ回数+1
// タイムアウト再チャレンジ回数チェック
ifb tout_num > T_NUM
msgbox("ビジー待ちタイムアウトが" + T_NUM + "回繰り返されました。<#CR>再度ビジー解除を待ちます。(強制終了は ALT-F2)")
tm = Gettime() // 現在システム時間取得
tout_num = 0 // 再チャレンジ回数初期化
endif
endif
until (! ie.busy) and (ie.readyState=4) // ビジー待ちループ終了
// 吹き出し表示OFF
fukidasi()
sleep(0.5)
Fend