GithubHelp home page GithubHelp logo

tocaro-exporter's Introduction

概要

2020年9月1日以降の大規模アップデートが適用されたTocaroからメッセージの一覧をブッコ抜くスクリプト。

大規模アップデート後は、グループやメッセージ取得にREST API使うようになったので、それを利用させてもらっている。
ブラウザで人間が操作している内容を模倣している感じ。

別のチャットツールなどに移行する際に便利かも? jsonで出力するので、あとはよしなに。ただし全て自己責任で。

動作環境

  • Tocaro 768328b8

    • 2020年12月時点のTocaroで各種動作確認済み
  • Python 3.6.9

使い方

下準備

$ pip3 install -r requirements.txt

コンフィグの準備

config.iniに各種情報を指定する。とりあえず、email, passwordの2つを指定すれば動作する。それぞれのパラメーターの意味について以下に記載する。

パラメーター デフォルト値 意味
email - Tocaroにサインインするためのメールアドレス
password - Tocaroにサインインするためのパスワード
group_type show メッセージを取得する対象のグループタイプ。show(表示グループ)かhide(非表示グループ)のどちらかを指定する。
excludes アラート 指定した文字列に部分一致する名前のグループはメッセージ取得しない。
interval 0.3 連続的にメッセージ取得する際の一定の停止間隔(秒)
0に指定すると停止なしの最速処理(非推奨)
debug false デバッグログを出力するかどうか
path ./outputs 出力先パス

実行

所属している全グループから全メッセージを出力。※実行完了までかなり時間がかかる

$ ./tocaro_exporter.py --all

指定された単一グループの全メッセージのみを出力。

$ ./tocaro_exporter.py --group-id [group-id]

指定された文字列をグループ名に含むグループの全メッセージを出力。

$ ./tocaro_exporter.py --includes [string]

所属している全グループの一覧のみを出力。※メッセージの出力は行わない

$ ./tocaro_exporter.py --group-only

コンフィグファイルがカレントディレクトリ内に存在しない場合

デフォルトではカレントディレクトリ内のconfig.iniをコンフィグファイルとして読み込む。
異なるパスやファイル名であった場合は、--configによって変更可能。

オプション一覧

./tocaro_exporter.py -h
usage: tocaro_exporter.py [-h] [-c CONFIG] [-a] [-g GROUP_ID] [-i INCLUDES]
                          [--group-only]

Tocaro Exporter

optional arguments:
  -h, --help            show this help message and exit
  -c CONFIG, --config CONFIG
                        specify config file path.
  -a, --all             export all messages from all groups.
  -g GROUP_ID, --group-id GROUP_ID
                        export messages from specified group.
  -i INCLUDES, --includes INCLUDES
                        export message from groups including the specified
                        string.
  --group-only          export for group list json only.

注意

  • TocaroのAPIの都合上、メッセージを30件毎に取得する必要がある。そのためメッセージ量が多いと全てを取得しきるのに相当な時間がかかる。気長に待つべし。
    • 参考程度に・・・以下の条件の全メッセージ出力に1時間程度かかった実績あり
      • グループ/トーク合計数: 110
      • メッセージ総数: 20万弱
      • interval: 0.4
  • グループが多いと、その分時間がかかる。不要なグループは非対象になるようexcludesには何かしらの文字列は入れておいたほうが良い。
    • --includesを併用した場合、excludesによる除外が行われたリストに対して、includesによる処理がかかる

参考

  • 出力したjsonファイルたちからメッセージ本文だけを抽出して別名で保存するワンライナーコマンド ※bash専用
$ for item in `ls outputs/*`; do jq .[].text $item | sed 1~1i--- > ${item/json/txt}; done

tocaro-exporter's People

Contributors

gzock avatar

Watchers

 avatar

tocaro-exporter's Issues

excludesの複数文字列のサポート

現状、config.iniのexcludesには1つの文字列しか含められない。これではちょっと不便。
リスト表記で複数の文字列を入れたり、あるいは正規表現をサポートできるようにしたい。

特定グループに限定したメッセージ取得機能の実装

今のmain.pyだと全部のグループの全メッセージを取得する。そこまで必要ないときに使えるような機能が欲しい。

例えば以下。

  • includesで指定した文字列を持つグループのみ対象とする (現実装のexcludesの反対)
  • 単一グループ狙い撃ちできるような別スクリプトの実装
    • CLIツールっぽく引数でとれて実行できるような形が良い?

簡易的なWebビューワの実装

出力したjsonファイルを使って、Webブラウザ経由でそれらを参照できるようなビューワを実装したい。
気軽にざざっと見るだけなら、コマンド打ってどうこうするよりもWeb経由のほうが楽だし。

ただしあまり作り込まないようにしておきたい。
単純にグループ単位でメッセージ参照できたり、簡易検索できたりするぐらいに留めておく。

実装規模によるけど、これは別リポジトリに分けたほうが良いかな?

出力したjsonからtextのみ抜き出すような処理の例示

機能としての実装は要らないと思うけど、jsonからメッセージ本体だけ抜き出してまとめるようなことを行うワンライナーコマンドとかをREADMEで例示すると便利かも?そういうことやりたいと思う人がどれだけいるかわからないけど。機能としての実装は不要だと思う。

コンテナによる簡単実行のサポート

まぁ依存パッケージも少ないし、python3.6あれば実行できるしで、あまりコンテナ化させておく理由も薄いのだけど・・・
Dockerfile書きつつ、DockerHubにビルド済みのコンテナイメージも置いておきたい。

mountでconfig.iniもらうだけでなく、環境変数でパラメーター受け取れる形にしたほうが良いかな。
なので、entrypoint.shみたいなの作る必要がありそう。

全メッセージ取得時の間欠APIコール処理の実装

全メッセージ取得する際、現状なんのインターバルもはさまず、連続的な実行を行っている。
数百~数千メッセージがあると、とてつもないスピードでAPIを叩きまくることになる。
ちょっとこの動作だと、サービス側に負担をかけてることになるため改善したい。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.