« フラウンホーファー線にD3線が見当たらない理由 | トップページ | Amazonで買った400000V高電圧発生モジュールの出力電圧 »

2018年6月27日 (水)

Showroom - 自動星集め・星投げ・カウントツール

Showroomの星集め(種集め)、星投げ(種投げ)ツールなんですが、その後あちこち手入れしてまあまあ実用にできる程度にはなりました。
“まあまあ”というのはいろいろ問題があるからです。問題がプログラムを改善すれば修正できるものだけならなんとかするのですが、おそらくそれだけでは解決しそうにないので最近は修正もほとんどしてません。でもぜんぜん使えないということはなくていくつかのルームではちゃんと貢献ランキング(あるいは累計ランキング)の一位の座を確保してます。ちゃんと三周もできます。

このツールでできるのは次の三つです。

  指定時刻での星・種集め(時刻は複数指定可能)
  指定ルームへの星・種投げ(ルームは時間帯をわけて複数指定可能)
  指定時刻あるいは星・種集め後の獲得ポイント情報の取得

(追記)

これまでの経験、反省をもとにプログラムのメンテナンス性、可読性を考慮したものを作成中です(2019年9月)

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

から始まる一連の記事。

--------

このツールはいろいろと欲張ったのでちょっと使いにくいところもあります。“推し”の配信者さんへのいわゆる三周を簡単・確実に行いたいということであればあしかっぴ
(@pf_ashika)さんの作成されたツールの方が使いやすいかもしれません。

  「Showroom - 自動三周ツール(もう一つの自動星集め・星投げ・カウントツール)


(追記)獲得ポイント数の取得が目的であればそれに特化したものがあります。

  「Showroom - イベントの獲得ポイント数を取得して記録するツール

☆ 星投げと種投げは並行してできるのですが、星集めと種集めは同時にできないように修正してあります。これは単に私のPCの能力不足が理由です。
☆ 何度も書いたので、規約上の問題については今回は書きません。

 

今回テストツールを使って自動化するという方針でやってきたのですが、このアプローチがまずかったような気がします。これからこういうツールを作成しようと思う方は違う方向からアプローチした方がいいと思います。それからここで紹介するGO/agoutiを使う方法はじつは最新のGoogle Chromeでは動作しないところがあります。そこで今はわざわざ古いVer.64をインストールして使っています。(chromedriverを最新版(Ver.2.40)にすることでChrome Ver.67でも動くようになりました)
ただ動かないといってもコメント入力つまりカウントのところだけです。途中から方針を変更してShowroom Toolboxは使わないという方針に変えたのですが、これをまたShowroom Toolboxを使うようにしてカウント部分はそれに任せるようにすれば最新バージョンのChromeでも問題はなくなるはずです。そこの手直しはやってみたいと思っているので、また今回みたいな記事を書くかもしれません。

(chromedriverを最新版(Ver.2.40)にすることでChrome Ver.67でもFill()が正しく機能するようになりました)


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

追記(2018年9月6日)

2018年9月1日(おそらく9時頃)予告されていたとおりスポーツ枠がなくなりました。
このため下記のソースでは種集めのとき配信ルーム一覧への移行で(スポーツ枠の次にある)アマチュア枠への移行が行われないなど正常に機能しなくなります。
プログラムの先頭にある

 

const Amateur = 9

 

 

const Amateur = 8

と修正することによって対応可能です。
この件に関しては近々記事を書く予定です。


  ==> 「Showroomの仕様変更とその対応の履歴

---------

プログラムを大きくなっていてさすがに記事中にソースを埋め込むというのはできないのでソースはダウンロードで提供することにしました。私みたいなGO初心者の方には並列処理や処理間の同期のとり方のところなんかは参考になるかもしれません(最適なソースになっているとは思えませんが)

 

    ☆ showroom.go は GetStarts03.go に対し ..\showroom に置きます。

      ダウンロード GetStars_20180814.zip (16.8K) (2018年8月14日)

    追記 2018年7月25日17時頃Showroomの仕様が変更されました。
    各配信者の獲得ポイント数の取得方法を変更が必要です。
    ただし最新の(上の)ソースでは各配信者の獲得ポイント数の取得は別プログラムとしました。


    「Showroom - イベントの獲得ポイント数を取得して記録するツール

    2018年9月1日に予定されている仕様変更(スポーツ枠がなくなる)
    に対してもソースを変更する必要があるかもしれません。


