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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

HTTP

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

WordPress

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

2回答

1756閲覧

Google Apps Script からWordPressの更新をしたい。

so_chan

総合スコア16

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

HTTP

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

WordPress

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2019/09/13 02:18

編集2019/10/03 00:22

前提・実現したいこと

スプレッドシート(googleappsscript)かWordPressへ記事を投稿したい

発生している問題・エラーメッセージ

{"code":"rest_cannot_create","message":"\u3053\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u3057\u3066\u6295\u7a3f\u3092\u7de8\u96c6\u3059\u308b\u6a29\u9650\u304c\u3042\u308a\u307e\u305b\u3093\u3002","data":{"status":401}}

下記URLで変換後のメッセージ
https://so-zou.jp/web-app/text/encode-decode/

{"code":"rest_cannot_create","message":"このユーザーとして投稿を編集する権限がありません。","data":{"status":401}}

該当のソースコード

//****の部分は実際には正しい(と思われる)ものを入れています。

GAS

1function POST_API() { 2 3 var URL = 'http://www.****/wp-json/wp/v2/posts' 4 var username = '****' 5 var pass = 'vq6y BTf7 Sv7D Eph8 C4Fe NbjB' 6 7 var method = 'POST' 8 9 var headers = { 10 'Authorization': 'Basic '+ Utilities.base64Encode(username + ':' + pass) 11 }; 12 13 var body = { 14 'title' : 'title', 15 'content' : 'hogehoge', 16 'status' : 'publish' 17 } 18 19 var options = { 20 'method' : method, 21 'headers': headers, 22 'body' : body, 23 'muteHttpExceptions': true 24 }; 25 26 27 28 var response = UrlFetchApp.fetch(URL,options); 29 Logger.log(response) 30 31}

試したこと

Application Passwordsは有効化済み
ユーザーネームパスワードも発行済
https://ja.wordpress.org/plugins/application-passwords/

下記のサイトを参考に自分なりにPHP⇒GASに書き換えを試みてみたがうまくいきませんでした。
https://it-engineer-lab.com/archives/312
http://ja.wp-api.org/extending/javascript-client/

追記:

https://www.tam-tam.co.jp/tipsnote/cms/post10274.html
上記を参考に下記のコマンドを叩いてみましたが、エラーのメッセージは同じでした。
IDパスワードが間違っているのかな?とも考えて新規にユーザーを追加して見ましたが、結果は同じでした。

curl --header "Authorization: Basic ****************" -X POST -d "title=From API" http://*********/wp-json/wp/v2/posts

プラグインが影響しているのかと思い、全て無効にしたり、
関係しそうなセキュリティ関係のものを無効にしたりしましたが変化はありませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

CHERRY

2019/09/13 03:34 編集

401 なので、認証情報で、ログインできていません。 curl 等 別の方法で、同じユーザー名とパスワードを用いて ログインできるでしょうか?
so_chan

2019/09/13 04:28

https://www.tam-tam.co.jp/tipsnote/cms/post10274.html 上記を参考に下記のコマンドを叩いてみましたが、エラーのメッセージは同じでした。 IDパスワードが間違っているのかな?とも考えて新規にユーザーを追加して見ましたが、結果は同じでした。 >curl --header "Authorization: Basic ****************" -X POST -d "title=From API" http://*********/wp-json/wp/v2/posts
so_chan

2019/10/03 00:20

一旦すべてのプラグインを無効にしたり、関係しそうなプラグインを残したりいろいろ試して見ましたが特に変わらずでした。
odyu

2019/10/03 02:17

そうですか。 ユーザーの権限が正しいのであれば、wpのサポートで対応する方が良いかもしれませんね。 https://ja.wordpress.org/support/
guest

回答2

0

メールにて解決したとのことで不要な情報かもしれませんが、
下記2点の修正でGASからWP RESTへのPOSTができると思います。(当方の環境では成功しました。)

GASのfetch詳細は下記のリファレンスページをご参考ください。
Class UrlFetchApp  |  Apps Script  |  Google Developers

"headers "のスペース削除

Basicの前のスペース1個削除

  • 修正前

GAS

1 var headers = { 2 'Authorization': 'Basic '+ Utilities.base64Encode(username + ':' + pass) 3 };
  • 修正後

GAS

1 var headers = { 2 'Authorization': 'Basic '+ Utilities.base64Encode(username + ':' + pass) 3 };

optionの変更

body→payloadに変更

  • 修正前

GAS

1 var body = { 2 'title' : 'title', 3 'content' : 'hogehoge', 4 'status' : 'publish' 5 } 6 7 var options = { 8 'method' : method, 9 'headers': headers, 10 'body' : body, 11 'muteHttpExceptions': true 12 };
  • 修正後

GAS

1 var payload= { 2 'title' : 'title', 3 'content' : 'hogehoge', 4 'status' : 'publish' 5 } 6 7 var options = { 8 'method' : method, 9 'headers': headers, 10 'payload' : payload, 11 'muteHttpExceptions': true 12 };

投稿2019/11/22 06:11

cheshire-boy

総合スコア8

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

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

cheshire-boy

2019/11/22 13:09

上記リンクのまま.htaccessを編集してしまうとwordpressに自動で上書きされる可能性があるため「# BEGIN WordPress」より上に <IfModule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}] </IfModule> を書いたほうが良いかもしれません!
guest

0

自己解決

メールでワードプレスを更新するプラグインがあったので

GASからメールを送信することで似たようなことを実装することにしました。

https://ja.jetpack.com/support/post-by-email/

投稿2019/10/08 07:41

so_chan

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問