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

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

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

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

WordPress

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

Q&A

0回答

1643閲覧

GASからWordPressにアイキャッチ画像付きで自動投稿したい

fujimido

総合スコア1

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

WordPress

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

0グッド

0クリップ

投稿2021/07/16 02:26

解決したいこと

GASからWordPressにアイキャッチ画像付きで自動投稿したいです。
アイキャッチ画像をつけなければ自動投稿できましたが、つけるとエラーになります。

発生している問題・エラー

エラー SyntaxError: Unexpected token < in JSON at position 0
at postImage(コード:88:27)
at postArticle(コード:24:15)

該当するソースコード

GAS

1 2function setVal() { 3 //スクリプトプロパティでキーと値を格納する 4 PropertiesService.getScriptProperties().setProperty("URL", "https://xxxxxxxx.com/"); 5 PropertiesService.getScriptProperties().setProperty("USER_ID", "userid"); 6 PropertiesService.getScriptProperties().setProperty("PASSWORD", "xxxxxxxx"); 7} 8 9//ワードプレスのREST APIを利用して記事を自動投稿する関数 10function postArticle() { 11 setVal(); 12 //自動投稿したいワードプレスサイトのURLを入力する 13 let siteURL = PropertiesService.getScriptProperties().getProperty('URL'); 14 //ワードプレスのユーザー名をスクリプトプロパティから設定する 15 let userID = PropertiesService.getScriptProperties().getProperty('USER_ID'); 16 //ワードプレスのパスワードをスクリプトプロパティから設定する 17 let pass = PropertiesService.getScriptProperties().getProperty('PASSWORD'); 18 //自動投稿する記事のタイトルを設定する 19 let title = '自動投稿テスト'; 20 //自動投稿する記事本文を設定する 21 let content = 'これは自動投稿です。'; 22 //アイキャッチ画像 postImage(siteURL, userID, pass, 'アイキャッチ画像にしたい画像URL'); 23 var imageID = postImage(siteURL, userID, pass, 'http://xxxxxxx.com/wp-content/uploads/2021/02/IMG_9456-2.jpg'); 24 //アップロードした結果の画像IDを取得 25 imageID = Number(imageID["id"]) 26 27 //自動投稿用APIのURLをサイトURLから生成する 28 let apiURL = siteURL + 'wp-json/wp/v2/posts'; 29 //APIリクエスト時にヘッダー情報で必要な認証情報を設定する 30 let headers = { 31 'Content-Type': 'application/json', 32 'Authorization': 'Basic ' + Utilities.base64Encode(userID + ":" + pass) 33 }; 34 //記事投稿の詳細情報を記録したオブジェクトを設定する 35 let arguments = { 36 'title': title, 37 'content': content, 38 'featured_media': imageID, 39 'status': 'publish', 40 'comment_status': 'closed' 41 }; 42 //HTTP通信でPOSTするため、記事投稿情報をjsonにしてオプション情報を設定する 43 let options = { 44 'method': 'POST', 45 'muteHttpExceptions': true, 46 'headers': headers, 47 'payload': JSON.stringify(arguments) 48 }; 49 //URLフェッチでAPIリクエストで記事投稿を行う 50 let response = UrlFetchApp.fetch(apiURL, options); 51 //応答結果をJSON化して保存し、ログ出力 52 let responseJson = JSON.parse(response.getContentText()); 53 console.log(responseJson); 54} 55 56/* 57関数概要 58 wordpressに画像をアップロードし、その結果を返す 59引数 60 siteUrl サイトのURL 61 user API認証するためのユーザー名 62 pass API認証するためのパスワード 63 imageUrl 画像URL 64 65戻り値 66 アップロード結果 67*/ 68function postImage(siteUrl, user, pass, imageUrl) { 69 70 var apiUrl = siteUrl + 'wp-json/wp/v2/media'; 71 72 var headers = { 73 'Content-Type': 'image/png', 74 'Content-Disposition': 'attachment;IMG_9456-2.jpg', 75 'accept': 'application/json', 76 'Authorization': 'Basic ' + Utilities.base64Encode(user + ":" + pass) 77 }; 78 79 var options = { 80 'method': 'POST', 81 'muteHttpExceptions': true, 82 'headers': headers, 83 'payload': UrlFetchApp.fetch(imageUrl) 84 }; 85 86 var response = UrlFetchApp.fetch(apiUrl, options); 87 //ここでエラーになる!2021-07-14 88 var responseJson = JSON.parse(response.getContentText()); 89 90 return responseJson; 91} 92 93

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。

このプログラムは以下の2つのサイトを参考にしました。
//GASでワードプレスを自動投稿する方法~REST APIによる記事の新規作成手順
//https://auto-worker.com/blog/?p=2475

//GASを使ってアイキャッチ画像付でWordPressに自動投稿する方法
//https://arukayies.com/gas/wordpress-rest-api/postreport-thumbnail
function setVal() {

デバッグ内容を見ると、response.getContentText()が空です。

イメージ説明

###利用環境
windows10

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

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

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

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

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

macaron_xxx

2021/07/18 23:31

参考サイトとの相違点でいくと 'Content-Disposition': 'attachment;filename=画像のファイル名.png'の filename= がないですね。
fujimido

2021/07/19 07:24

macaron_xxx様 ご確認いただきありがとうございます。 以下のようにソースを変更しましたが、改善されませんでした。 ### 該当するソースコード ```GAS /* 関数概要 wordpressに記事を投稿する処理(アイキャッチ画像付) 戻り値  実行結果 */ function postReport_thumbnail() { var siteUrl = 'https://xxxx2020.com/'; var user = 'xxxx2020'; var pass = 'xxxx UHbE knYr f7DE JMy6 xxxxx'; var title = '自動投稿テスト(アイキャッチ画像付)'; var content = 'これは自動投稿です。(アイキャッチ画像付)'; var categories = 23; var tag = 26; var apiUrl = siteUrl + 'wp-json/wp/v2/posts'; var headers = { 'Content-Type': 'application/json', 'Authorization': 'Basic ' + Utilities.base64Encode(user + ":" + pass) }; //画像をアップロードする var imageID = postImage(siteUrl, user, pass, 'http://xxxx2020.com/wp-content/uploads/2021/02/IMG_9456-2.jpg'); //アップロードした結果の画像IDを取得 imageID = Number(imageID["id"]) var arguments = { 'title': title, 'content': content, 'featured_media': imageID, 'status': 'publish', 'comment_status': 'closed', 'categories':categories, 'tag':tag } var options = { 'method': 'POST', 'muteHttpExceptions': true, 'headers': headers, 'payload': JSON.stringify(arguments) }; var response = UrlFetchApp.fetch(apiUrl, options); var responseJson = JSON.parse(response.getContentText()); return responseJson; } ///////////////////////////////////////////////// /* 関数概要 wordpressに画像をアップロードし、その結果を返す 引数 siteUrl サイトのURL user API認証するためのユーザー名 pass API認証するためのパスワード imageUrl 画像URL 戻り値 アップロード結果 */ function postImage(siteUrl, user, pass, imageUrl) { var apiUrl = siteUrl + 'wp-json/wp/v2/media'; var headers = { 'Content-Type': 'image/png', 'Content-Disposition': 'attachment;filename=IMG_9456-2.jpg', 'accept': 'application/json', 'Authorization': 'Basic ' + Utilities.base64Encode(user + ":" + pass) }; var options = { 'method': 'POST', 'muteHttpExceptions': true, 'headers': headers, 'payload': UrlFetchApp.fetch(imageUrl) }; var response = UrlFetchApp.fetch(apiUrl, options); //ここでエラーになります。 var responseJson = JSON.parse(response.getContentText()); return responseJson; }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問