GoでfoursquareのCheckins APIを実行してみる。

観光地に行ったときにはSwarm(旧foursquare)を使ってログインを残すようにしている。
今回はfoursquareのアクセストークンを取得し、Goで書いたスクリプトで過去のログイン情報を取得してみたので共有。

foursquareのアクセストークンが必要になるので取得する。
foursquareの開発者向けサイトにてログインを行い、自分のアプリケーションを登録しclient idとclient secretを発行してもらう。

アクセストークンの取得方法は、公式サイトに書いてあるとおり。

Authentication - Foursquare Developer

一度ブラウザから認証ページにアクセスし、画面上で許可する必要がある。
その後、発行されるcodeを使って再度リクエストを行えばアクセストークンが送られてくる。

注意点としては、「自分のアプリケーションの設定項目のredirect urlを設定し、これと同じものを使う必要がある」ということ。
設定しておかないと認証エラーが発生し認証ページが表示されない。

無事アクセストークンが確認できたら、これを使ってAPIにリクエストを行うスクリプトを実装する。
リクエストを行うのに必要な情報は「Get Check-Ins for a User - Foursquare Developer」で説明されている。
このページも書かれているが、現在user idはselfのみになっているので、アクセストークンで認証されたアカウントの情報しか取得できない。
また、foursquare apiの仕様として「vパラメータを使い、どの時点での仕様に従うかを指定する必要がある」ので注意。

package main

import (
    “fmt”
    “io/ioutil”
    “net/http”
    “os”
)

func main() {
    accessToken := os.Getenv(“FOURSQUARE_ACCESS_TOKEN”)
    v := “20190101”
    endpoint := “https://api.foursquare.com/v2/users/self/checkins”

    url := fmt.Sprintf(“%s?oauth_token=%s&v=%s”, endpoint, accessToken, v)
    resp, err := http.Get(url)
    if err != nil {
        panic(err)
    }

    defer resp.Body.Close()

    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(body))
}

取得したアクセストークンは環境変数として設定し、os.Getenv()で読み込んでいる。
今回は標準のhttpを使ってリクエストを行うようにした。

Goの実装でリクエストを投げるのはそれほど難しくはないので、一番の問題はアクセストークンの取得までがめんどくさいことだった。