増子良太のブログです

増子良太が書いているブログです。テーマをしぼらず、思いついたものをただひたすら書いていきます。

movabletype(mt)からjsonを出力する方法

      2016/01/28

MovableTypeといえば、6から登場したDataAPI。

あれさえあれば、記事データをjsonなんかにして、それをphpで取得しなくてもよいのに。。。

とはいえ、クライアントに入っているバージョンが5以下の場合には、json吐き出すしか方法がないのです。

jsonとして吐き出す時の注意点。

  • “や¥などはちゃんとエスケープすること
  • あまりに大きなjsonの場合には、ファイル分割、もしくは件数を絞り込むこと
  • jsonとしてフォーマットがおかしくても、受け取る側で置換してやれば、結構どうとでもなる

まずはエスケープについて。

これはjson扱う場合の基本です。

{“test”: “これは”もじ”です”}

上記のような場合、json_decodeするとエラーになり、nulllが返ってきます。(phpの場合)

phpの場合はちょっとやっかいで、jsonが形式として正しくない場合、エラーにならず、そっとnullを返してくれます。try~catcheも拾ってくれません。なんでやねん!!

エラーかどうかを判定するには、戻り値がnullかfalseの場合にjson_last_errorを呼び出し、その戻り値でエラー内容を判定します。

めんどいなぁ。。。デバッグしずらい。

次にjsonファイルのサイズについて

何千件もあるような記事を全て1つのjsonファイルに吐き出すというのは、MT側の再構築も時間がかかるし、受け取るサーバ側のプログラムでも表示が遅くなったり、その部分で処理に時間がかかってしまいます。

そういった場合は、jsonファイル自体を分割するかという話になりますが、ファイル数が何件もになると、それはそれでやはりダウンロードし終わるまでに時間がかかったりして、やっぱり件数絞るのが一番良いのかなと思っています。

jsonフォーマットについて

もちろん厳密になっているほうが、受け取る側でも処理が少なくて済むし、実装も楽になると思います。

ただ、予想外の記述とか制御文字なんかについては、jsonをダウンロードした時点で、文字列置換で最初に消しておいてからjson_decodeなりをしたほうがよいです。保険として。

まぁ¥マークがエスケープされていないとかそれくらいは受け取る側でもチェックしたほうが、安心ですね。

 

 - movabletype(mt), Perl