「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
PHP/VBA用Data APIライブラリでのアイテムのアップロード
Movable TypeのPHP用およびVBA用Data APIライブラリで、アイテム(画像等)をアップロードする方法を解説します。
1.uploadAssetエンドポイント
アイテムをアップロードするには、「uploadAsset」というエンドポイントを使います。
パラメータとして、以下の情報を渡します。
| 名前 | 内容 |
|---|---|
| site_id | アップロード先のウェブサイト/ブログのID |
| file | アップロードするファイルのパス |
| path | アップロード先のディレクトリ |
| autoRenameIfExists | 1を指定した場合、サーバーにすでに同名のファイルがあるときには、ファイル名をランダムに変えてアップロードする |
| normalizeOrientation | 1を指定した場合、アップロードしたファイルのExifデータから、向きを適切に回転する |
なお、アイテムの各種の情報(概要など)を設定するには、アップロードを行った後で、「updateAsset」のエンドポイントを実行します。
2.PHPでの例
PHPライブラリを使って、以下のようにアイテムをアップロードしたいとします。
| 項目 | 内容 |
|---|---|
| mt-data-api.cgiのアドレス | http://www.foo.com/mt/mt-data-api.cgi |
| クライアントID | sample |
| ユーザー名 | foo |
| パスワード | bar |
| アップロードするファイル | /home/foo/hoge.jpg |
| アップロード先ディレクトリ | images |
| アップロード先のウェブサイトのID | 1 |
この場合、以下のようなプログラムを実行します。
require_once('mt-data-api.php');
// 初期化
$api = new MTDataAPI('http://www.foo.com/mt/mt-data-api.cgi', 'sample');
// 認証
$response = $api->authenticate(array('username' => 'foo', 'password' => 'bar'));
if (isset($response['error'])) {
認証失敗時の処理
}
// アイテムのアップロード
$params = array(
'file' => '/home/foo/hoge.jpg',
'path' => 'images',
'site_id' => 1,
);
$response = $api->uploadAsset($params);
if (isset($response['error'])) {
アップロード失敗時の処理
}
3.VBAでの例
上記のPHPの例をVBAで書き換えると、以下のようになります。
ただし、アップロードするファイルは、Cドライブの「\home\foo\hoge.jpg」だとします。
Sub UploadAsset()
Dim api As MTDataAPI, i As Integer
Dim response As Scripting.Dictionary, params As Scripting.Dictionary
' 初期化
Set api = New MTDataAPI
api.init "http://www.foo.com/mt/mt-data-api.cgi", "sample"
' 認証
Set params = New Scripting.Dictionary
params("username") = "foo"
params("password") = "bar"
Set response = api.send("authenticate", params)
If response.Exists("Error") Then
認証失敗時の処理
End If
' アイテムのアップロード
Set params = New Scripting.Dictionary
params("file") = "C:¥home¥foo¥hoge.jpg"
params("path") = "images"
params("site_id") = 1
Set response = api.send("uploadAsset", params)
If response.Exists("Error") Then
アップロード失敗時の処理
End If
End Sub