このツールを使って何ができるかだけは記事の末尾に紹介しておきます(ソースのコメントをコピーしてきただけですが)

※ StartTime.txt の書き方

いずれも特別な場合を除き星集め・種集め後にRoomList.txtにしたがって各配信者さんの獲得ポイントのデータを取得します。

9時の公式枠の配信者さんと11時のアマ枠の配信者さんでそれぞれ三周するとき

 

1	7	0	0	-1
1 8 12 0 -1
1 9 3 -1 1
2 8 33 0 -1
1 9 12 0 -1
2 10 12 0 -1
2 11 3 -1 1
2 11 12 0 -1

ひたすらリスナーレベル上げたいとき

 

 

 

.
.
1 7 0 1 -1
2 7 30 1 -1
1 8 0 1 -1
2 8 30 1 -1
1 9 1 1 -1
2 9 31 1 -1
1 10 1 1 -1
2 10 31 1 -1
.
.

 

※ RoomList.txt の書き方

 

 

 

RoomList.txtの内容の例

 

RoomList6.txt
RoomList7.txt

 

RoomList6.txtの内容

 

0	3	1
**ろ****** ****61331361 ****ari10 0 false 1 0
**む******** ****5u3y ****ari10 0 false 1 0
**ん******** ****9359972 ****ari10 0 false 1 0
**る**** ****31106119 ****ari10 0 false 1 0
**の****** ****61086435 ****ari10 0 false 1 0
**え****** ****d753661 ****ari10 0 false 1 0

 

RoomList7.txtの内容

 

0	0	0
*ま********* ****c157857 ****dtypeeventb3 0 false 1 0
**山**** ****mineyama ****dtypeeventb3 0 false 1 0
**ン**** ****81733050 ****dtypeeventb3 0 false 1 0
**崎**** ****f2484835 ****dtypeeventb3 0 false 1
0

 

 

 

 

 

取得したデータの例は

 

  「Showroom - イベント結果データ

 

 

 

 

 

 

にあります。たとえば現在(2018年8月3日)進行中のイベントですと....

 

Sr_event_beginner_women_official__2

 

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

 

 

 

 

参考

 

  「Showroom - 自動星集め・星投げ・カウントツール)」 (使用法とソースつき)
  
Showroom - 自動三周ツール(もう一つの自動星集め・星投げ・カウントツール) 
  「Showroom - イベントの獲得ポイント数を取得して記録するツール

  「Showroom - 福引するプログラムとその結果 (1)

 

 

 

 

 


  Showroomの仕様変更とその対応の履歴

  「Showroomの複数アカウント(複アカ、複垢)について考えてみた(1)
  Showroom - 複数アカウント(複垢)問題の真実 - 実験計画
  「Showroomの重複アカウント(複垢)減算はこうして起きる


  「Showroomでの自動星集めの試み (3) ガチイベ、最後の5分間

  「Showroom ラスカルイベの最後の5分間


  「Showroomでの自動星集めの試み (1)
  「Showroomでの自動星集めの試み (2) 配信ルームの一覧を作る

  「Showroomでの自動星集めの試み (4) 星集めツール
  「Showroomでひたすらリスナーレベルを上げるための星集めツール(Go/Agouti)

  「超初心者のGo言語/agouti - ブラウザ操作の基本の基本

  「超初心者のGo言語 - 複数の戻り値をもつ関数
  「超初心者のGo言語 - もっとも簡単なGoroutine(並列処理)

 

 

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

  「GoDoc - package agouti

  「Qiita @0829 - Goではじめてみたブラウザの自動操作

 

  「Qiita @tenten0213 - agoutiというWebDriverクライアントを使って面倒な作業を自動化する
  「Qiita @masaru_b_cl - Windows上でGo言語初心者向け学習環境を作る

  「はじめてのGo言語
  「天才まくまくノート - まくまく Hugo/Go ノート - 関数を定義する (func)

 

  「Qiita @TakaakiFuruse - Golang Goの並列処理を学ぶ(goroutine, channel)
  「Qiita @To_BB - Rubyエンジニアがゴルーチン(Go言語)を学んでみた【初心者向け】
  「Qiita @fukumone - goroutine 使い方まとめ

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


