ゆーじぇいブログ

ゆーじぇいブログ

プログラミングとか色々

[Golang]ニコニコ動画のAPIを使ってみた!

f:id:jyouj:20181216184046p:plain

ニコニコ動画APIGolangで使ってDiscord Botを作ってみました!今回はニコニコ動画APIを紹介しようと思います。

ソースコードはこちら

github.com

APIにアクセス

ニコニコ動画のスナップショットAPIを使います。動画を検索したりできます。

https://api.search.nicovideo.jp/api/v2/snapshot/video/contents/search?q=[[検索したいワード]]&targets=title&fields=contentId,title,viewCounter&filters[viewCounter][gte]=1000&_sort=-viewCounter&_offset=0&_limit=3&_context=apiguide

このURLにアクセスします。パラメータは自由に無くしてくれても構いません。qtargets_sortは必須です。データを三つ、再生数の多い順に取得します。

Goで実装

それではGoでアクセスするコードを書いていきましょう。

Jsonから構造体を書いていきます。

type Niconico struct {
    Meta struct {
        Status     int    `json:"status"`
        TotalCount int    `json:"totalCount"`
        ID         string `json:"id"`
    } `json:"meta"`
    Data []struct {
        ContentID   string `json:"contentId"`
        Title       string `json:"title"`
        ViewCounter int    `json:"viewCounter"`
    } `json:"data"`
}

そして、次にmain()を書いていきます。

package main

import (
  "fmt"
  "encoding/json"
  "net/http"
  "io/ioutil"
)

func main() {
 url := "https://api.search.nicovideo.jp/api/v2/snapshot/video/contents/search?q={{ 検索キーワード}}&targets=title&fields=contentId,title,viewCounter&filters[viewCounter][gte]=1000&_sort=-viewCounter&_offset=0&_limit=3&_context=apiguide"
  fmt.Println(url)
  resp, _ := http.Get(url)
  defer resp.Body.Close()
  byteArray, _ := ioutil.ReadAll(resp.Body)

  fmt.Println(string(byteArray))

  jsonBytes := ([]byte)(byteArray)
  data := new(Niconico)

  if err := json.Unmarshal(jsonBytes, data); err != nil {
    fmt.Println("JSON Unmarshal error:", err)
    return
  }

  if len(data.Data) == 0 {
    No content
  } else {
    fmt.println("https://nico.ms/" + data.Data[0].ContentID)
  }

これで検索ワードの最も再生数の多い動画のURLを表示できるはずです。

easy!

何かあれば、じぇい👨‍💻 (@jyouj__) | Twitterに!

投げ銭も待ってまーす!-> jyouj__さんの投げ銭ビスケット募集中!