拙著「個人投資家は低位株で儲けなさい」が発売されました。
株価が安い「低位株」に投資する方法を解説しています。
自由国民社刊で、定価1,512円(消費税込み)です。
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行目
記事の投稿に成功したかどうかを確認します。
失敗の場合は、レスポンスヘッダーを出力します。