// ******はじめに*****
// こういう機能をテストツールで作るのはまちがっていたと思い始めました。
// Webサーバーのレスポンスを100%把握するのが難しいのです。
// したがって“人力”でやるほどには完璧には行きません。
// でも省力化はできるのでないよりはましでしょう。
// これはその程度のプログラムです。
//
// *******重要******
// このプログラムはWindows上のGoogle Chromeの使用を前提としています。
//
// *******重要******
// Showroom Toolboxの導入された環境では正常に機能しない可能性が高いです。
// (Selectorが変化するため)
//
// *******対策******
//
// 最新のChromeで動作しないのはコメント入力つまりカウントのところです。
// したがって Showroom Toolbox を導入し、カウントをそれに任せれば最新のChromeでも動作すると思います。
// ただしそのために上に書いたような理由で他の部分でも修正が必要になる可能性があります。
// これはShowroom Toolboxの機能を必要な部分だけ使うようにすれば修正部分を最小にできると思われます。
//
// *******重要******
// このプログラム自体にログインや環境設定の機能はありません。
// 事前にShowroomにログインしShowroomが動作する環境を整えておく必要があります。
// あるいは起動したあと新しいタブを開きそこでログインします。
//
// このプログラムの目的
//  1. "StartTime.txt"に記されたスケジュールにしたがい星集め・種集め・統計情報の取得を行います。
// 上限を越える星・種が集まるときは星・種を集める前に投げる機能があります
// (集めた星・種をリスナーレベル向上のために使いムダにしないためです)
// 時間の許す範囲あるいは指定された時間の範囲内でカウントを行うようにします(配信者さんへのお礼の意味です)
// "BlackList.txt"にあるルームは訪問しません。
//  2. "URL3.txt"、"URL4.txt"に記されたスケジュールにしたがい星投げ、種投げを行います。
// 投げる星・種がなく他でカウントが行われていない空き時間があればそこで50カウントをします。
//  3. "RoomList.txt"に記された指示にしたがい獲得ポイント、イベント貢献ランキングを取得します。
// 獲得ポイントの取得は星集め、種集めのあとに行うケースと指定した時刻("StartTime.txt")に行うケースがあります。
// 星集め、種集めが行われていないときでもおおむね30分ごとに取得します
// 貢献ランキングは一日一回深夜に取得しますが、起動時にも一回だけ取得します。
//
// このプログラムは作成途中です。機能的に不十分なところはもちろん対応できていないバグもたくさんあります。
// 未発覚のバグはもっと多いと思います。またメモリーリークしている気配もあります。
// もし万が一このプログラムを利用しよと考える方がいらっしゃったら批判的に再利用していただきますようお願いします。
//
// -----------------------------------------------------------
// StartTime.txtのフィールドの意味は以下のとおりです。
// 第1フィールド
// 1: 公式枠(星集め)
// 2: アマチュア枠(種集め)
// 3: 統計情報の取得(1あるいは2のときも(Tweetの場合を除き)処理後時間があれば統計情報を取得する)
// 第2フィールド
// hh: 星集め・種集めの開始時刻(24時間表示の時)
// 第3フィールド
// hh: 星集め・種集めの開始時刻(分)
// 第4フィールド
// 1: 最大限星・種を集め、余った分はムダにならないように投げていく
// (リスナーレベルの向上も目的とする)
// 0: 星・種が99個になるまで集める(ただし99個集まったら1個だけ捨てる。
// (いわゆる“三周”の事前準備)
// -1: Twitterを利用してできるだけ早く星を集める
// (三周するときの2周目に使います)
// *****第1フィールドが3の場合
// 1: ルーム一覧を出力する
// 0: ルーム一覧を出力しない
// 第5フィールド
// このフィールドは1時間内に2回星集め・種集めを行う場合を想定したものです
// 1: 昇順に配信者を訪問する(アイドル枠からお笑いトーク枠、配信開始が古い方が先)
// -1: 降順に配信者を訪問する(お笑いトーク枠からアイドル枠、配信開始が新しい方が先)
// *****第1フィールドが3の場合
// 1: イベント貢献ポイントランキングを取得する
// 0: イベント貢献ポイントランキングを取得しない
// 第6フィールド
// このフィールドは省略が可能で、省略した場合2とされます。
// 通常星集め・種集めは30秒ウェイトすることによって行われますが、このフィールドに示される
// 秒数の範囲内でランダムにウェイト時間が延長(加算)されます。
// 例えばこのフィールドが40であればウェイト時間は、30秒から70秒の範囲(平均50秒)と
// なります。この値を大きくしても50を越えてカウントされることはありません
// ウェイト時間中カウントが行われますのでできるだけカウントしてあげようという気持ちでこの
// 機能を作りました。
// ただし第4フィールドが1の場合は星投げ・種投げを行う場合があり、この場合はカウントは
// 行なわず、ウェイト時間は約30秒と固定されます。
//
// -----------------------------------------------------------
// URL1.txtとURL2.txt
// URL1.txtを星投げ、URL2.txtを種投げと想定していますが、これは自由に設定できます。
// URL1.txt(あるいはURL2.txt)の中で星投げ・種投げが混在してもかまいません。
// 第1フィールド
// hh: 行が使われる最終時刻の時
// 第2フィールド
// mm: 行が使われる最終時刻の分
// 第3フィールド
// ss: 処理のインターバル(秒)
// こまめに星を投げるのであれば80(秒)程度、まとめて投げるのであれば数百(秒)にします。
// まとめて投げようとするとインターバル過ぎる前に配信が終わってしまったりします。
// 第4フィールド
// このフィールドで指定した星(種)が集まるまではインターバル経過しても投げません。
// 第5フィールド
// 星を投げ始めたらこのフィールドで指定した星の数になるまで投げ続けます。
// 第6フィールド
// 50カウントをするか(1)しないか(0)を示します。
// 第7フィールド
// 配信者URLの最後の部分
// この文字列の先頭に”https://www.showroom-live.com/"を追加したものを
// 配信者URLとします。
// 第8フィールド
// 配信者ニックネーム
//
// -----------------------------------------------------------
// RoomList.txt 統計情報を得るルームのリストのファイル名を記したファイルのファイル名
//
// 第1フィールド 統計情報を得るルームのリストのファイル名
//
// -----------------------------------------------------------
// xxxxxx.txt 統計情報を得るルームのリスト(ファイル名はRoomList.txtで指定したもの)
//
// 1行目 イベントに設定された最高レベルを達成した場合獲得ポイントが取得できなくなる問題への対応です。
// 同一イベントの配信者をグループ化し下位の配信者のポイントから上位の配信者のポイントを求めます。
// この機能が必要がなければ三つのフィールドをすべて0にしておきます。
// この機能を使うためにはポイントの算出に必要な配信者すべてのポイントを取得する必要があります。
// つまり  第2フィールド - 第1フィールド >= 第3フィールド であり
// かつ 第1フィールド~第2フィールドで示す配信者が上位(第2フィールド - 第1フィールド + 1)名
// であることが必要です。ただし順位の順に並んでいる必要はありません。
// 第1フィールド
// グループ化する最初の配信者(最初の配信者を0とします)
// 第2フィールド
// グループ化する最後の配信者
// 第3フィールド
// 下位の配信者の獲得ポイントをもとにポイントを算出する配信者の人数
//
// 2行目以降
// 第1フィールド
// 配信者ニックネーム
// 第2フィールド
// 配信者URLの最後の部分
// この文字列の先頭に”https://www.showroom-live.com/"を追加したものを
// 配信者URLとします。
// 第3フィールド
// イベントURLの最後の部分
// この文字列の先頭に”https://www.showroom-live.com/event/"を追加したものを
// イベントURLとします。
// 第4フィールド
// イベント貢献ランキングURLの最後の部分(ID:6桁以下の整数)
// イベント貢献ランキングが不要な場合つまり第5フィールドがfalseのときは0としておけばいいです。
// 第5フィールド
// true: イベント貢献ランキングを取得する
// false: イベント貢献ランキングを取得しない
//
// 第6フィールド 貢献ポイントランキングの取得方法
// 1: 通常
// 2: セレクターが通常と違う
// (singing_ippan_final_b, asobisystem_audition_sr_bの場合)
//
// 第7フィールド 獲得ポイントの取得方法
// 0: イベントダイアログに獲得ポイントがある
// 1: イベント詳細ページに獲得ポイントがある
// (singing_ippan_final_b, asobisystem_audition_sr_bの場合)
//
// -----------------------------------------------------------
// BlackList.txt 訪問してはならないあるいは訪問したくないルームのリスト
//
// 第1フィールド ルームのID
// 第2フィールド ルームの名前
//

