Posted at

WordPressAPIをGoで操作したくてたまらない

More than 1 year has passed since last update.

最近のキーワードが、公私混同した場合、WordPress Goなので、このようなお話を。

まだ色々と途中なので、記事の尻切れ感も半端ないです。


WordPressで行うこと

https://wordpress.org/plugins/rest-api/

コレを導入するのみです。

http://v2.wp-api.org/reference/

ドキュメントは、読んで理解しておく。


Goで行うこと

APIのドキュメントが割りと揃っていたのでそのまま利用しても良かったのですが、go-wordpressというパッケージがあったので、利用してみました。

こういうのを色々と読むのは、修行中の身としては大変ありがたい経験です。

必要に迫られてやるので、ただボーッと眺めているよりは身になるようです。

お試しのインポートはこんな感じ。


sample.go

package main

import (
"fmt"
"net/http"
"os"

wordpress "github.com/sogko/go-wordpress"
)


環境変数でいくつか持っている値を定義しておきます。


sample.go

type WpEnv struct {

WordPressBaseURL string
WordPressUser string
WordPressPassword string
}

var (
GetWpEnv = func() *WpEnv {
return &WpEnv{
WordPressBaseURL: os.Getenv("WORDPRESS_API_BASE_URL"),,
WordPressUser: os.Getenv("WORDPRESS_USER"),
WordPressPassword: os.Getenv("WORDPRESS_PASSWORD"),
}
}
)


Clientの取得。


sample.go

func getClient() *wordpress.Client {

client := wordpress.NewClient(&wordpress.Options{
BaseAPIURL: GetWpEnv().WordPressBaseURL,
Username: GetWpEnv().WordPressUser,
Password: GetWpEnv().WordPressPassword,
})

return client
}


Taxonomyを取得してみる。


sample.go

func main() {

wpc := getClient()
terms, resp, body, err := wpc.Taxonomies().List(nil)
if err != nil {
fmt.Println("Error:", err)
return
}
if body == nil {
fmt.Println("body nil")
return
}
if resp.StatusCode != http.StatusOK {
fmt.Println(resp.Status)
return
}
if terms == nil {
fmt.Println("terms nil")
return
}

fmt.Println(body)
fmt.Println(resp)
fmt.Println(terms)
}


ということで接続もできてどうとでもなることが分かった!ので、記事を取得して色々できるようです。