質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

4506閲覧

EXCEL VBAからWordPressのRESTAPIを使用して投稿したい

so_chan

総合スコア16

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2020/09/01 07:24

編集2020/09/03 01:45

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2020/09/02 23:28

JSON データの構造の問題と思いますが、送信している組み立て済みのJSON データを質問に追記することは可能でしょうか?
so_chan

2020/09/03 01:45

ありがとうございます。追記させていただきました。
kuma_kuma_

2020/09/21 20:39

WordPressでREST APIを利用して自動投稿を行う https://ichiro-kun.com/post/1088/ こちらの情報ですが objHTTP.setRequestHeader "Content-Type", "application/json" で試してみて下さい。 あと気になったのが"us-ascii"の指定 WordPressは"utf-8"だと思いますが、もし日本語が文字化けするようでしたら変更してみて下さい。
so_chan

2020/09/23 01:07

ご指摘の修正とJsonの形式が誤っていたので修正したら無事に投稿できました!ありがとうございます!
guest

回答1

0

自己解決

送信するJsonを作成するときのコードを修正

VBA

1 JsonObject.Add "method", method 2 JsonObject.Add "title", Title 3 JsonObject.Add "content", Content 4 JsonObject.Add "status", Status

ヘッダーを修正

修正前

VBA

1 objHTTP.setRequestHeader "Content-Type", "text/plain"

修正後

VBA

1 objHTTP.setRequestHeader "Content-Type", "application/json"

投稿2020/09/23 01:11

so_chan

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問