« フラウンホーファー線にD3線が見当たらない理由 | トップページ | Amazonで買った400000V高電圧発生モジュールの出力電圧 »

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

コメント

これまでの記事参考になりました.

ところで,showroomのカウントですが,コメント欄に自動で記載しながら行う方法が分かりました.

(Toolboxに依存しないための一歩かと思います)

すでに,ご存知なら問題ありませんけど・・・・

当面,WindowsのGUIで出来るようにするための何かを考えております.

コメントありがとうございます m(._.)m
カウント(コメント入力)のためだけにChrome Ver.64を使い続けるわけにもいかないので参っています。
記事に書いたようにテストツール(Selenium/agouti)を使うこと自体問題があるので、Chrome拡張を利用できないか検討(調査)中です(Toolboxは小回りができないのでできれば使いたくないです)
もしこういうことをやるのに(できるだけ簡単な)いい方法があったらお教えいただければうれしいです。

これを組み込めば動くと思います!

// Showroom Toolboxの機能を使って自動カウントを行う
for ix:=1;ix<51;ix++{
comment_c1:=fmt.Sprintf("%d", ix)
page.FindByID("js-chat-input-comment").Fill(comment_c1)

fmt.Printf("%d ",ix)
time.Sleep(1000 * time.Millisecond)

for {
page.FindByButton("送信").Click()
MyPointT1C, _ := page.FindByID("js-chat-input-comment").Text()
// fmt.Sscanf(MyPointT11, "× %d", &NStarsT11)
if strings.Compare(MyPointT1C, "") == 0 {
time.Sleep(1000 * time.Millisecond)
break
}
}
}

