« SHOWROOMのAPI - 「ライブ情報」の取得(GO言語のソースつき) | トップページ | SHOWROOM - イベントでの配信者の獲得ポイント数を取得する - スマホ版(android版) »

2019年10月28日 (月)

SHOWROOMのAPI - 「ライブ情報」の取得..JSONのもう一つの扱い方

前記事 SHOWROOMのAPI - 「ライブ情報」の取得(GO言語のソースつき)にSHOWROOMのAPIから返されるJSONからデータを取得する方法があります。これは複雑な(大きな)JSONからひとつ、ぶたつのデータを取り出すやり方としてはいいのですが、JSONから取り出すデータが多いとき(特にほとんどのデータがほしいとき)には面倒になるので、JSONに対応する構造体を作ってそこに代入させる方が手間がかかりません。

前記事とほとんど同じ機能をもつサンプルプログラムを作成しましたので紹介しておきます。この程度だったらどっちでも同じようなものですが....
(参考にしたサイトなども前記事にあります)

---------------------

恥ずかしくて書きたくないのですが、このプログラムはちょっとはまりました。「パッケージ外から参照できるのは最初の文字が大文字の変数だけ」というのを忘れてました。忘れてたというか、どういう場合このルールが適用されるのかよく理解できていませんでした w
(逆に言うと大文字だと外部から参照できるわけで、変数名の付け方はちゃんと考えるようにします。いまさらですが...)

=======================================

/*
Room_IDで指定したルームの配信状況を確認するためのAPI  live_info のテストプログラムです。
 
	Live_Live_info Room_ID
 
		Room_ID		配信ルームのID、アカウントっぽい方じゃなくて(ふつう)数字6桁くらいのやつです。
 
	参考
		SHOWROOMのAPI - 「ライブ情報」の取得(GO言語のソースつき)
		http://seppina.cocolog-nifty.com/blog/2019/10/post-7df814.html
 
*/
 
package main
 
import (
	"fmt"
	"os"
 
	"encoding/json"
	"net/http"
)
 
func Live_Live_info2(id string) (live_status int, is_enquete bool, bg_image string, status int) {
 
	status = 0
 
	//	配信者ルームの配信状況を確認するためのURL(このURLについては記事参照)
	URL := "https://www.showroom-live.com/api/live/live_info?room_id=" + id
 
	resp, err := http.Get(URL)
	if err != nil {
		//	一時的にデータが取得できない。
		resp.Body.Close()
		status = 1
		return
		//		panic(err)
	}
	defer resp.Body.Close()
 
	//	JSONをデコードする。
	var result struct {
		Age_verification_status int
		Video_type              int
		Enquete_gift_num        int
		Is_enquete              bool
		Bcsvr_port              int
		Live_type               int
		Is_free_gift_only       bool
		Bcsvr_host              string
		Live_id                 int
		Is_enquete_result       bool
		Live_status             int
		Room_name               string
		Room_id                 int
		Bscvr_key               string
		Background_image_url    string
	}
	if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
		panic(err)
	}
 
	live_status = result.Live_status
	is_enquete = result.Is_enquete
	bg_image = result.Background_image_url
 
	return
}
 
func main() {
 
	//	パラメータの数をチェックします。
	if len(os.Args) != 2 {
		fmt.Println("usage:", os.Args[0], "room_id")
		return
	}
 
	live_status, is_enquete, bg_image, status := Live_Live_info2(os.Args[1])
 
	if status != 0 {
		fmt.Println("Error in intLive_Live_info() status=", status)
	} else {
		fmt.Println("live_status=", live_status, "is_enquete=", is_enquete, "bg_image=<", bg_image, ">")
	}
 
}
 

« SHOWROOMのAPI - 「ライブ情報」の取得(GO言語のソースつき) | トップページ | SHOWROOM - イベントでの配信者の獲得ポイント数を取得する - スマホ版(android版) »

コメント

コメントを書く

(ウェブ上には掲載しません)

« SHOWROOMのAPI - 「ライブ情報」の取得(GO言語のソースつき) | トップページ | SHOWROOM - イベントでの配信者の獲得ポイント数を取得する - スマホ版(android版) »

フォト

サイト内検索

  • 記事を探されるんでしたらこれがいちばん早くて確実です。私も使ってます (^^;; 検索窓が表示されるのにちょっと時間がかかるのはどうにかしてほしいです。

新着記事

リンク元別アクセス数

  • (アクセス元≒リンク元、原則PCのみ・ドメイン別、サイト内等除く)

人気記事ランキング

  • (原則PCのみ、直近2週間)
無料ブログはココログ