2019年8月30日 (金)

SHOWROOM - 自動三周ツール(視聴ボーナス版)(もう一つの自動星集め・星投げ・カウントツール

以前書いた記事SHOWROOM - 自動三周ツール(もう一つの自動星集め・星投げ・カウントツールにあるツールは星集め(種集め)がいわゆる「ツイボ」で行われていました。7月からツイボによる星集めはできず、「視聴ボーナス」だけが星集めの手段となりました。

あしかっぴ(@pf_ashika)さんから「視聴ボーナス」対応のGO/agouti版ソースをいただきましたので、公開することにします。じつはこのソースはツイボで星集めができなくなる前にいただいたのですが、いろいろやりとりをしてるうちに一ヶ月以上経ってしまいました。大半は私の怠慢です。すみません。

以下からダウンロード可能です。内容は ソース sh880_20190801.go と 入力データ StartTime1.txt です。

    ダウンロード - sh880_20190801.zip

ソースの使い方はプログラム冒頭のコメントを御覧ください。特に

//	Sep.	環境に依存するするものはプログラム冒頭のconstで定義しました。
//	Sep.	Log_Dir  User_Data_Dir がそれです。
//	Seo.	ご自身の環境に合わせて変更してお使いください  <============= **重要**
//	Sep.	特にUser_Data_Dirについてはプログラムを起動する前に--user-data-dirオプションで指定して
//	Sep.	Chromeを起動して、SHOWROOMにログインしてSHOWROOMにの視聴環境を整えておくことが必要です。

のところに注意していただければと思います。

---------

ところで私の作った Showroom - 自動星集め・星投げ・カウントツール) の方はその後大幅に改良を行ってリス活に活用中ですが、現在「初心に戻って」一から書き直しているところです。

最近書いている一連の記事をご覧になればなんとなくわかっていただけると思いますが、

  1.機能ごとに関数を作って提供し、どなたでも自分の必要とする機能をもったプログラムを容易に構成できるようにする。
  2.ハードコーディングは極力避ける(といっても相手がSHOWROOMという生きたシステムなので限度がありますが)
  3.agoutiを使う必然性がない部分はgoquery(やencoding/jason)を利用して負荷軽減を図る。
  4.GOの言語仕様の特性を活用し、またできるだけパッケージを利用した作りとする。
  5.機能の使いやすさ・わかりやすさを優先し、星集め・星投げを非同期で動作させるような作りはいったん排除する。

というような方針でやってます。

2019年8月11日 (日)

SHOWROOM - 自動星集め/種集め - 配信ルームリストの取得(ソース)

現在、SHOWROOMでの自動星集め/種集め、さらには自動星投げ/種投げツール(両方合わせれば自動三周ツール)の作成に必要な要素について記事を書いています。前記事 SHOWROOM - 自動星集め/種集め - 配信ジャンルの取得(ソース) では公式、アマチュアそれぞれのジャンルの求め方について書いたので、今回はそれぞれのジャンルにある配信ルームのリストを作ることになります。
(次は「星集め関数」の予定です)

前回、今回の記事はブラウザを開きそこから必要なデータを取得する方法ですので、SHOWROOM - イベントでの配信者の獲得ポイント数を取得する(改良版)SHOWROOM - イベント貢献ランキング(貢献ポイント)を取得する関数(ソース) のようにブラウザを開かずJSONあるいはHTMLをスクレイピングする方法に比較すると若干パフォーマンス的に劣る方法になります。

じつはムム@SRさん( あるいは Showroom イベント ポイント遷移グラフ公開所)から



というご指摘をいただいています。要するにこの配信ルームのリストを作る機能もブラウザを開かずに(つまりgo/agoutiではなくJSONのパースだけで)作れるということです。そちらの方がパフォーマンス的に有利かと思いますが、すでにこの関数を作りかけていたのでひとまずこちらから公開することにします。JSON版もそのうち作って公開したいと思います。

プログラム自体それほど大きなものではありませんし、コメントも入れてあるので記事の最後にそのまま公開することにします。
main()(テストプログラム部)の実行にはGetCategoryList()が必要ですが、これはPackage ShowroomLibを作ってそれにおさめています(パッケージはビルドしたあとインストールが必要です。念のため)
もちろん前記事のソースからGetCategoryList()を持ってきてこのソースに追加してもかまいませんが、その場合は
  IdxAmateur, IdxOfficial, status := ShowroomLib.GetCategoryList(...
のところはとうぜん
  IdxAmateur, IdxOfficial, status := GetCategoryList(...
とします。

最近多少はGO言語やagoutiの使い方がわかってきたので、今までよりはだいぶマシなプログラムになっていると思います(あくまで"今までより"ですが)

セレクターはこれまでブラウザの開発ツールでCSSセレクターをコピーしてきてそれを使っていたのですが、かならずしも意図したものにならない場合があり、今回はhtmlの構造を考えながらセレクターを作っています。
また"li"のところのデータの取得ではMultiSelectionを使ってみました(セレクション取得のための All()、セレクション数を得る Count()、個別のセレクションを得る At() )
個別に取得するのとたいして違いはないのですが、今回は後ろからデータを取得しなければならないケースがあり最初に個数が必要なので。

※ 自動星集め・星投げについてはすでにソースを公開(「Showroom - 自動星集め・星投げ・カウントツール)」 )していますが、機能ごとにソースを分けてない上にふつうは必要にならないような機能を盛り込んだこともあってソースの可読性がよろしくないです。またハードコーティングされた部分もありますし、コメントの位置や量にムラがあります。そこでそのあたりを改善して自分の目的にあったプログラムを作っていただけるようにしようと、機能ごとに関数を分けて一つずつ記事にしている次第です。
もうひとつの 「Showroom - 自動三周ツール(もう一つの自動星集め・星投げ・カウントツール)」  の方もすでにあしかっぴ(@pf_ashika)さんから視聴ボーナス対応版のソースをいただいているので、公開予定ですが、私のソースをベースにされているため同じ課題が残っています。

» 続きを読む

2019年8月 7日 (水)

SHOWROOM - 自動星集め/種集め - 配信ジャンルの取得(ソース)

SHOWROOMで星あるいは種を集めようとするとオンライブ画面から公式枠なりアマチュア枠なりのジャンルに移動して、現在配信されている配信画面を次々に開いていく必要があるのですが、ジャンル構成がたびたび変更されるのでその都度対応=プログラムの修正=を行うということになってました(Showroom - 自動星集め・星投げ・カウントツールなど)

公式枠はジャンルの3番目から7番目、アマチュア枠は10番目というようなハードコーディングをやってるからそうなるわけで、今回はオンライブ画面から公式枠とアマチュア枠のジャンルがどこにあるか調べてジャンル位置のリストを作る関数を作ってみました。

ジャンルの追加、削除、位置の変更に対し、何もしなくてもあるいはデータファイルを変更するだけで対応できるようになります。

記事の最後にソースをおいておきます。利用法を含めかなり細かい説明を入れたつもりなので、記事での説明は省略します。

それからいつジャンルのリストを作業をするかが問題です。星集めのプログラムの中で一日に一回やっておけばじゅうぶんみたいに思えるのですが、これまでの仕様変更(ジャンル枠の変更)は16時とかずいぶん思い切った(?)時間に行われたことがありましたから星集めの都度やっておいた方が無難かも....

なお、こういうをやってると規約上どうなんだろう、という問題が発生するわけですが、それはご自身で考えてください。
すべてアウト(にできるぞ!)、とも受け取れる規約ですが、私の場合は、ここまではセーフ、ここから先はグレー、という線を自分なりに想定してやってます。

ところでこういうのは、ほどほどにしておけばだいじょうぶ、と安心してもいられないことを最近知りました。

  岡崎市立中央図書館事件(Wikipedia)
  「Librahack


SHOWROOMのエンジニアさんは優秀そうだから、こんなことはないと思いますが、お互い気をつけましょう。

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

SHOWROOMのための関数(GO言語、ソース)

  SHOWROOMのイベント参加者のリストを取得する(GO, スクレイピング)
  SHOWROOM - イベントでの配信者の獲得ポイント数を取得する(改良版)
  SHOWROOM - イベント貢献ランキング(貢献ポイント)を取得する関数(ソース)

» 続きを読む

2019年7月29日 (月)

SHOWROOM - イベント貢献ランキング(貢献ポイント)を取得する関数(ソース)

イベント貢献ランキングの取得については以前書いた

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

にもあったのですが、パフォーマンス(負荷)の問題があるので

  SHOWROOM - イベントでの配信者の獲得ポイント数を取得する(改良版)

と同じように書き直してみました。つまり go/agouti をやめて go/goquery を使っています。

また関数のインターフェースについては、最近のいくつかの記事と同様に

  1.  実行時のパラメータ(イベントIDや配信者ID)は引数として渡し
  2.  結果はすべて戻り値として受け取る
  3.  結果がリストの場合はSliceとして受け渡す

という方針にしました。ソースはそれほど長くないのでこの記事の最後にそのまま掲載します。

関数のインターフェースやサンプルプログラムの実行方法についてはコメントにあります。

ところで、貢献ポイントランキングを取得することに意味があるのか、というのがあるのですが、
まあぜったい必要になるというのは減算が発生したとき、原因アカウントを特定するときくらいでしょうか w
もっとも貢献ポイントランキングがあればかならず原因アカウントを特定できるわけでもありませんが。

配信者さんにとっては、○○くん、最近サボリ気味だから気合入れておこうかなあ、とか...

なお減算については

  「Showroom - 複数アカウント(複垢)問題の真実 - 実験計画
  「Showroomの重複アカウント(複垢)減算はこうして起きる


に書いたのですが、ムム@SRさん( あるいは Showroom イベント ポイント遷移グラフ公開所)によれば実際はもっと"複雑怪奇"なケースもあるようです。

サンプルプログラムの実行結果
Photo_20190729003701

じつはさらに(もうちょっとだけ)パフォーマンスがいい方法があるようです。公開に問題なさそうであれば、そのうち記事にします。

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

» 続きを読む

2019年6月22日 (土)

SHOWROOM - イベントでの配信者の獲得ポイント数を取得する(改良版)

SHOWROOMのイベントで配信者の獲得ポイントを取得する方法についてはすでに

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

に書いたのですが、いろいろと問題がありました。いちばん問題なのはパフォーマンスの悪さです。いちいちブラウザで画面を開きそこからデータを読み取っているわけですから、手間(時間)がかかりますし、負荷も大きくなるからとうぜんです。(おそらくこれに関連して)長時間動作させると不安定になってくるという問題もありました。

これらの対策として

  「SHOWROOMのイベント参加者のリストを取得する(GO, スクレイピング)

に書いたような方法があります。ブラウザを使わないので動作がかなり軽くなるはずです。当初この方法で動作を改善しようと思っていたのですが、じつはもっと効果的な方法があります。SHOWROOMには配信者の情報を得るためのAPIが提供されているようです。このAPIをどうやって見つけたのかが謎なのですが、例えば現時点で参照できるものとしては

  5ちゃんねる - AKB48×SHOWROOM ★1289

に紹介されています(紹介と言ってもAPIだけがぽつんと書かれているだけです)

このAPIは配信者のID(room_id)を指定して実行すると参加イベントや獲得ポイント数、順位などの配信者の情報がJSONで取得できます。幸いGO言語にはJSONをパースするためのライブラリーがありますのでそれを使えば比較的簡単に必要な情報を得ることができます。GO言語でのJSONの処理についてはいろいろあるのですが、今回は

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

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

--------

ソースはこの記事の末尾に添付します。このプログラムは

  RoomList.txtにリストされたファイル群から配信者さんのリストを読み込み
  各々の配信者についてイベントでの獲得ポイントや順位を取得して
  配信者リスト単位で結果をファイルに追記する
  ということを指定された時間間隔で行う

というものです。この記事をご覧になる方に必要だと思われる「特定の配信者の獲得ポイントなどを取得する」処理は GetPoints() のところで、それほど大きな処理ではないです。
なお一点注意すべき点があります。使用しているSHOWROOMのAPIから戻されるJSONの構造は(少なくとも)二種類あることです。
これはレベルイベントとランキングイベントで結果の構造が異なるためです。ソースではランキングイベントの構造を想定して対象データを取得しに行き、もしデータを取得できなければ、レベルイベントの構造を想定して取得する、ということをやっています。

それから特定イベントの全参加者の獲得ポイントを知りたいというような場合はまずイベント参加者リストの取得が必要ですが、これは

  「SHOWROOMのイベント参加者のリストを取得する(GO, スクレイピング)

を参考にしていただければと思います(配信者の情報はどちらも同じ型(slice)にしてあるのでそのまま組み込めるはず)
取得した獲得ポイントデータをデータベースに格納して保存するような場合は毎回イベント参加者リストを取得した方が合理的でしょう。

» 続きを読む

2019年5月18日 (土)

SHOWROOM - イベント結果データ (2)

SHOWROOMの特定イベントの(一部)配信者さんの獲得ポイントの推移、配信者さん間の差、日々の獲得ポイント等をグラフにしたものです。

この記事にあるデータやそれから作成したグラフは自由に使っていただいてかまいません。例えばグラフをダウンロードしてツィートするとか、Excelのシート(もとデータ)をダウンロードして分析し、それを公開する等です。特に連絡していただく必要もありません。

また獲得ポイント等のデータの記録・提供、グラフの作成等のご要望があれば御相談に応じます。イベント名(必要なデータによっては配信者さんのルーム名)をお知らせください。グラフは不要、獲得ポイントの数値データだけほしい、とか、グラフをカスタマイズしてほしい、というようなご要望にもできるだけおこたえしたいと思います

なお、この記事にあるデータは

  「SHOWROOM - イベントでの配信者の獲得ポイント数を取得する(改良版)

で取得したものです。

※ 「SHOWROOM - イベント結果データ(1)」の記事が長くなりすぎたので (2) として新規の記事にしました(一部重複があります)

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

☆ 現行イベントの最新情報

  ★ 【SHOWROOM公式】オリジナルアバターをGETしよう!〜1ヶ月〜 Vol.6 (2019/08/29 18:00 - 2019/08/28 21:59)

    各配信者さんの獲得ポイントの推移(1)(グラフ)

    各配信者さんの獲得ポイントの推移(2.拡大図)(グラフ)

    特定の配信者さんを基準にした獲得ポイントの差(グラフ)

    配信者さんの日々の獲得ポイント(グラフ)

    日々の獲得ポイントと(すでに獲得したポイントを考慮した)日々の必要獲得ポイント(おもっちゅーしルーム)

    もとデータ(数値データ)

  ★ フォロワーアップ!配信アイテムプレゼント♡ (2019/08/01 0:00 - 2019/08/30 23:59)

    各配信者さんの獲得ポイントの推移(1)(グラフ)

    各配信者さんの獲得ポイントの推移(2.拡大図)(グラフ)

    特定の配信者さんを基準にした獲得ポイントの差(グラフ)

    配信者さんの日々の獲得ポイント(グラフ)

    もとデータ(数値データ(タブ区切りテキストデータ))(1)

    もとデータ(数値データ(タブ区切りテキストデータ))(2)

 
 ★ CanRollWEBモデルイベント! (2019/07/20 17:00 - 2019/08/04 21:59)

    各配信者さんの獲得ポイントの推移(1)(グラフ)

    各配信者さんの獲得ポイントの推移(2.拡大図)(グラフ)

    特定の配信者さんを基準にした獲得ポイントの差(グラフ)

    配信者さんの日々の獲得ポイント(グラフ)

    もとデータ(数値データ(タブ区切りテキストデータ))(1)

    もとデータ(数値データ(タブ区切りテキストデータ))(2)

  ★ 【アマ枠限定】七夕に願いを7日間 (2019/07/01 0:00 - 2019/07/07 21:59)

    各配信者さんの獲得ポイントの推移(1)(グラフ)

    各配信者さんの獲得ポイントの推移(2.拡大図)(グラフ)

    特定の配信者さんを基準にした獲得ポイントの差(グラフ)

    配信者さんの日々の獲得ポイント(グラフ)

    もとデータ(数値データ)

  ★ 【SHOWROOM公式】オリジナルアバターをGETしよう!〜1ヶ月〜 (2019/07/01 18:00 - 2019/07/28 21:59)

    各配信者さんの獲得ポイントの推移(1)(グラフ)

    各配信者さんの獲得ポイントの推移(2.拡大図)(グラフ)

    特定の配信者さんを基準にした獲得ポイントの差(グラフ)

    配信者さんの日々の獲得ポイント(グラフ)

    日々の獲得ポイントと(すでに獲得したポイントを考慮した)日々の必要獲得ポイント(おもっちゅーしルーム)

    日々の獲得ポイントと(すでに獲得したポイントを考慮した)日々の必要獲得ポイント(おざわかよさん)

    もとデータ(数値データ)

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

☆ 過去イベントの情報

  ★ ステッカー大会6 (2019/06/14 18:00 - 2019/06/23 23:59)

    各配信者さんの獲得ポイントの推移(1)(グラフ)

    各配信者さんの獲得ポイントの推移(2.拡大図)(グラフ)

    特定の配信者さんを基準にした獲得ポイントの差(グラフ)

    配信者さんの日々の獲得ポイント(グラフ)

    もとデータ(数値データ)

  ★ 【SHOWROOM公式】オリジナルアバターをGETしよう!〜1ヶ月〜 (2019/06/03 18:00 - 2019/06/30 21:59)

    各配信者さんの獲得ポイントの推移(1)(グラフ)

    各配信者さんの獲得ポイントの推移(2.拡大図)(グラフ)

    特定の配信者さんを基準にした獲得ポイントの差(グラフ)

    配信者さんの日々の獲得ポイント(グラフ)

    日々の獲得ポイントと(すでに獲得したポイントを考慮した)日々の必要獲得ポイント(おもっちゅーしルーム)

    日々の獲得ポイントと(すでに獲得したポイントを考慮した)日々の必要獲得ポイント(吉田安希さん)

    もとデータ(数値データ)


  ★ みんな大好き!ハンバーガーギフト券争奪イベント☆第3弾! (2019/05/22 0:00 - 2019/06/01 23:59)

    各配信者さんの獲得ポイントの推移(1)(グラフ)

    各配信者さんの獲得ポイントの推移(2.拡大図)(グラフ)

    特定の配信者さんを基準にした獲得ポイントの差(グラフ)

    配信者さんの日々の獲得ポイント(グラフ)

    もとデータ(数値データ)

  ★ 【SHOWROOM枠 準決勝A】雑誌『bis』モデル発掘オーディション2019! (2019/05/17 13:00 - 2019/05/26 21:59)

    各配信者さんの獲得ポイントの推移(1)(グラフ)

    各配信者さんの獲得ポイントの推移(2.拡大図)(グラフ) (5~8位さんにフォーカスしてあります)

    特定の配信者さんを基準にした獲得ポイントの差(グラフ)

    一部配信者さんの日々の獲得ポイント(グラフ)

    もとデータ(数値データ)

  ★ 【SHOWROOM枠 準決勝B】雑誌『bis』モデル発掘オーディション2019! (2019/05/17 13:00 - 2019/05/26 21:59)

    各配信者さんの獲得ポイントの推移(1)(グラフ)

    各配信者さんの獲得ポイントの推移(2.拡大図)(グラフ)

    特定の配信者さんを基準にした獲得ポイントの差(グラフ)

    一部配信者さんの日々の獲得ポイント(グラフ)

    もとデータ(数値データ)

Bis_vo2_sr_sf_b_e 

  ★ 【3日間イベント】ありがとう、平成 (2019/04/28 12:00 - 2019/04/30 23:59)

    各配信者さんの獲得ポイントの推移(グラフ)

    特定の配信者さんを基準にした獲得ポイントの差(グラフ)

    一部配信者さんの日々の獲得ポイント(グラフ)


  ★ スイーツ好き大集合! (2019/04/14 0:00 - 2019/04/21 23:59)

    各配信者さんの獲得ポイントの推移(グラフ)

    一部配信者さんの獲得ポイントの推移(拡大図)

    特定の配信者さんを基準にした獲得ポイントの差(グラフ)

    一部配信者さんの日々の獲得ポイント(グラフ)

      ダウンロード SR_Event_sweetslover_1.xlsx (数値データ)


  ★ のんび〜り 配信アイテムゲットしよう♪ (2019/03/27 0:00 - 2019/04/25 23:59)

    各配信者さんの獲得ポイントの推移(グラフ)


      ダウンロード SR_Event_30daysevent.xlsx (数値データ)


» 続きを読む

2019年4月 3日 (水)

SHOWROOMのイベント参加者のリストを取得する(GO, スクレイピング)

これまでSHOWROOM関連のプログラムをGO言語でいろいろ書いてきたのですが、すべてブラウザを開きそれを操作するか、というようなやり方をしていました。つまりGO/agouti で書いたものです。

ベースに星集め、種集め、星投げ、種投げを自動化しようというのがあるので、そうしていたわけですが、(いまさらですが)よくよく考えるとものによっては単にリクエストを投げ戻って来たHTMLを解析するだけで済む話でした。

イベントに参加している配信者さんの順位や獲得ポイントを取得する、イベントに参加した配信者さんのリストを取得する、現在配信中の配信者さんのリストを取得する、などの操作がこれにあたります。

今回は、まずはじめに、イベントに参加している配信者さんのリストを取得する、というのを紹介します。

ブラウザに関するおまじない的なものはないのでその分は簡単になりますが、やってることはそんなにかわりません。ただパフォーマンスは圧倒的にいいです。

/*
	SHOWROOMのイベントの配信者の一覧を作ります。
 
	使い方
		イベントページのURLが
			https://www.showroom-live.com/event/event_id
		のとき
 
		EventRoomList.exe event_id
 
		実行するとイベント参加者のアカウント、ID(5~6桁の数字)、ルーム名が
		参加者の数だけ出力されます。
		(ただしデータが得られる参加者数には上限があったはず)
 
*/
package main
 
import (
	"fmt"
	"os"
	"strings"
 
	"net/url"
 
	"github.com/PuerkitoBio/goquery"
)
 
func GetEventRoomList(EventName string) (NoRoom int, AccountList, IdList, NameList []string) {
 
	//	AccountList	アカウントのリスト、アカウントは配信のURLの最後の部分の英数字です。
	//	IdList		IDのリスト、IDはプロフィールのURLの最後の部分で5~6桁の数字です。
	//	NameList	ルーム名のリスト
 
	//	以下の部分は次を参考にしました。
	//		はじめてのGo言語:Golangでスクレイピングをしてみた
	//		https://qiita.com/ryo_naka/items/a08d70f003fac7fb0808
 
	_url := "https://www.showroom-live.com/event/" + EventName
 
	doc, err := goquery.NewDocument(_url)
	if err != nil {
		panic(err)
	}
 
	u := url.URL{}
	u.Scheme = doc.Url.Scheme
	u.Host = doc.Url.Host
 
	//	イベントに参加しているルームの数を求めます。
	//	セレクターはブラウザの開発ツールを使って確認します。
	SNoRoom := doc.Find("p.ta-r").Text()
	fmt.Sscanf(SNoRoom, "%d", &NoRoom)
 
	//	確か30ルームを越える参加者がいる場合は初期表示されるのは30ルームだったはず
	if NoRoom > 30 {
		NoRoom = 30
	}
 
	//	各参加者の情報を取得します。
	for i := 1; i < NoRoom+1; i++ {
		//	セレクターはブラウザの開発ツールを使って確認します。
		selector_account := fmt.Sprintf("li.js-follow-li:nth-child(%d) > div:nth-child(1) > div:nth-child(2) > div:nth-child(1) > a:nth-child(2)", i)
		selector_id := fmt.Sprintf("li.js-follow-li:nth-child(%d) > div:nth-child(1) > div:nth-child(2) > div:nth-child(3) > ul:nth-child(1) > li:nth-child(2) > a:nth-child(1)", i)
		selector_name := fmt.Sprintf("li.js-follow-li:nth-child(%d) > div:nth-child(1) > div:nth-child(2) > div:nth-child(2) > h4:nth-child(1)", i)
 
		account, _ := doc.Find(selector_account).Attr("href")
		account = strings.Replace(account, "/", "", -1)
		id, _ := doc.Find(selector_id).Attr("href")
		id = strings.Replace(id, "/room/profile?room_id=", "", -1)
		name := doc.Find(selector_name).Text()
 
		AccountList = append(AccountList, account)
		IdList = append(IdList, id)
		NameList = append(NameList, name)
	}
 
	return
}
 
func main() {
 
	if len(os.Args) == 1 {
		fmt.Println("Usage: ", os.Args[0], " EventName")
		return
	}
	EventName := os.Args[1]
 
	NoRoom, AccountList, IdList, NameList := GetEventRoomList(EventName)
 
	fmt.Printf("0\t0\t0\r\n")
	for i := 0; i < NoRoom; i++ {
		fmt.Printf("%s\t%s\t%s\t%s\tfalse\t1\t2\r\n", NameList[i], AccountList[i], EventName, IdList[i])
	}
 
}

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

参考

  「Showroom - 自動星集め・星投げ・カウントツール)」 (使用法とソースつき)
  
Showroom - 自動三周ツール(もう一つの自動星集め・星投げ・カウントツール)」 
  「Showroom - イベントの獲得ポイント数を取得して記録するツール
  「SHOWROOMのイベント参加者のリストを取得する(GO, スクレイピング)
  「Showroom - 福引するプログラムとその結果 (1)

  「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 使い方まとめ

2018年11月25日 (日)

Showroomの重複アカウント(複垢)減算はこうして起きる

Showroomで一人のユーザーが複数のアカウントを使うことは禁止されており、もし複数のアカウントを使えば獲得したポイントが減算されるとされています。この記事では複数アカウントを使ったときの減算がどのようにして起きるか、どのように減算されるかをできるだけ詳しく説明しようと思います。

最初にお断りしておくべきことがいくつかあります。

まず「一人のユーザーが複数のアカウントを使う」ことを禁止するのはけっこうですが、それを行ったからペナルティを課すというのは(Showroomの仕組みでは)現実には不可能としか思えません。なぜそういうことをするのだろう__というかなぜできないはずの複数アカウントのチェックができると主張するのか不思議に思うのですが、このことについて書くのは今回はやめます。

次に、以下はいろいろ検証した上での記事ですが、複垢減算は状況によりいろいろな影響を受けます。ですから以下に書くことが100%正しいと断言できるわけではありません。また今後のShowroomの仕様変更によって以下とは異なった結果となることも予想されます。このことにはじゅうぶんご留意願います。

最後に、この記事を書くにあたって協力していただいた配信者さんがいらっしゃいます。本来はお名前(ハンドル)を書いて謝意を表すべきです。ですが内容が内容なだけに申し訳ありませんがお名前は省略させていただきます。こころよく実験をお許しいただき心から御礼申し上げます。

なお、これはブログの記事ですから散文的です。要点だけ知りたいという方は

  Showroom - 複数アカウント(複垢)問題の真実 - 実験計画

を御覧ください。Q&A形式でまとめてあります。

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

以下のような状況を想定します。

姉と弟がおり、二人ともShowroomのリスナーだとします。
姉は自室で自分専用のPCでShowroomを視聴し、弟はリビングの家族共用のPCでShowroomを視聴し、さらに同じ配信者さんを応援しているものとします。

※ こう書くと、こういう環境だとふつうIPマスカレードがなんかだろうから二人とも同じIPアドレスになって複垢扱いされるのでは、と思われる方がいらっしゃるかもしれませんが、(少なくとも現時点では)それはないです。二人が同じ配信者さんに星(あるいは種)を投げたとしてもそれぞれは別ユーザー/別アカウントとしてきちと計上されていきます。要するにIPアドレスが同じというだけで同一ユーザーの重複アカウントと判断されることはありません

さてこの二人の応援する配信者さんがイベントに参加しました。イベントは月曜から金曜日まで5日間にわたって行われます。最初の三日間ふたりはそれぞれいつものように配信者さんに星(種)を投げます。
月曜日 火曜日 水曜日 木曜日 金曜日 有効獲得ポイント
姉の獲得ポイント 0pt 1,609pt 1,250pt 2,859pt
弟の獲得ポイント 1,810pt 1,810pt 1,810pt 5,430pt

ここまではとうぜん何の問題もありません。

» 続きを読む

2018年9月21日 (金)

Showroom - 複数アカウント(複垢)問題の真実 - 実験計画(実験結果追記)

Showroomの(特にイベントの)複数アカウント(重複アカウント)の件については

  「Showroomの複数アカウント(複アカ、複垢)について考えてみた(1)


を書いたのですが、内容はよく言っても推測・憶測、悪く言えば妄想からなっています。

参考 複垢減算が発生したと思われる例
Sr_graph_00

現実にいろいろ“実験”してみたいのですが、配信者さんに迷惑をかけることになるのでなかなか実行に移せませんでした。ところが最近実験するなら協力してもいいという配信者さんが現れたので実験に取り掛かることにしました。

  ==>   「Showroomの重複アカウント(複垢)減算はこうして起きる

こういうことをやるのはShowroomの規約に反しているのではないかというご指摘があるかもしれません。しかし(重複アカウントが禁止されているのは確かですが)どのような行為が重複アカウントになるのかは具体的にはまったく示されていません。したがってユーザー(例えば兄弟)が自分たちのやっていることが重複アカウントになるのか否かを判断すること、つまり自分たちの行為が規約にに反するか否かを判断することはできないということになります。

要するにShowroomの規約は一言で言うと「ルールは守れ。でもルールは教えない」ということですから「自分たちでルールを明確にしよう」ということです。

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

下記のような内容を実験してみる予定です。もしこんな実験もやったほうがいいんじゃないかというのがありましたらぜひご指摘いただければと思います。内容が内容なのでこの記事にコメントしにくいのであればTwitter(DMも可)でもけっこうです。

なお協力していただいた配信者さんにご迷惑(減算)をおかけした場合は当該イベントで(もしそれができなければ次のイベント以後で)最低でも倍返しが三倍返しはさせていただきます。17日間のイベントで16万pt投げた実績がありますから借りはちゃんと返します (^^)

--------

なお複数アカウントというのは

  同一の端末で複数のアカウントを使用する行為

と思われている方もいらっしゃるようです。でもShowroomの(イベントの)規約説明では

SHOWROOMではお1人様1アカウントでのご利用をおねがいしており、重複アカウントを用いた不正な応援行為は禁止させていただいております。

となっており、複数アカウントというのはあくまで

  同一人物が複数のアカウント使用する行為

という定義のようです。

上の二つは明らかにまったく違う行為です。誤解を招きやすいのでこれからは必要に応じて“同一の端末で複数のアカウントを使用するとき“、あるいは“同一のユーザーが複数のアカウントを使用したとき”みたいに具体的に書くことにします。

--------

要確認事項

・同一IPでの貢献(星投げ、種投げ、カウント、ギフト)

複垢減算があったとき配信者さん、リスナーさんで話し合うわけですが、どうもそれらしいのがない。兄弟(親子、夫婦)で貢献してる人がいるのでひょっとしたら同じIPアドレスなのが原因で減算されたのではないか?みたいな話が出ることが多いです。

さすがにそれはないだろうとは思うのですが.....

  ==> 同一IPアドレスからのアクセスというだけで減算されることはありません。

・同一PC、同一のWindowsログインからの貢献

例えば同じPCで同じログインから兄弟が各自のアカウントでアクセスすれば複垢と判定されそうです。(Showroomの規約から言えば同一人物が複数のアカウントを使っているのわけではないので複垢ではないはすですが

  ==> 必ずしも同一PC、同一Windowsログインからのアクセスというだけで減算されるわけではありませんが、何も考えずに(工夫せずに?)やると減算を喰らいます。

・同一PC、異なるWindowsログインからの貢献

では同じこの兄弟が同じPCを使うが異なるWindowsユーザーでログインしている場合はどうでしょう?もちろん同一IPだったら複垢とみなすのであればこれをやる意味はありませんが...

  ==> 同一PCでもWindowsログインが異なれば減算されることはありません。Windowsログインが違うということは別ユーザなわけですから当たり前ですね。

・同一PC、同一Windowsユーザあるいは同一スマホであるが異なる環境でShowroomを使っている場合

一人がGoogle Chromeを使いもう一人がFireFoxを使っているというようなケースです。場合によってはさらに二人が(各々のスマホのテザリングを使うなどで)異なるIPアドレスからアクセスしているとします。
これはユーザーエージェントとかCookieとかそのあたりを意識しています。

以上はどういう場合が複垢と判断されるかという問題ですが、もう一つ複垢と判断された場合どういう取扱をされるかという問題もあります。

  ==> 同一PC、同一Windowsログインであっても異なる環境でShoworoomも使えば減算されませんが。確実に異なる環境であることのチェックが必要です。

・たとえ1ポイントでも減算されるのか?

  ==> 1ポイントでどうかはチェックしていませんが、数十ポイントでも減算の対象となります。。

・複垢のチェックは毎日行われているのか?

  ==> 断言はできないのですが毎日行われているようです。

・例えばA,Bの二つのアカウントを使ったとみなされた場合どちらが(あるいは両方の合計)が減算されるのか?

  ==> 現時点では明確にお答えできません。仮説はいくつかあるのですが....

・ある時点で複垢とみなされた場合前日以前の貢献ポイントについても減算されるのか。

  ==> 複垢とみなされるとさかのぼって減算されます。

・ある時点で複垢とみなされた場合、翌日以降複垢とみなされる行為をしていなくても減算されるのか?

  ==> 一度減算されたアカウントはイベント終了まで毎日減算されます。

・二つのイベントXの配信者AとイベントYの配信者Bを応援していた場合、イベントX配信者Aで複垢とみなされた場合、イベントYでも複垢とみなされ配信者Bでの減算が発生するのか。

  ==> イベントが異なれば別扱いのようです。

» 続きを読む

2018年9月18日 (火)

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

Showroomのシステムの手直しはしょっちゅう行われているみたいですが、ここに取り上げるのはこれまで紹介したツール類(星集め・種集めツール、星投げ・種投げツール、カウントツール、イベントでの獲得ポイント・イベント貢献ランキング取得ツール)の挙動がおかしくなるようなケースについてです。またそれ以外になんらかの理由でツールのおおきな手直しをしたケース等についても記しておきます。

上に記したようなツールが動かなくなった場合は該当するものがないか確認をお願いします。

---------

2018年10月31日(16時頃)

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

ジャンルの“人気”と“アイドル“の間に“ハロウィン”が追加されました。このためジャンルを示すインデックスを変更する必要があります。

・アマチュア枠についてはプログラムの先頭にある

const Amateur = 9


const Amateur = 8

変更して対応しました。

・公式枠については

  StartJ,StopJの設定で 2となっているところを3、6となっているところを7とします。
  それぞれ2箇所。

  GetNumOfStarsの最後の引数2を3とします(2箇所)

  この変更は今日深夜から明日未明にかけてもとの状態に戻されるのではないかと思われます。

今後このような変更が頻発することが考えられるので公式枠のインデックス用に

const Official_b = 3
const Official_e = 7

を使うことにしました。場合によっては外部の設定ファイルからこの値を読み込むようにした方がいいかもしれません。

2018年9月1日(09時頃)

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

スポーツ枠がなくなりました。
このため種集めで配信ルーム一覧への移行で(スポーツ枠の次にある)アマチュア枠への移行が行われないなど正常に機能しなくなりました。

プログラムの先頭にある
const Amateur = 9
const Amateur = 8
と変更して対応しました。

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

  記事中に説明があります。
  このツールに関しては改訂版を提供していただいていますので、近々差し替えます。

---------

2018年7月15日(17時頃)

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

イベントでの獲得ポイントの表示部分で

  "次のレベルまであと "

とあったところが

  "目標達成まであと "

と変更されました。このため獲得ポイントを取得できなくなりました。

ScanActive() (showroom.go)の該当部分を修正し、RoomList.txtで指定した獲得ポイント取得対象配信者リストの第7フィールドが“2”のときには"目標達成まであと "の後からポイントを取得するようにしました。

---------

2018年04月13日(17時頃)

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

バーチャル枠が追加されました。
このため種集めで配信ルーム一覧への移行で(スポーツ枠の次にある)アマチュア枠への移行が行われないなど正常に機能しなくなりました。

プログラムの先頭にある
const Amateur = 8
const Amateur = 9
と変更して対応しました。

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

参考

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

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


  「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 使い方まとめ

«水を注いだコップの中のコインは真上に浮き上がって見えるのか?

フォト

サイト内検索

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

新着記事

リンク元別アクセス数

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

人気記事ランキング

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