さっそくご返事いただきありがとうございました。
ソースについては明日勉強させていただこうと思います。
取り急ぎ御礼申し上げます m(._.)m

私のほうもChromeを使い,Toolboxによらない自動3周ツールを,かつてのレベルアップツールから改良して作りました.参考にさせていただきありがとうございます.
おかげさまで,毎度,3周をして,1810ptも獲得できるようになりました.
今後ですが,
(1)ツールのGUI化
(2)chromeのヘッドレス化
あたりかと思われます.
現況のソースコードはご希望があればお送りします.

おお、3周できるようになりましたか。実用になるようでなによりです。
またヘッドレス化は私も興味ありますね。
もしソースコードを提供していただけるのであればぜひお願いしたいのですが、いかがでしょう。
ご連絡いただけるのならTwitter(@Seppina1)が簡単確実かと思いますが、その他の手段でもけっこうです。
メールだったらコメント入力のときメールアドレス欄を記入していただくとか....

では,Twitterでも あしかっぴ(@pf_ashika) として フォローしました.
フォローバックいただければ,こちらからもご連絡差し上げられると思います.
では,よろしくお願いいたします.

さっそくありがとうございました。
さきほどTwitterをフォローさせていただきました。よろしくお願いいたします。

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: Showroom - 自動星集め・星投げ・カウントツール:

« フラウンホーファー線にD3線が見当たらない理由 | トップページ | Amazonで買った400000V高電圧発生モジュールの出力電圧 »

フォト

サイト内検索

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

新着記事

リンク元別アクセス数

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

人気記事ランキング

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