三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

Excel パワークエリ WebのPOSTページからテーブルを取得 Content-Type application x-www-form-urlencoded って何?

パワークエリ 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
↑関連動画の再生リストです

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)