-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patht001srapi.go
138 lines (120 loc) · 4.59 KB
/
t001srapi.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*!
Copyright © 2022 [email protected]
Released under the MIT license
https://opensource.org/licenses/mit-license.php
Ver. 0.0.0
*/
package main
import (
"log"
"os"
"sort"
"time"
"github.com/Chouette2100/exsrapi"
"github.com/Chouette2100/srapi"
)
type Config struct {
SR_acct string // SHOWROOMのアカウント名
SR_pswd string // SHOWROOMのパスワード
Category string
Genre []string
}
/*
配信中ルームの一覧を取得する
$ cd ~/go/src/t001srapi
$ vi t001srapi.go
$ go mod init <== 注意:パッケージ部分のソースをダウンロードした場合はimport部分はそのままにしておいて
$ go mod tidy <== go.modに“replace github.com/Chouette2100/srapi ../srapi”みたいなのを追加します。
$ go build t001srapi.go
$ cat config.yml
sr_acct: ${SRACCT} <== ログインアカウントを環境変数 SRACCT で与えます。ここに直接アカウントを書くこともできます。
sr_pswd: ${SRPSWD} <== ログインパスワードを環境変数 SRPSWD で与えます。ここに直接パスワードを書くこともできます。
category: Free <== "Free"|"Official"|"All"
genre:
- アイドル <== "人気"|"フリー"|"アイドル"|"タレント・モデル"|...
- タレント・モデル
$ export SRACCT=xxxxxxxx <== SHOWROOMのアカウント名 Cシェルの場合は setenv SRACCT xxxxxxxxx
$ export SRACCT=xxxxxxxx <== SHOWROOMのアカウント名 Cシェルの場合は setenv SRPSWD xxxxxxxxx
$ ./t000srapi config.yml
v0.0.0
v0.1.0 sort.Sort()をsort.Slice()に変更する。
*/
func main() {
// ログファイルを設定する。
logfile := exsrapi.CreateLogfile("", "")
defer logfile.Close()
if len(os.Args) != 2 {
// 引数が足りない(設定ファイル名がない)
log.Printf("usage: %s NameOfConfigFile\n", os.Args[0])
return
}
// 設定ファイルを読み込む
var config Config
err := exsrapi.LoadConfig(os.Args[1], &config)
if err != nil {
log.Printf("exsrapi.LoadConfig: %s\n", err.Error())
return
}
// cookiejarがセットされたHTTPクライアントを作る
client, jar, err := exsrapi.CreateNewClient(config.SR_acct)
if err != nil {
log.Printf("CreateNewClient: %s\n", err.Error())
return
}
// すべての処理が終了したらcookiejarを保存する。
defer jar.Save()
// 配信しているルームの一覧を取得する
roomlives, err := srapi.ApiLiveOnlives(client)
if err != nil {
log.Printf("ApiLiveOnlives(): %s\n", err.Error())
return
}
log.Printf("*****************************************************************\n")
log.Printf("配信中ルーム数\n")
log.Printf("\n")
log.Printf(" ジャンル数= %d\n", len(roomlives.Onlives))
log.Printf("\n")
log.Printf(" ルーム数 ジャンル ジャンル名\n")
for _, roomlive := range roomlives.Onlives {
log.Printf("%10d%10d %s\n", len(roomlive.Lives) , roomlive.Genre_id, roomlive.Genre_name)
}
// 指定したカテゴリー(Free|Official|All)のルームの一覧を取得する
roomlive, err := roomlives.ExtrByCtg(config.Category)
if err != nil {
log.Printf("ExtrRoomLiveByCtg: %s\n", err.Error())
return
}
log.Printf("\n")
log.Printf("カテゴリ[%s]のルーム数 = %d\n", config.Category, len(*roomlive))
log.Printf("\n")
log.Printf("*****************************************************************\n")
log.Printf("ジャンル別配信中ルーム数\n")
// 指定したジャンル(アイドル|タレント・モデル|...)のルームの一覧を取得する
gnrmap := map[string]bool {}
for _, gnre := range config.Genre {
gnrmap[gnre] = true
}
log.Printf(" 指定ジャンル = %+v\n", config.Genre)
// log.Printf("Gnrmap= %+v\n", gnrmap)
roomlive, err = roomlives.ExtrByGnr(gnrmap)
if err != nil {
log.Printf("ExtrRoomLiveByGnr: %s\n", err.Error())
return
}
log.Printf("\n")
log.Printf(" 指定したジャンルのルーム数 = %d\n", len(*roomlive))
log.Printf("\n")
log.Printf(" *** 指定したジャンルのルーム一覧\n")
for _, room := range *roomlive {
log.Printf(" started at %s %s\n", time.Unix(room.Started_at, 0).Format("02 15:04:05"), room.Main_name)
}
// ルームを配信開始時刻の降順にソートする
sort.Slice(*roomlive, func(i, j int) bool {
return (*roomlive)[i].Started_at > (*roomlive)[j].Started_at
})
log.Printf("\n")
log.Printf(" *** 指定したジャンルのルーム一覧(ソート後)\n")
for _, room := range *roomlive {
log.Printf(" started at %s %s\n", time.Unix(room.Started_at, 0).Format("02 15:04:05"), room.Main_name)
}
}