---
sidebar_position: 20
---
# ドッグAPI
```mdx-code-block
```
:::note
このチュートリアルは[@tatadan](https://twitter.com/tatadan)より提供されたもので、[Wails Examples Repository](https://github.com/tataDan/wails-v2-examples)の一部になります。
:::
このチュートリアルでは、Webから犬の写真を取得して表示するためのアプリケーションを開発していきます。
### プロジェクトの作成
アプリケーションを作成していきましょう。 ターミナルで次のように入力します: `wails init -n dogs-api -t svelte`
注意: IDEサポートが欲しい場合は、コマンドの末尾に、`-ide vscode`オプションまたは`-ide goland`オプションを付与してください。
では、`cd dogs-api`で移動し、プロジェクトファイルの編集を始めましょう。
### 未使用コードの削除
まず、使用しないと分かっているいくつかの要素を削除していきます:
- `app.go`を開き、次の行を削除します:
```go
// Greet returns a greeting for the given name
func (a *App) Greet(name string) string {
return fmt.Sprintf("Hello %s, It's show time!", name)
}
```
- `frontend/src/App.svelte`を開き、すべての行を削除します。
- `frontend/src/assets/images/logo-universal.png`ファイルを削除します。
### アプリケーションの作成
では、新しいGoコードを書いていきましょう。
関数を定義する前に、`app.go`に下記の構造体の宣言を追加します:
```go
type RandomImage struct {
Message string
Status string
}
type AllBreeds struct {
Message map[string]map[string][]string
Status string
}
type ImagesByBreed struct {
Message []string
Status string
}
```
下記の関数を`app.go`に追加します(おそらく既存の関数定義の後ろ側に追加することになります):
```go
func (a *App) GetRandomImageUrl() string {
response, err := http.Get("https://dog.ceo/api/breeds/image/random")
if err != nil {
log.Fatal(err)
}
responseData, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Fatal(err)
}
var data RandomImage
json.Unmarshal(responseData, &data)
return data.Message
}
func (a *App) GetBreedList() []string {
var breeds []string
response, err := http.Get("https://dog.ceo/api/breeds/list/all")
if err != nil {
log.Fatal(err)
}
responseData, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Fatal(err)
}
var data AllBreeds
json.Unmarshal(responseData, &data)
for k := range data.Message {
breeds = append(breeds, k)
}
sort.Strings(breeds)
return breeds
}
func (a *App) GetImageUrlsByBreed(breed string) []string {
url := fmt.Sprintf("%s%s%s%s", "https://dog.ceo/api/", "breed/", breed, "/images")
response, err := http.Get(url)
if err != nil {
log.Fatal(err)
}
responseData, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Fatal(err)
}
var data ImagesByBreed
json.Unmarshal(responseData, &data)
return data.Message
}
```
`app.go`の`import`セクションを次のように変更します:
```go
import (
"context"
"fmt"
"encoding/json"
"io/ioutil"
"log"
"net/http"
"sort"
)
```
`frontend/src/App.svelte`に次の行を追加します:
```html
Dogs API
Click on down arrow to select a breed
{#if showRandomPhoto}
{/if}
{#if showBreedPhotos}
{#each photos as photo}
{/each}
{/if}
```
### アプリケーションのテスト
バインディングを生成してアプリケーションをテストするには、`wails dev`コマンドを実行してください。
### アプリケーションのコンパイル
アプリケーションを本番用の単一バイナリにコンパイルするには、`wails build`コマンドを実行してください。