WordPress.com: メディアアップロード

WordPress.com: メディアアップロード

WordPress.com: Upload Media

この工程は、WordPress.com 上にメディアファイルをアップロードします。

Basic Configs
工程名
メモ
Auto Step icon
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'));
};

    

Questetra Supportをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む