「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
Data APIを使ってみる(その3)
Data APIでは、記事の投稿など、Movable Typeにデータを追加したりすることもできます。
ただ、公式ドキュメントではこのあたりの解説が薄いです。
正しい方法ではないかもしれませんが、こちらで動作した方法を紹介します。
1.Movable Typeへのログイン
データの追加など、データの変更を伴う処理を行うには、まずMovable Typeにログインする必要があります。
Webブラウザでログインする方法と、Webブラウザを使わずにログインする方法の2つがあります。
ここでは、Webブラウザを使わない方法を紹介します。
この場合のエンドポイントは、「http://your_host/path_to_mt/mt-data-api.cgi/v1/authentication」です(「your_host」と「path_to_mt」は、ご自分の環境に合わせて書き換えます)。
POSTプロトコルで通信し、リクエストボディに以下のデータを渡します。
| 名前 | 値 |
|---|---|
| username | ログインするユーザー名 |
| password | ログインするユーザーのパスワード |
| clientId | 任意の文字列 |
ログインに成功すると、レスポンスとしてJSONのデータが返されます。
そのJSONに「accessToken」というプロパティがあり、そこからアクセストークンを得ることができます。
2.データの操作
ログインした後は、各種のエンドポイントにアクセスすることで、Movable Typeのデータを操作することができます。
その際に、以下のようなリクエストヘッダーを付加する必要があります。
X-MT-Authorization: MTAuth accessToken=アクセストークンの値
3.事例
簡単な事例として、Movable Typeにログインして、IDが1番のブログに記事を投稿するプログラムを作ってみました。
言語は何でも良いですが、今回はPHPにしてみました。
2行目の「your_host」と「path_to_mt」は、Movable Type 6のインストール先に応じて書き換えます。
また、3行目の「foo」と4行目の「bar」は、ログインする際のユーザー名/パスワードに応じて書き換えます。
なお、このプログラムを実行するには、PHPのallow_url_fopenがオンになっている必要があります。
<?php
$cgi_url = 'http://your_host/path_to_mt/mt-data-api.cgi';
$username = 'foo';
$password = 'bar';
// authentication
$url = $cgi_url . '/v1/authentication';
$postdata = array(
'username' => $username,
'password' => $password,
'clientId' => 'test',
);
$options = array('http' =>
array(
'method' => 'POST',
'content' => http_build_query($postdata),
)
);
@$contents = file_get_contents($url, false, stream_context_create($options));
if (!$contents) {
// login error
echo "Login error.\n";
var_dump($http_response_header);
exit();
}
else {
echo "Login OK.\n";
}
// get access token
$json = json_decode($contents);
$token = $json->accessToken;
// create entry
$url = $cgi_url . '/v1/sites/1/entries';
$postdata = array(
'entry' => json_encode(array(
'title' => 'test',
'body' => 'test entry',
'status' => 'Draft',
)),
);
$options = array('http' =>
array(
'method' => 'POST',
'header' => "X-MT-Authorization: MTAuth accessToken=" . $token . "\r\n",
'content' => http_build_query($postdata),
)
);
@$contents = file_get_contents($url, false, stream_context_create($options));
if (!$contents) {
// create error
echo "Create error.\n";
var_dump($http_response_header);
}
else {
echo "Created entry.\n";
}
?>
プログラムの大まかな内容は以下の通りです。
7~19行目
Movable Typeにログインします。
ユーザー名/パスワード/clientIdの情報をPOSTプトロコルで送信し、その結果を変数$contentsに得ます。
20~28行目
ログインに成功したかどうかを確認します。
失敗の場合は、HTTPのレスポンスヘッダーを出力して終了します。
31~32行目
ログイン成功時のレスポンスから、アクセストークンを取り出し、変数$tokenに代入します。
35~50行目
記事を投稿します。
タイトルが「test」、本文が「test entry」で、ステータスを下書きにしています(38~40行目)。
また、Movable Typeと通信する際には、「X-MT-Authorization: MTAuth accessToken=アクセストークンの値」のリクエストヘッダも付加しています。
51~58行目
記事の投稿に成功したかどうかを確認します。
失敗の場合は、レスポンスヘッダーを出力します。
