
※具体的なサービス名まで参考までに書きましたが、知らなくても問題ありません。
フリーテルSIMのマイページに現在のデータ使用量が記載されています。
その数値を自動的に定期取得する方法はないでしょうか?
今月の使用量合計の最新値が記載されているだけなので、
過去の日単位での数字をさかのぼって見る事ができません。
日単位の使用量を知るには、毎日使用量合計値をエクセルに記録し、
昨日との差分から出す事になり、実際にできる限り毎日午前中に記録を取っていますが、
休日等の記録できなかったり記録し忘れてしまう日があります。
その場合は平均値で埋めるようにしていますが、
何か自動化する方法はないかなと思い、効率化に詳しい人に相談したく投稿させていただきました。
No.1ベストアンサー
- 回答日時:
自分だったらですが、UWSCを使用とか。
PCを起動しっぱなしで、タスクスケジューラから毎日決まった時間なんかにスクリプトを実行。
取得してデータはテキストに落としてもいいし、Excelに追記も可能です。
下記はどこかのサイトのテーブルの中の不特定な位置から希望のデータを取得って例だそうです。
人力検索はてな - UWSCを使ってWEB上から必要なデーターを取る方法を教えて下さい。
http://q.hatena.ne.jp/1387280635
> フリーテルSIMのマイページに
自分はアカウント持ってないので、具体的にどうこうってのは言えないですが。
--
ただ、UWSCの公式サイトが現在アクセスできなくなってるみたい。
UWSC
http://www.uwsc.info/
2月にライセンスキーの再発行を依頼した際は速やかに処理していただきましたが。
ありがとうございます。
なるほど。その手がありましたね、というかそれしかないかもしれませんね。
UWSCはVectorで配信していました。
PCは常に起動しっぱなしなので問題ありません。
一度ログインしておけば、再ログインせずともページ更新のみでOKなようです。
取得したい情報も更新されました。
あとはスクリプトのみって事になりますね。
これから勉強ということになりますが、
もし簡単だったら教えてください。
・具体的に、取り込みたいページのキャプチャーを補足に貼りました。電話番号にだけモザイクかけてます。
・アクセス先URLは、
https://mypage.freetel.jp/SavingMode/saveModeDet … で固定です。
・緑枠の文字列を取得したいです。
・例えば、「使用量.csv」等に追記日々するか、「20180727使用量.csv」のようにファイル名に取得日が入るか、簡単な方で。csvでもtxtでもxlsxでもなんでもOK。
・毎日23:59にその日の最終値として取得したいです。
気になる点は
・ブラウザはChromeですが、取得したいタブをアクティブにしておく必要があるのか。
もし可能でしたらよろしくお願いいたします。
No.5
- 回答日時:
> 「2.40GB ~ 2.41GB」に見えますが、実はここが曲者で、
> 「~」この波線が環境依存文字を使っているのです。
あんまり経験ないパターンかも。
mojiって変数に「2.40GB ~ 2.41GB」(環境依存文字含む)が格納されてるとして、いくつか思いつく方法だと、
1)
// 半角文字に変換
moji = STRCONV(moji, SC_HALFWIDTH)
すると、「?」「~」とかの扱いやすい文字になってくれるかも。
(手元の環境で、UNICODEで変な文字入れてみたら、ダメっぽかったですが。)
2)
上の通りに数値の前後に半角空白があるなら、
moji1 = TOKEN(" ", moji) // mojiから空白で区切った1つ目を取り出し
moji2 = TOKEN(" ", moji) // 残ったmojiから空白で区切った1つ目(元々からだと2つ目)を取り出し
moji3 = TOKEN(" ", moji) // 残ったmojiから空白で区切った1つ目(元々からだと3つ目)を取り出し
で、
「2.40GB」
「~」(機種依存文字含む)
「2.41GB」
の3つに区切れます。
あるいは、SPLIT関数使うと一発で配列に格納できます。
Dim dat
dat = SPLIT(moji, " ")
print dat[0] + ", " + dat[2] // 「2.40GB, 2.41GB」ってなるハズ
配列を(区切り文字含めて)結合した文字列を作るJION関数と合わせて、CSVの処理とか簡単です。
3)
Google Maps - 「千代田区一丁目一番地」
https://www.google.co.jp/maps/?q=%E5%8D%83%E4%BB …
のような日本語URLのエンコードを利用して、扱いやすいコードに変換
// UTF-8にエンコード、URLエンコード
moji = ENCODE(ENCODE(moji, CODE_UTF8), CODE_URL)
「2.40GB+%C9%B1+2.41GB」みたいな感じになるハズなので、
上の要領で「+」で区切ったり。
なるほど。こんなに方法があるんですね。
「もう方法は無い」と思い込んではだめですね。。。
3パターンも提示していただきありがとうございました。
No.4
- 回答日時:
> もし相談に乗っていただけるなら説明テキストを載せたいと思いますが、
これはやめといた方がいいような。
場合によっては、質問者さんのブラウザで表示されているサイトのbodyの中には、個人情報なんかが含まれる可能性もあります。
単純な氏名以外にも、IPアドレスとか何とか。
そういうのが確認できてるなら、参考URLにこの質問のURLをくっ付けて、新規に質問とかの方が良いかも。
--
> 取得した文字列に対して別の関数でさらに加工とかできるんですかね。
VBAと違うのでクセがある感じですが、機能は充実していると思います。
UWSCのヘルプが見れるなら、スクリプト-文字操作関連が簡潔にまとめられていて、有用な例なんかも付いています。
aとbを連結してcに格納する文字列の連結は、
c = a + b
aから指定した文字の抜き出し(VBAだとMID関数)してcに格納は、
c = COPY(a, 5, 8) // aの5文字目から8文字をcにコピー
aから置換で余計な"<余計>"と"<無駄>"を削除するには、
a = REPLACE(a, "<余計>", "")
a = REPLACE(a, "<無駄>", "")
だとか。
そうですね。
> 場合によっては、質問者さんのブラウザで表示されているサイトのbodyの中には、個人情報なんかが含まれる可能性もあります。
単純な氏名以外にも、IPアドレスとか何とか。
当然です。開発の仕事してますからソースは読めますのでそのまま貼るような真似はしませんのでご安心を。
ですがアドバイス感謝します。
最初の質問から発展する形になりますから新規で質問する事にします。
Replace等参考になりました。
ありがとうございました。
No.3
- 回答日時:
ID、パスワードの主力は、IEオブジェクト使う場合はIESETDATAが簡単です。
(サイトが対応するなら。)uwscのメモ - IEで自動ログインにIESETDATAを使う
http://uwsc.36nyan.com/iesetdata/
UWSC コバヤシ式 - IESETDATA
http://canal22.org/kansu/iesetdata/
> ログインして、目的のページへ遷移して、必要な情報をCSVに書き出すところまでできました。
ならばもうちょっとでしょうか。
--
> ただ取得情報の場所特定テクニックが甘く、結構余計な情報まで取得してしまう仕様です。
取得したページ、bodyの内容が確認できれば絞り込み出来そうでしょうか?
// bodyのソース取得
body = IEGetSrc(IE, "BODY")
print body // <-この行を追記
とすると、ログウィンドウとログファイルに変数の中身を出力出来ます。
回答で提示したスクリプトの作りだと、処理終了するとログウィンドウは閉じちゃうんですが、
UWSCの右端の設定ボタン-[.INI/.LOG Folder]でログファイルの保存されているフォルダを開けるので、
UWSC.LOG
のファイルを開き、質問の補足にある画像の例だと「2.41」の数字を検索し、対象のタグや囲んでいる文字列を特定とか。
タグが分かるならIEGETDATA、
UWSCコバヤシ式 - IEGETDATA
http://canal22.org/kansu/iegetdata/
タグで取得できない、タグの順番が変わるとかなら、提示したサンプルと同様にBetweenStrで対象データの前後の文字から特定とか。
その他、ウィンドウの指定した座標の文字を取得するPOSACC関数とかありますが、こっちは非表示ウィンドウに対しては難しかったかもなので、根本的に見直す必要が出そう。
ありがとうございます。
「UWSC コバヤシ式」を参考にして自力で完成させたのでもう大丈夫です。
> 取得したページ、bodyの内容が確認できれば絞り込み出来そうでしょうか?
もちろん、教えていただいたソースを参考にして、
BetweenStrで対象データの前後から特定してますが、
必要な個所だけピンポイントで取得できず、もう少し広い範囲での取得なってしまいます。
取得した文字列に対して別の関数でさらに加工とかできるんですかね。
もし相談に乗っていただけるなら説明テキストを載せたいと思いますが、
難しいならここは締め切って、新たに質問しようと思います。
よろしくお願いいたします。
No.2
- 回答日時:
> ・ブラウザはChromeですが、取得したいタブをアクティブにしておく必要があるのか。
UWSCだと、IEが使いやすいです。
下の例だと、IEを非表示で起動、データ取得して閉じます。
> ・具体的に、取り込みたいページのキャプチャーを補足に貼りました。電話番号にだけモザイクかけてます。
自分はアカウント持ってなくてログインできないので、具体的なコードは提示できないですが。
代わりにというか、gooのサイトのトップから降水確率のデータ取得して、所定の場所のcsvに追記するってサンプルです。
Option explicit
Dim IE, URL // IEオブジェクト、gooのURL
Dim body // 取得するサイトのbodyの内容
Dim percent // 取得する降水確率
// URLを格納
URL="https://www.goo.ne.jp/" // <-なんかダブルクオートが"ってなる。
// IEオブジェクトを作成
IE = CreateOLEObj("InternetExplorer.Application")
// IEを表示(デバッグ時は表示した方がいいね)
//IE.Visible = True
// URLを開く
IE.Navigate(URL)
// 待つ
BusyWait(IE)
// bodyのソース取得
body = IEGetSrc(IE, "BODY")
// <dd class="percent">~</dd>で囲まれた、最初に見つかる降水確率を取得
percent = BetweenStr(body, "<dd class=<#DBL>percent<#DBL>>", "</dd>")
// 降水確率をファイルに書き出す
CSVWrite(percent)
// IE終了
IE.Quit
ExitExit
// ファイル書き出し
Procedure CSVWrite(percent)
Dim fid // ファイルID
Dim msgline // 書き込み文字列
// ファイルオープン c:\_Src\out.csv
fid = FOpen("c:\_Src\out.csv", F_READ or F_WRITE )
// 現在日時を取得
GetTime()
// 文字列生成
msgline = G_TIME_YY2 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + " " + G_TIME_HH2 + ":" + G_TIME_NN2 + ", " + Trim(percent)
// 日付と降水確率を書き込み
FPut(fid, msgline)
// ファイルクローズ
FClose(fid)
Fend
// 待つ
Procedure BusyWait(ie)
Dim tm
Sleep(0.5) // Wait
Const TIME_OUT = 90
tm = Gettime()
repeat
Sleep(0.2)
ifb Gettime() - tm > TIME_OUT
MsgBox("Time Out:BusyWait")
ExitExit
endif
until (! ie.busy) and (ie.readyState=4)
Sleep(0.5)
Fend
丁寧に作るなら、ログイン中かどうか確認、自動でログインとか。
ありがとうございます!頂いたソースで実験してみました。
(ちゃんと書き出し先のパスも修正して)
マウスの操作をそのまま再現するだけと思ってたのに、
バックグラウンドで実行出来る、
ソース内からタグなどの条件から位置を特定して取得できる、
htmlファイルを指定せずともソースを開ける等、
全て想像を上回ってました。
(強いて言うなら、BusyWait の仕組みがまだ分かっておりません。)
しかも、out.csv には前のデータを消さずに改行追記。(ファイル名に日付指定する方法も知りたいですが。)
さらにUWSC本体でスケジュール設定したら、お礼を書いている間も、定期的に実行されてます。
全てが目からうろこ、驚きです。これもRPAと呼ぶんですかね???
これで解決方法は分かりましたので、neKo_deux さんをベストアンサーにさせていただきますが、可能なら更に不明点をご教授いただけると幸いです。
(ここを読め!でも結構です。)
頂いたスクリプトを参考に、自分のやりたい事に置き換えていく中での不明点です。
手順を具体的に書きます。
(1)最初に開くURLは、
https://mypage.freetel.jp/login
(2)このログイン画面で、
メールアドレス:aaa@bbb.com
パスワード:password
を入力し、「ログイン」ボタンを押下すると、
https://mypage.freetel.jp/index に飛びます。
(3)その先の本来の画面遷移通りに操作しなくても、
直接 https://mypage.freetel.jp/SavingMode/saveModeDet …
にアクセスすれば取得したい画面に遷移します。
(4)目的ページのソースから
「<span style="font-size: x-large;">」 と 「</span>」の間の文字列を
CSVに追記できればOKという事になります。
これを毎日23:59に実施すれば全て解決となりますが、
次回実施のために念のため、ログアウト処理もすべきでしょうか?
その際、 https://mypage.freetel.jp/logout にアクセスすればログアウトなのですが。。。
もし可能であればどうかよろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- 電気工事士 【電気のデマンドに関する質問です】電力会社への支払いは最大電力量を基準に決定される。そ 3 2023/07/11 19:39
- au(KDDI) 特定の画面を見るとスマホが固まります ご覧頂き有難うございます。 特定のページを見るとスマホが固まり 1 2023/08/21 19:29
- クーポン・割引券 バスの定期券について 3 2022/04/13 22:02
- 簿記検定・漢字検定・秘書検定 4月から商業高校の会計科に通う予定の中学生です。現在春休みで、簿記検定3級を取得しようと考えており、 1 2023/03/04 14:40
- Excel(エクセル) 記録マクロのみでできますか? 7 2022/08/07 20:38
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- 消費者問題・詐欺 お金を取り返すことは可能でしょうか? 4 2023/01/07 13:17
- 確定申告 個人の確定申告。「医療費のお知らせ」記載内容と医療費控除の明細書【内訳書】に記入する内容の関係 4 2023/03/04 18:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
食品衛生責任者資格を取得した...
-
ISO 9001とIATF 16949の関係に...
-
Pマークを取得する際に携帯電話...
-
下水道管理技術認定試験と水質...
-
CCNA新試験について
-
ネイリスト資格 JNA2~1級の取...
-
医療法人
-
あるWEBページの特定の数値を自...
-
取得原価と取得価格の違い
-
職業訓練 合格辞退できますか。
-
中小企業診断士試験と応用情報...
-
司法試験に向けた基本書
-
25歳から臨床検査技師を目指せ...
-
臨床検査技師、放射線技師 生...
-
初級シスアドとPAT検定について!
-
MOUS試験の操作方法は?
-
質問です
-
ITパスポート試験で質問です 試...
-
ITパスポートを取得しないと基...
-
.com masterの模試を受験できる...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
食品衛生責任者資格を取得した...
-
個人情報の保護について
-
第一種衛生管理者を取得した後...
-
第二種電気工事士を取得せずに ...
-
下水道管理技術認定試験と水質...
-
電子証明書と電子署名
-
EIN取得を教えてください。
-
32歳の専業主婦です。 再就職に...
-
風営法
-
ベーシックファーストエイドプ...
-
一級建築施工管理技士 第一種電...
-
フォークリフト免許もってる方...
-
日本国籍を破棄してアメリカ国...
-
Oracle 9i Silver Fellow → 10g...
-
MBA取得について
-
MBAの必要性
-
危険物取扱者 勤務先等連絡先
-
資格試験の会場が遠いのは?
-
高度情報処理試験 午前1免除に...
-
職業訓練 合格辞退できますか。
おすすめ情報
具体的に取得したい画面のキャプチャーを貼ってみます。
緑枠が取得したい文字列です。
最初の単位は「MB」、
1000MBを超えたところで「GB」へと変化するので単位まで取得したいです。
No2への補足です。
色々頼ろうとして申し訳なかったですが、
ログインして、目的のページへ遷移して、必要な情報をCSVに書き出すところまでできました。
なので大丈夫です。
ただ取得情報の場所特定テクニックが甘く、結構余計な情報まで取得してしまう仕様です。
上手い取得の方法の相談に乗っていただけるなら具体的に書きます。
駄目なら諦めます。
ありがとうございました。
No.4の補足です。
締めくくると言っておきながら申し訳ありません。
Replaceで半分は解決しました!
あと1つだけ教えてください。
先日の添付画像をみると
「2.40GB ~ 2.41GB」に見えますが、実はここが曲者で、
「~」この波線が環境依存文字を使っているのです。開発者はMacかな?
その為、書き出されたCSV内では「?」に変換されているのですが、
Replaceで取り除けないのです。
ちなみに書き出された後のCSVでは
「2.40GB ? 2.41GB」となります。
文字コードの問題で、実はシンプルなクエスチョンマークではないのかもしれませんが・・・
これだけお知恵をお貸しください。