0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WordPress 4.7 REST APIの時刻フォーマットがイケてないのでGolangで苦労した話

Last updated at Posted at 2019-02-26

概要

  • wordpress 4.7にはREST APIで記事の一覧や内容を取得できる機能があります
  • これを利用してgolangで記事の一覧を取得するクライアントを作成したが時刻のパースでエラーが発生します
  • 何故かとおもったらAPIの返す時刻のフォーマットがRFC3339「もどき」でGoがパース不可能になっていました

wordpress4.7のREST APIについて

こちらのページのjsonを引用させてもらうと以下のようになります

[
  {
    "id": 14687,
    "date": "2017-01-12T12:00:30",
    "date_gmt": "2017-01-12T03:00:30",
    "guid": {
      "rendered": "http://loumo.jp/?p=14687"
    },
    "modified": "2017-01-07T19:13:26",
    "modified_gmt": "2017-01-07T10:13:26",

Goでパースできない

上記のようなjsonをパースするときGoでは以下のようにstructを宣言してパースを行いますが

type News struct {
	Date    time.Time `json:"date"`
	DateGmt time.Time `json:"date_gmt"`
}

var newsResponse []*News
decoder := json.NewDecoder(res.Body) // APIから取得してきます
	if err := decoder.Decode(&newsResponse); err != nil {
		fmt.Println(err)
		return nil, err
	}

このときこのようなエラーが出ます

parsing time ""2019-02-26T02:04:34"" as ""2006-01-02T15:04:05Z07:00"": cannot parse """ as "Z07:00"

なぜパースができないのか

  • GoはRFC3339に則ってパースしようとしますが、Wordpressの吐いている時刻のフォーマットが正しいRFC3339ではないことが原因のようです
  • "date": "2017-01-12T12:00:30"
  • 正しくは "2017-01-12T12:00:30Z" または "2017-01-12T12:00:30+0900" などでなければいけません
  • ということでWordpressのREST APIの時刻をGolangで扱うときは気をつけましょう....
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?