

WordPress.com: Upload Media
This item uploads media files to WordPress.com.
Basic Configs
- Step Name
- Note
Configs for this Auto Step
- conf_Auth
- C1: OAuth2 Setting *
- conf_Domain
- C2: Domain of the WordPress.com site *
- conf_Files
- C3: Data item whose attached files will be uploaded *
- conf_Ids
- C4: Data item to save Media IDs
- conf_Urls
- C5: Data item to save Media URLs
Notes
- This Auto Step is for WordPress.com (a service that hosts WordPress sites, provided by Automattic itself)
- OAuth2 settings should be created per user per site
- When the same user handles multiple WordPress.com sites, create an OAuth2 setting for each site
Capture

See Also
Script (click to open)
- An XML file that contains the code below is available to download
- wordpress-media-upload.xml (C) Questetra, Inc. (MIT License)
- If you are using Professional, you can modify the contents of this file and use it as your own add-on auto step
// OAuth2 config sample at [OAuth 2.0 Setting]
// - Authorization Endpoint URL: https://public-api.wordpress.com/oauth2/authorize
// - Token Endpoint URL: https://public-api.wordpress.com/oauth2/token
// - Scope: media
// - Client ID: (Get by https://developer.wordpress.com/apps/)
// - Client Secret: (Get by https://developer.wordpress.com/apps/)
const API_VERSION = 'v1.1';
const main = () => {
////// == 工程コンフィグ・ワークフローデータの参照 / Config & Data Retrieving ==
const auth = configs.getObject('conf_Auth');
const domain = configs.get('conf_Domain');
const files = engine.findData(configs.getObject('conf_Files'));
const idDef = configs.getObject('conf_Ids');
const urlDef = configs.getObject('conf_Urls');
////// == 演算 / Calculating ==
if (files === null) {
saveData(idDef, []);
saveData(urlDef, []);
return;
}
checkFiles(files, idDef, urlDef);
const {ids, urls} = uploadMedia(auth, domain, files);
////// == ワークフローデータへの代入 / Data Updating ==
saveData(idDef, ids);
saveData(urlDef, urls);
};
/**
* アップロードしようとするファイルの数が適切かどうかチェックする
* @param {Array<QfileView>} files アップロードしようとするファイルの配列
* @param {ProcessDataDefinitionView} idDataDef ID を保存するデータ項目の ProcessDataDefinitionView
* @param {ProcessDataDefinitionView} urlDataDef URL を保存するデータ項目の ProcessDataDefinitionView
*/
function checkFiles(files, idDataDef, urlDataDef) {
const fileNum = files.size();
checkFileNum(idDataDef, 'Media IDs', fileNum);
checkFileNum(urlDataDef, 'Media URLs', fileNum);
}
/**
* アップロードするファイルが複数で パス・URL 出力先のデータ項目が単一行ならエラーにする
* @param {ProcessDataDefinitionView} dataDef データ項目の ProcessDataDefinitionView
* @param {String} label エラー出力用ラベル
* @param {Number} fileNum アップロードしようとするファイルの個数
*/
function checkFileNum(dataDef, label, fileNum) {
if (dataDef !== null && dataDef.matchDataType('STRING_TEXTFIELD') && fileNum > 1) {
throw new Error(`Multiple files are set while the data item to save ${label} is Single-line.`);
}
}
/**
* メディアをアップロードする
* @param {AuthSettingWrapper} auth
* @param {String} domain
* @param {Array<QfileView>} files
* @return {Object} result
* @return {Array<String>} result.ids アップロードしたメディアの ID の配列
* @return {Array<String>} result.urls アップロードしたメディアの URL の配列
*/
const uploadMedia = (auth, domain, files) => {
const url = `https://public-api.wordpress.com/rest/${API_VERSION}/sites/${encodeURIComponent(domain)}/media/new`;
let request = httpClient.begin().authSetting(auth)
.queryParam('fields', 'ID,URL');
files.forEach(file => {
request = request.multipart('media[]', file);
});
const response = request.post(url);
const status = response.getStatusCode();
const responseStr = response.getResponseAsString();
if (status !== 200) {
engine.log(responseStr);
throw new Error(`Failed to upload media. status: ${status}`);
}
const {errors, media} = JSON.parse(responseStr);
if (errors !== undefined) {
engine.log(JSON.stringify(errors));
throw new Error('Some files failed to be uploaded.');
}
return {
ids: media.map(media => media.ID),
urls: media.map(media => media.URL)
};
};
/**
* データ項目への保存
* @param {ProcessDataDefinitionView} dataDef
* @param {Array<String>} dataList
*/
const saveData = (dataDef, dataList) => {
if (dataDef === null) {
return;
}
engine.setData(dataDef, dataList.join('\n'));
};



