1
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 3 years have passed since last update.

Project 25Advent Calendar 2019

Day 21

GoでpexelsのAPIライブラリを作った

Posted at

画像横断検索できるライブラリ作ろうと思ったけど、1日で作るの無理っぽかったのであきらめて、とりあえず1サービスだけAPIライブラリ作ったので公開します。

懺悔

Advent Calendarにあげ忘れておりました。
期間中プログラム大量生産してたので、記事書いてないことに気がついてませんでした

What is pexels?

Pexelsは画像素材のシェアサービスです。
Getty ImageやUnsplashなんかみたいな感じのやつです。

Pexels選んだのはAPIがシンプルだったのと、他のサービスは試してはいないもののとりあえずGoのライブラリがありそうだったため。
あとそれなりの知名度。

使い方

Pexels公式のAPIはこちらです。
とてもシンプル(シンプルすぎて逆に分かりづらい)
https://www.pexels.com/ja-jp/api/documentation/

ライブラリはシンプルにAPIドキュメント丸写ししたような作りにしました。

// create new instance
s, _ := pixels.New(http.DefaultClient, "your pixels api key")

// Get a photo
result, err := s.GetPhoto(406014)

// Search photos
result, err := s.SearchPhotos(pixels.PhotoOptions{
		Query: "dog",
	})

// Get curated photos
result, err := s.CuratedPhotos(pixels.PhotoOptions{
		PerPage: 15,
		Page:    1,
	})

// Get a video
result, err := s.GetVideo(2035391)

// Search videos
result, err := s.SearchVideos(pixels.VideoOptions{
		Query: "cat",
	})

// Get popular videos
result, err := s.PopularVideos(pixels.VideoOptions{
		PerPage: 15,
		Page:    1,
	})

ポイント

特に苦労したポイントも少なかったので、やってみてよかったポイントだけ取り上げてみます。

クエリパラメータをStructで定義する

GoogleがStructからQuery stringを生成するパッケージを作っています。
https://github.com/google/go-querystring

今回作ったライブラリの該当箇所を例にするとこんな感じになります。

// PhotoOptions is define that search photos API's query options
type PhotoOptions struct {
	Query   string `url:"query"`
	PerPage int    `url:"per_page"`
	Page    int    `url:"page"`
}

// ToQuery builds query string from PhotoOptions
func (po PhotoOptions) ToQuery() (q string, err error) {
	if po.PerPage == 0 {
		po.PerPage = minPerPage
	}
	if po.Page < 1 {
		po.Page = 1
	}
	v, err := query.Values(po)
	if err != nil {
		return
	}
	return v.Encode(), nil
}

種類が少ないときはこういう方法もありだと思いました。
APIが大量にある場合は定義が増えぎて死んでしまいそうです、

あとがき

作り終わるまで、PexelsじゃなくてPixelsだと思ってました。
恥ずかしい...
ライブラリもgo-pixelsにしてしまったので、どっかのタイミングで直します

1
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
1
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?