パワークエリ WebのPOSTページとか言ってるけど何?
と
メッセージをいただいたので、
少しやってみます。
#Excel #パワークエリ #PowerQuery #エクセル #msexcel #webクエリ #JRA #大阪杯 #デバッグ
https://youtube.com/live/9ehjI5uhyWE
目次
00:00 あいさつ
00:40 1.まず、Web Formの入力データをPOSTで送るページを簡単に説明する
02:25 1.1 HTMLソースを確認すると
04:33 1.2 METHOD="GET"のページ
10:51 1.3 METHOD="POST"のページ
15:21 2.POST送信のテスト METHOD="POST"のページ結果を受け取る
16:57 2.1 確認用のページでやってみる
19:18 2.1.1 簡単なPOST送信 パワークエリ M言語コードの解説
28:12 2.1.2 余談で少し脱線 Getは楽で、URLにパラメーターを載せるだけなので
31:02 3 JRAの単勝オッズを取得 3月31日(日曜)阪神11R 大阪杯でテストしてみた
33:25 3.1 おまじない Content-Type=application/x-www-form-urlencoded が記載されています
38:29 蛇足で大阪杯の人気順を取得する 修正方法を紹介する このあと失敗する・・・
40:37 パラメータの/36を/58に直しただけでは、動作しなかった・・実は微妙に違っていたり・・
41:26 新規の接続で人気順 pw151opS309202402041120240331Z/58 をコピーすると動いた
43:28 cnameのパラメーターが一文字でも違っていると受け取れない、思い込み注意
47:19 よく実施するデバッグ方法で新規ブックでやり直す
48:55 新たにソースをコピーすると、動く
53:15 やっと、手抜きしないで全てを比べて、真の不具合原因を知る
56:05 4.おわりの挨拶
00:40 1.まず、Web Formの入力データをPOSTで送るページを簡単に説明する
私の都合の良いHP
http://www.ken3.org/cgi-bin/test/test041-1.asp
でテストすると、
02:25 1.1 HTMLソースを確認すると
送信メソッドが
POSTか?GETか?
の違いだけです
って、「よくわかりませんよね?」
04:33 1.2 METHOD="GET"のページ
https://www.youtube.com/watch?v=9ehjI5uhyWE&t=273s
GETのページは、URLに?でつなげて、パラメーターを渡しています
http://www.ken3.org/cgi-bin/test/test041-1.asp?USER-NAME=Ken3&pass1=ABCD&pass2=ABCD
や、よく使う
GoogleでKen3Memo+VBAを検索すると、q=にパラメーターが付く
https://www.google.com/search?q=Ken3Memo%20VBA
Youtubeも同様に Ken3+JRA を検索すると、
https://www.youtube.com/results?search_query=Ken3%20JRA
のリンクやブックマークできるURLです、
※URLにパラメーターが載っているので、URL+パラメーターでアクセスする
※※ %20は、空白で q=Ken3Memo VBAを表してます。一行でURLがつながります。
10:51 1.3 METHOD="POST"のページ
https://www.youtube.com/watch?v=9ehjI5uhyWE&t=651s
POSTのページは、URLにパラメータが載っていなくて、
そのまま、入力Formのデータを送信しています。
コメント書き込みページやログインページなど、気にしてないけど
<FORM ACTION="test041-1.asp" METHOD="POST"> <font color="blue">TYPE="text" テキストの入力テスト</font><br> お名前:<INPUT TYPE="text" SIZE="20" NAME="USER-NAME" VALUE="匿名希望"><br> E-Mail:<INPUT TYPE="text" SIZE="20" NAME="EMAIL" VALUE="****@**.co.jp"><br> <br> <font color="blue">TYPE="password" パスワードの入力テスト</font><br> パスワード:<INPUT TYPE="password" NAME="pass1" SIZE="20"><br> パスワード:<INPUT TYPE="password" NAME="pass2" SIZE="20">(同じのを(笑))<br> <br> <font color="blue">TYPE="CHECKBOX" チェックボックスの入力テスト</font><br> このメルマガでやってほしいことにチェックを入れてください<br> <INPUT TYPE="CHECKBOX" NAME="c_1" VALUE="on">HTMLから詳しく丁寧に<BR> <INPUT TYPE="CHECKBOX" NAME="c_2" VALUE="on">VBScriptをもっと詳しく<BR> <INPUT TYPE="CHECKBOX" NAME="c_3" VALUE="on">ゲーム作ろうよ<BR> <br> <font color="blue">TYPE="RADIO" ラジオボタンの入力テスト</font><br> このメルマガの満足度を5段階で(笑)<br> 不満 ------ 満足<br> 1<INPUT TYPE="RADIO" NAME="q_5" VALUE="1"> 2<INPUT TYPE="RADIO" NAME="q_5" VALUE="2"> 3<INPUT TYPE="RADIO" NAME="q_5" VALUE="3" CHECKED> 4<INPUT TYPE="RADIO" NAME="q_5" VALUE="4"> 5<INPUT TYPE="RADIO" NAME="q_5" VALUE="5"> <br> <font color="blue">TEXTAREA ROWS=10 COLS=40 の入力テスト</font><br> 感想:<TEXTAREA NAME="HONBUN" ROWS=5 COLS=40>複数文章をテスト</TEXTAREA><br> <br> <font color="blue">TYPE="submit" 送信ボタンのテスト</font><br> <INPUT TYPE="submit" NAME="btn1" VALUE="送信1"> <INPUT TYPE="submit" NAME="btn2" VALUE="送信2"> <INPUT TYPE="reset" VALUE="入力し直す"> </FORM>
まぁ、Webフォームの送信には、大きく2種類あると、思ってください。
(Fileをアップロードもあるけどね・・・)
15:21 2.POST送信のテスト METHOD="POST"のページ結果を受け取る
簡単に、説明したので(「簡単すぎです・・・」)
実際に、パワークエリで取得してみます
16:57 2.1 確認用のページでやってみる
https://www.youtube.com/watch?v=9ehjI5uhyWE&t=1017s
都合の良いページなので・・・(笑)
let strURL = "http://www.ken3.org/cgi-bin/test/test041-1.asp", strPARA = Text.ToBinary("cname=abcd123&data2=ken3test&t=20"), strHEAD = [#"Content-Type"="application/x-www-form-urlencoded"], ソース = Web.Contents(strURL, [Headers = strHEAD, Content = strPARA]), 文字列 = Text.FromBinary(ソース, 932), HTMLtest = Web.Page(文字列), TB0 = HTMLtest{0}[Data] in TB0
と、上記ソースをコピーして、実行してください。
19:18 2.1.1 簡単なPOST送信 パワークエリ M言語コードの解説
https://www.youtube.com/watch?v=9ehjI5uhyWE&t=1158s
POSTのパラメーターを
strPARA = Text.ToBinary("cname=abcd123&data2=ken3test&t=20"),
で作成して、※複数は&でつなげる。
ヘッダーに呪文、おまじないで、
strHEAD = [#"Content-Type"="application/x-www-form-urlencoded"],
と、
Content-Type=application/x-www-form-urlencoded
をセット、
ソース = Web.Contentsで、POST送信してアクセスする
返ってくる結果がシフトJISなので、
文字列 = Text.FromBinary(ソース, 932),
で変換する
文字コードの解説は前回
https://www.youtube.com/watch?v=0WA7jPsoMWw&t=852
↑を見てください
文字コードを変換後、
HTMLtest = Web.Page(文字列),
で、きれいにしてから、
単純に
TB0 = HTMLtest{0}[Data]
で、1番目のテーブル(0)指定で単純に取得
ヘッダの処理とかしないで、
in
TB0
で、結果を表示。
こんな感じです。
28:12 2.1.2 余談で少し脱線 Getは楽で、URLにパラメーターを載せるだけなので
https://www.youtube.com/watch?v=9ehjI5uhyWE&t=1692s
let strURL = "http://www.ken3.org/cgi-bin/test/test041-1.asp?LV=1&USERNAME=Ken3", ソース = Web.Contents(strURL), 文字列 = Text.FromBinary(ソース, 932), HTMLtest = Web.Page(文字列), TB0 = HTMLtest{0}[Data] in TB0
わかりやすいです。
31:02 3 JRAの単勝オッズを取得 3月31日(日曜)阪神11R 大阪杯でテストしてみた
https://www.youtube.com/watch?v=9ehjI5uhyWE&t=1862s
単品テストに載せる内容じゃないけど、
JRAのオッズをパワークエリで取得してみます。
let strURL = "https://www.jra.go.jp/JRADB/accessO.html", strPARA = Text.ToBinary("cname=pw151ouS309202402041120240331Z/36"), strHEAD = [#"Content-Type"="application/x-www-form-urlencoded"], ソース = Web.Contents(strURL, [Headers = strHEAD, Content = strPARA]), 文字列 = Text.FromBinary(ソース, 932), HTMLtest = Web.Page(文字列), TB0 = HTMLtest{0}[Data] in TB0
33:25 3.1 おまじない Content-Type=application/x-www-form-urlencoded が記載されています
https://www.youtube.com/watch?v=9ehjI5uhyWE&t=2005s
やはり、
お手本になるJRAのページ
私の手抜きと違い、
Web Formに
<form id="commForm01" method="POST" enctype="application/x-www-form-urlencoded" style="margin-top:0em; margin-bottom:0em"> <input type="hidden" id="cname" name="cname" ></form>
と、
enctype="application/x-www-form-urlencoded"
の記載アリ。
エンコードは、
application/x-www-form-urlencoded
と指定してますね。
この指定が、
strHEAD = [#"Content-Type"="application/x-www-form-urlencoded"],
ソース = Web.Contents(strURL, [Headers = strHEAD, Content = strPARA]),
のヘッダ指定でした。
input type="hidden" id="cname" name="cname"
の探り方は、
先週のライブ JRA POSTページ
https://www.youtube.com/watch?v=0WA7jPsoMWw&t=1607
や
JRAオッズ取得 onClick doAction が なんでPOSTだと
https://www.youtube.com/watch?v=NPnKju8rkVw
↑を参考にしてください。
38:29 蛇足で大阪杯の人気順を取得する 修正方法を紹介する このあと失敗する・・・
https://www.youtube.com/watch?v=9ehjI5uhyWE&t=2309s
40:37 パラメータの/36を/58に直しただけでは、動作しなかった・・実は微妙に違っていたり・・
あとで判明するが、
pw151ouS309202402041120240331Z/36 馬番順
pw151opS309202402041120240331Z/58 人気順
□□↑ここ、ouとopが違っていて↑最後のチェクサム?が違うのかなぁ?
あっ、uとpが違う・・感じ?
41:26 新規の接続で人気順 pw151opS309202402041120240331Z/58 をコピーすると動いた
43:28 cnameのパラメーターが一文字でも違っていると受け取れない、思い込み注意
https://www.youtube.com/watch?v=9ehjI5uhyWE&t=2608s
編集の位置は関係なかった、何度で言いますね、
パラメーターが
pw151ouS309202402041120240331Z/36 馬番順
pw151opS309202402041120240331Z/58 人気順
□□↑ここ、ouとopが違っていて↑36を58ダケじゃなかった
※設定ミス、コピペが違っていただけでした
47:19 よく実施するデバッグ方法で新規ブックでやり直す
https://www.youtube.com/watch?v=9ehjI5uhyWE&t=2839s
新規ブックでやり直す、そんなデバッグってありますよね?
おっと、これは、原因が違うから、新規ブックでもダメなんだぜ・・・
これが、デバッグでハマるって現象です(笑)おいおい・・・
48:55 新たにソースをコピーすると、動く
https://www.youtube.com/watch?v=9ehjI5uhyWE&t=2935s
動いたら、都合の良い犯人捜し・・・
明日のレースだから、17時にコードが切り替わったとか、
自分に都合の良いバグの理由を探す・・最低だね三流プログラマーは・・・
もとから、パラメーターは変わってません。
53:15 やっと、手抜きしないで全てを比べて、真の不具合原因を知る
https://www.youtube.com/watch?v=9ehjI5uhyWE&t=3195s
編集の位置は関係なかった、何度で言いますね、
パラメーターが
pw151ouS309202402041120240331Z/36 馬番順
pw151opS309202402041120240331Z/58 人気順
□□↑ここ、ouとopが違っていて↑36を58ダケじゃなかった
56:05 4.おわりの挨拶
単体テストのつもりが、
長時間、すみません。
もう少し、単体なら、切ったほうがいいですよね?
さて、ここから、結合テストにもっていかないとなぁ。
ではまたぁ。。。。
再生リストの紹介: #JRA #オッズ を #自動取得
https://www.youtube.com/playlist?list=PLBFC80A8658C305CE
↑関連動画の再生リストです