« SHOWROOM 星集め・星投げツール スケジュールの詳細化 BreakDownSchedule() (三周のやり方を例に) | トップページ | SHOWROOMのAPI - 「ライブ情報」の取得..JSONのもう一つの扱い方 »

2019年10月26日 (土)

SHOWROOMのAPI - 「ライブ情報」の取得(GO言語のソースつき)

先日「SHOWROOM - イベントでの配信者の獲得ポイント数を取得する(改良版)」という記事を書き、使っているAPIのURLは某巨大掲示板にころがってたやつです、って書いたのですが、SHOWROOMのAPIをきちんとまとめられている方がいらっしゃいました。

  「たける - SHOWROOMのAPIについて(現在26個公開。引き続き調査中)

---------

SHOWROOM 新・自動三周ツール -- GO言語によるブラウザ制御 (1) main()」に書いたように今"自動三周ツール"の改良版を作成しています。その中で応援しているルーム(星投げ・種投げの対象ルーム)が配信中か否かのチェックを視聴者数が0でないかということでやっていたのですが、ちょっとタイムラグがあるようです。

どうしようか考えていたのですが、上の記事を見ると、ちゃんと配信状況を知るAPIがあるみたいです。これを使わない手はないと思いAPIの機能チェックのプログラムを書いてみました(ソースは記事の最後にあります)

Live_statusが具体的にどういう値になるのかわからなかったのですが、テストプログラムを実行してみると、配信中でないとき 1、配信中のとき 2、となるようです。

Result

最初の実行結果は配信中のもので、Live_statusは2となっています。次の実行結果は配信終了後のものでLive_statusは1になっています。

これ以外の値をとるのかとらないのか?は今後の課題です。

なお、JSONのデコードは

  「qiita @msh5 - Go言語でJSONに泣かないためのコーディングパターン

の記事を参考にさせていただきました。

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

main()
  SHOWROOM 新・自動三周ツール -- GO言語によるブラウザ制御 (1) main()

  SetEnvironment() 環境やポリシーに依存するパラメータを設定します。

  SetBlackList() 星集め/種集めの対象としないルームのリストを作ります。

  GetCategoryList() 公式枠/アマチュア枠に該当するジャンル(の位置)をオンライブ画面から検出します。

  BreakDownSchedule() 配信スケジュールから星集め/種集め、星投げ/種投げ、カウントの
   SHOWROOM 星集め・星投げツール スケジュールの詳細化 BreakDownSchedule() (三周のやり方を例に)

  Scheduler() タスクリストにしたがって星集め/種集め、星投げ/種投げ、カウントを行います。

    MakeTaskList() タスクリストから現在時(時分)に実行すべきタスクの集まり(タスクグループ)を抜き出します。

    GetRoomList() 星集め/種集めの対象とするルームのリストを作ります。

    CollectStarts() 星集め/種集めを行います。

    ThrowStars() 星投げ/種投げを行います。

    Count50() カウントを行います。

共通して使用する主な関数

  MakeNewPage() ブラウザ画面を開きます。
  ClosePage() ブラウザ画面を閉じます。


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

/*
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_info(id string) (live_status int, is_enquete bool, 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 interface{}
	decoder := json.NewDecoder(resp.Body)
	if err := decoder.Decode(&result); err != nil {
		panic(err)
	}
 
	//	SHOWROOMをやめた、などの対応
	if result.(map[string]interface{})["live_status"] == nil {
		status = 2
		return
	}
 
	lstatus, _ := result.(map[string]interface{})["live_status"].(float64)
	live_status = int(lstatus)
	is_enquete, _ = result.(map[string]interface{})["is_enquete"].(bool)
 
	return
}
 
func main() {
 
	//	パラメータの数をチェックします。
	if len(os.Args) != 2 {
		fmt.Println("usage:", os.Args[0], "room_id")
		return
	}
 
	live_status, is_enquete, status := Live_Live_info(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)
	}
 
}
 

« SHOWROOM 星集め・星投げツール スケジュールの詳細化 BreakDownSchedule() (三周のやり方を例に) | トップページ | SHOWROOMのAPI - 「ライブ情報」の取得..JSONのもう一つの扱い方 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

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

« SHOWROOM 星集め・星投げツール スケジュールの詳細化 BreakDownSchedule() (三周のやり方を例に) | トップページ | SHOWROOMのAPI - 「ライブ情報」の取得..JSONのもう一つの扱い方 »

フォト

サイト内検索

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

新着記事

リンク元別アクセス数

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

人気記事ランキング

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