解決したいこと
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
あなたの回答
tips
プレビュー