共通の関数の作成

共通の関数の作成

まず、各処理で共通に使う関数を作ることにします。

今取り上げているWebサービスでは、以下の手順で処理を進めます。

(1)送信されたXMLから、投稿のタイトルなどの情報を読み取ります。
(2)必要な処理を行います。
(3)処理結果を、リスト2のXMLでクライアントに返します。

XMLのデータは、HTTPのリクエスト・ボディを使って送信します。このデータを読み込む処理は、投稿の作成の処理と、編集の処理の際に使います。そこで、この部分は関数化しておくことにします。

また、処理結果を表すXMLは、PHP 5の「SimpleXMLElement」という組み込みクラスで扱うことにします。この初期化の処理も、後の各種の処理で使いますので、関数化しておきます。

上記のそれぞれの処理を、fetch_request_xml/create_response_xmlという関数にまとめると、その内容はリスト3のようになります。リスト3には「subfunc.php」というファイル名を付けることにします。
--------------------------------------------------------------------------------
【リスト3】 subfunc.php(fetch_request_xml/create_response_xml関数)
function fetch_request_xml() {
    // リクエストボディを変数$xmlStrに代入
    $xmlStr = trim(file_get_contents("php://input"));
    // XMLからSimpleXMLElementオブジェクトを作成
    $xml = new SimpleXMLElement($xmlStr);
    return $xml;
}

function create_response_xml() {
    // 空のSimpleXMLElementオブジェクトを作成
    $xmlStr = <<< HERE


HERE;
    $xml = new SimpleXMLElement($xmlStr);
    return $xml;
}
?>
--------------------------------------------------------------------------------

投稿の作成

次に、投稿を作成する処理(post.php)を作ります。このプログラムでは、送信されたXMLから投稿のタイトルと内容を読み取り、それをWordPressのデータベースに保存して、その結果を返す、という処理を行います。

実際のプログラムはリスト4のようになります。WordPressでは、データベースに投稿を保存するAPIが用意されているので、それを利用します(リスト4の15~22行目)。また、投稿の保存に成功したら、その結果をリスト2のようなXMLにして返します(リスト4の24~29行目と40~41行目)。

投稿用のクライアントから投稿した後(図2-1)、WordPressにログインして投稿の一覧を見てみると、投稿が追加されていることが分かります(図2-2)。
--------------------------------------------------------------------------------
【リスト4】 投稿の作成(post.php)
// WordPressのAPIを使えるようにする
define('WP_USE_THEMES', false);
require('../wp-config.php');
// subfunc.phpを組み込む
require('subfunc.php');
// リクエストとともに送信されたXMLを読み込む
$requestXML = fetch_request_xml();
// 結果用のXMLを生成
$responseXML = create_response_xml();
// POSTプロトコルのときだけ処理を行う
$method = $_SERVER['REQUEST_METHOD'];
if ($method == 'POST') {
    // 投稿を新規作成する
    $post = array();
    $post['post_title'] = $requestXML->post_title;
    $post['post_content'] = $requestXML->post_content;
    $post['post_author'] = 1;
    $post['post_status'] = 'publish';
    $post['post_category'] = array(1);
    // 投稿をデータベースに保存する
    $id = wp_insert_post($post);
    // 保存に成功した場合の結果をXML化する
    if ($id) {
        $responseXML->addChild('status', 1);
        $responseXML->addChild('post_id', $id);
        $responseXML->addChild('post_title', $post['post_title']);
        $responseXML->addChild('post_content', $post['post_content']);
    }
    // 保存に失敗したときの結果をXML化する
    else {
        $responseXML->addChild('status', 0);
    }
}
else {
    // POSTプロトコル以外の場合
    $responseXML->addChild('status', 0);
}
// 結果を出力する
header('Content-Type: text/xml; charset=UTF-8');
print $responseXML->asXML();
?>
--------------------------------------------------------------------------------

次ページでは、POSTを使ってWordPressに新規投稿したブログ記事を、他のメソッドを用いて更新/取得/削除する処理を作ります。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30