Open8
GoでSpotifyAPIを叩く
一般的なhttp clientを実装してみた。
client := http.Client{
Timeout: time.Second * 2,
}
url := "https://jsonplaceholder.typicode.com/posts"
req, err := http.NewRequest(
http.MethodGet,
url,
nil,
)
if err != nil {
panic(err)
}
res, err := client.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
panic(fmt.Sprintf("Status code error: %d %s", res.StatusCode, res.Status))
}
fmt.Println(res.Header.Get("Content-Type"))
type Post struct {
userId int `json:"userId"`
id int `json:"id"`
title string `json:"title"`
body string `json:"body"`
}
var posts []Post
resBody, _ := ioutil.ReadAll(res.Body)
fmt.Printf("%T\n", resBody) // []uint8
fmt.Println(string(resBody))
err = json.Unmarshal(resBody, &posts)
if err != nil {
panic(err)
}
fmt.Printf("%T\n", posts) // []main.Post
fmt.Printf("%+v\n", posts)
io.Reader と io.Writer のインタフェースについてあとで調べる
Sportify APIを叩きたい。
上記を参考にする。Sportify側でAppを作成し、Client IDとClient Secretsを入手。
echo -n {Client Id}:{Client_Secret} | base64
curl -X "POST" -H "Authorization: Basic {上の結果}" \
-d grant_type=client_credentials https://accounts.spotify.com/api/token
{
"access_token": "アクセストークン",
"token_type": "Bearer",
"expires_in": 3600
}
上記からアクセストークンが返ってくるので、それを使って、
curl -H "Authorization: Bearer {アクセストークン}" \
GET https://api.spotify.com/v1/artists/1O8CSXsPwEqxcoBE360PPO | jq
上記をGoで実装する。
なんか色々ライブラリがあるのか
これ使うか
Oauth2を実装するためには
が必要らしい。go mod tidy
結論からいうと、モジュール管理していて使わなくなったり必要なくなったパッケージを削除するためのコマンドです。
ユーザー情報を扱うにはOAuthによる認可をやる
package main
import (
"context"
"log"
"os"
"fmt"
spotifyauth "github.com/zmb3/spotify/v2/auth"
"golang.org/x/oauth2/clientcredentials"
"github.com/zmb3/spotify/v2"
)
func main() {
ctx := context.Background()
config := &clientcredentials.Config{
ClientID: os.Getenv("SPOTIFY_CLIENT_ID"),
ClientSecret: os.Getenv("SPOTIFY_CLIENT_SECRET"),
TokenURL: spotifyauth.TokenURL,
}
toke, err := config.Token(ctx)
if err != nil {
log.Fatal(err)
return
}
httpClient := spotifyauth.New().Client(ctx, toke)
client := spotify.New(httpClient)
// Get a playlist
playlist, err := client.GetPlaylist(ctx, "37i9dQZF1DXcBWIGoYBM5M")
if err != nil {
log.Fatal(err)
return
}
fmt.Println(playlist.Name)
}
OAuth2の手順を確認する。(使うのは初めてだけど、ネスペで学んでたからスッと理解できてうれしい)