前提・実現したいこと
EXCEL VBAのVBAを使用してWordPressのRESTAPIにアクセスして、更新をしたいと思います。
認証まではできたのですが、
JSONリクエストを送信しているのですが、エラーコードを見ている限り、
「コンテンツがない」
と言われうまく送信できません
発生している問題・エラーメッセージ
{"code":"empty_content","message":"\u672c\u6587\u3001\u30bf\u30a4\u30c8\u30eb\u3001\u629c\u7c8b\u304c\u7a7a\u6b04\u3067\u3059\u3002","data":{"status":400}}
{"code":"empty_content","message":"本文、タイトル、抜粋が空欄です。","data":{"status":400}}
該当のソースコード
VBA
1Sub HTTPリクエスト() 2 3 4 URL = "https://********.jp/wp-json/wp/v2/posts/" 5 UserName = "*****" 6 pass = "*****" 7 8 Status = "draft" 9 10 method = "POST" 11 12 Title = "test" 13 Content = "texttext" 14 15'JSON作成 16 17 Dim JsonObject As Object 18 Set JsonObject = New Dictionary 19 20 Dim Header As String 21 Header = UserName + ":" + pass 22 Header = "Basic " & EncodeToBase64(Header) 23 24 25 JsonObject.Add "method", method 26 27 JsonObject.Add "body", New Dictionary 28 JsonObject("body").Add "title", Title 29 JsonObject("body").Add "content", Content 30 JsonObject("body").Add "status", Status 31 32 JsonObject.Add "muteHttpExceptions", True 33 34 ' イミディエイトウィンドウで確認(デバック用) 35Debug.Print JsonConverter.ConvertToJson(JsonObject, Whitespace:=2) 36 37 38 39 40Dim objHTTP As Object 41Set objHTTP = CreateObject("msxml2.xmlhttp") 42 43 objHTTP.Open "POST", URL, False 44 objHTTP.setRequestHeader "Authorization", Header 45 objHTTP.setRequestHeader "Content-Type", "text/plain" 46 objHTTP.send JsonConverter.ConvertToJson(JsonObject) 47 48 49Debug.Print objHTTP.responseText 50' レスポンスコード(正常) 51If objHTTP.Status = 200 Then 52 MsgBox "正常に終了しました" 53End If 54 55 56End Sub 57 58Public Function EncodeToBase64(ByRef text As String) As String 59 60 ' オブジェクトの準備 61 Dim node As Object 62 Set node = CreateObject("Msxml2.DOMDocument.3.0").createElement("base64") 63 64 ' エンコード 65 node.DataType = "bin.base64" 66 node.nodeTypedValue = ConvertToBinary(text) 67 68 ' 関数で取り除けない改行を削除して返却 69 EncodeToBase64 = Replace(node.text, vbLf, "") 70End Function 71 72' *============================================================== 73' * 文字列をバイナリデータに変換します 74' * 75' * @param text 変換する値 76' * @return バイナリデータ 77' *============================================================== 78Public Function ConvertToBinary(ByRef text As String) 79 80 ' オブジェクトの準備 81 Dim BinaryStream As Object 82 Set BinaryStream = CreateObject("ADODB.Stream") 83 84 ' Streamの設定 85 With BinaryStream 86 .Type = 2 87 .Charset = "us-ascii" 88 .Open 89 .WriteText text 90 .Position = 0 91 .Type = 1 92 .Position = 0 93 End With 94 95 ConvertToBinary = BinaryStream.Read 96End Function 97 98
###送信しているJson (JsonObject の中身)
{ "method": "POST", "body": { "title": "test", "content": "texttext", "status": "draft" }, "muteHttpExceptions": true }
試したこと
元は
GASから更新しておりこちらを参考にEXCELで作成しました
https://teratail.com/questions/211650
補足情報(FW/ツールのバージョンなど)
参考にしました。
WordPressRESTAPI認証
https://ja.wp-api.org/guide/authentication/
EXCEL(VBA)から、JSONデータをHTTP送信してみよう。
https://doruby.jp/users/ookouchi/entries/201708-EXCEL-VBA-JSON-API-MSXML2-XMLHTTP
【参照設定不要】Base64フォーマットにエンコードする
https://localbias.work/796
回答1件
あなたの回答
tips
プレビュー