

WordPress.com: メディアアップロード
この工程は、WordPress.com 上にメディアファイルをアップロードします。
Basic Configs
- 工程名
- メモ
Configs for this Auto Step
- conf_Auth
- C1: OAuth2 設定 *
- conf_Domain
- C2: WordPress.com サイトのドメイン *
- conf_Files
- C3: アップロードするファイルが保存されているデータ項目 *
- conf_Ids
- C4: メディア ID を保存するデータ項目
- conf_Urls
- C5: メディア URL を保存するデータ項目
Notes
- WordPress.com(Automattic 社の提供する、WordPress サイトをホストするサービス)で使用できる自動工程です
- OAuth2 設定は、1 ユーザ 1 サイトにつき、1 つ作成してください
- 同じユーザが複数の WordPress.com サイトを扱う場合、それぞれのサイトについて OAuth2 設定を作成してください
Capture

See Also
Script (click to open)
- 次のスクリプトが記述されている XML ファイルをダウンロードできます
- wordpress-media-upload.xml (C) Questetra, Inc. (MIT License)
- Professional のワークフロー基盤では、ファイル内容を改変しオリジナルのアドオン自動工程として活用できます
// 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'));
};




