WordPress.Com: 記事 追加 (WordPress.Com: Posts New)
記事ドラフトを作成します。コンテンツは「投稿」タイプの Draft HTML(下書き)として保存されます。 EL 式を用いて投稿先 WORDPRESS DOMAIN を動的に変化させたい場合は Scope を “global” に設定します。
https://support.questetra.com/ja/addons/wordpress-com-media-new/
2019-01-09 (C) Questetra, Inc. (MIT License)
Configs
  • A: 通信許可の設定名([OAuth2.0設定]メニュー)をセットしてください *
  • B: 投稿先の WORDPRESS DOMAIN をセットしてください (例 “example.com” or ID) * #{EL}
  • C: 作成日時が格納されている日時or日付型データ項目を選択してください
  • D: 記事タイトルが格納されている文字列型データ項目を選択してください
  • E: 記事Slug(URL)が格納されている文字列型データ項目を選択してください
  • F: 抜粋Excerpt文が格納されている文字列型データ項目を選択してください
  • G: 記事コンテンツが格納されている文字列型データ項目を選択してください
  • H: 記事 ID が格納される文字列型or数値型データ項目を選択してください (更新)
  • I: 記事 URL が格納される文字列型データ項目を選択してください (更新)
Script
// (c) 2018, Questetra, Inc. (the MIT License)

//// == OAuth2 Setting example ==
// Authorization Endpoint URL:
//  "https://public-api.wordpress.com/oauth2/authorize"
// Token Endpoint URL:
//  "https://public-api.wordpress.com/oauth2/token"
// Scope: "global" (or "auth")
// Client ID: ( from https://developer.wordpress.com/apps/ )
// Consumer Secret: ( from https://developer.wordpress.com/apps/ )
// -- "Redirect URLs": "https://s.questetra.net/oauth2callback"
// -more-
// https://developer.wordpress.com/docs/oauth2/
// https://developer.wordpress.com/docs/api/1.2/post/sites/%24site/posts/new/


//////// START "main()" ////////
main();
function main(){ 

//// == Config Retrieving / 工程コンフィグの参照 ==
const oauth2   = configs.get( "conf_OAuth2"  ) + "";
const wpDomain = configs.get( "conf_WpDomain") + "";
const dataIdC  = configs.get( "conf_DataIdC" ) + "";
const dataIdD  = configs.get( "conf_DataIdD" ) + "";
const dataIdE  = configs.get( "conf_DataIdE" ) + "";
const dataIdF  = configs.get( "conf_DataIdF" ) + "";
const dataIdG  = configs.get( "conf_DataIdG" ) + "";
const dataIdH  = configs.get( "conf_DataIdH" ) + "";
const dataIdI  = configs.get( "conf_DataIdI" ) + "";
// 'java.lang.String' (String Obj) to javascript primitive 'string'
if(wpDomain === ""){
  throw new Error( '\n WordPress Domain not Defined. \n' );
}


//// == Data Retrieving / ワークフローデータの参照 ==
let postTime = "";
if( dataIdC !== "" ){
  const offsetMin = engine.getTimeZoneOffsetInMinutes() - 0; // "540" "-480" etc
  const absOffset = Math.abs( offsetMin );
  const timeHour  = Math.floor( absOffset / 60 ); // e.g. "9" "-8" etc
  const timeMin   = absOffset - timeHour * 60; // e.g. "0" "30" etc
  let timeZoneStr = ""; // "+09:00"
  if( offsetMin >= 0 ){
    timeZoneStr   = "+" + ( "0" + timeHour ).slice(-2) + ":" + ( "0" + timeMin ).slice(-2);
  }else{
    timeZoneStr   = "-" + ( "0" + timeHour ).slice(-2) + ":" + ( "0" + timeMin ).slice(-2);
  } // ISO 8601, Zero Padding
  if( engine.findDataDefinitionByNumber( dataIdC ).matchDataType( "DATETIME" ) ){
    postTime   = engine.findDataByNumber( dataIdC ) + ""; // e.g. "1970-01-01 01:23"
    postTime   = postTime.replace( " ", "T" );        // e.g. "1970-01-01T01:23"
    postTime   = postTime + timeZoneStr;            // e.g. "1970-01-01T01:23+09:00"
  }else{
    postTime   = engine.findDataByNumber( dataIdC ) + ""; // e.g. "1970-01-01"
    postTime   = postTime + "T08:55";               // e.g. "1970-01-01T08:55"
    postTime   = postTime + timeZoneStr;            // e.g. "1970-01-01T08:55+09:00"
  }
}
let postTitle  = "";
if( dataIdD  !== "" ){
    postTitle  = engine.findDataByNumber( dataIdD ) + "";
}
let postSlug   = "";
if( dataIdE  !== "" ){
    postSlug   = engine.findDataByNumber( dataIdE ) + "";
}
let postExcerpt = "";
if( dataIdF   !== "" ){
    postExcerpt = engine.findDataByNumber( dataIdF ) + "";
}
let postContent = "";
if( dataIdG   !== "" ){
    postContent = engine.findDataByNumber( dataIdG ) + "";
}
if(postTitle === "" && postSlug === "" && postContent === "" ){
  throw new Error( '\n Title, Slug or Content is either required. \n' );
}


//// == Calculating / 演算 ==
/// obtain OAuth2 Access Token
const token   = httpClient.getOAuth2Token( oauth2 );

/// prepare API Request
let apiRequest = httpClient.begin(); // HttpRequestWrapper
// - com.questetra.bpms.core.event.scripttask.HttpClientWrapper
apiRequest     = apiRequest.bearer( token );
apiRequest     = apiRequest.formParam( "status", "draft" );
if( postTime !== ""){
  apiRequest   = apiRequest.formParam( "date", postTime );
}
if( postTitle !== ""){
  apiRequest   = apiRequest.formParam( "title", postTitle );
}
if( postSlug !== ""){
  apiRequest   = apiRequest.formParam( "slug", postSlug );
}
if( postExcerpt !== ""){
  apiRequest   = apiRequest.formParam( "excerpt", postExcerpt );
}
if( postContent !== ""){
  apiRequest   = apiRequest.formParam( "content", postContent );
}

/// access API (with post(), get(), put(), etc.)
const apiUri = "https://public-api.wordpress.com/rest/v1.2/sites/"
               + wpDomain + "/posts/new";
const response = apiRequest.post( apiUri );
// - HttpResponseWrapper
const httpStatus  = response.getStatusCode() + "";
engine.log( "STATUS: " + httpStatus );
const responseStr = response.getResponseAsString() + "";
engine.log( "RESPONSE: \n" + responseStr );

/// parse Response-JSON
const responseObj = JSON.parse( responseStr );


//// == Data Updating / ワークフローデータへの代入 ==
if( dataIdH   !== "" ){
  if( engine.findDataDefinitionByNumber( dataIdH ).matchDataType( "DECIMAL" ) ){
    engine.setDataByNumber( dataIdH, new java.math.BigDecimal(responseObj.ID) );
  }else{
    engine.setDataByNumber( dataIdH, responseObj.ID );
  }
}
if( dataIdI   !== "" ){
  engine.setDataByNumber( dataIdI, responseObj.URL );
}

} //////// END "main()" ////////

Download

WordPress-Com-Posts-New.xml

Capture

WordPress原稿が自動アップロードされるワークフロー図
WordPress原稿の自動アップロード

Notes

  1. Gutenberg コード原稿が推奨です。
<!-- wp:heading -->
<h2>Section Title</h2>
<!-- /wp:heading -->

See also

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください