Skip to content

Commit

Permalink
Merge pull request #37 from proshunsuke/v2.0.0
Browse files Browse the repository at this point in the history
v2.0.0
  • Loading branch information
proshunsuke authored Nov 16, 2020
2 parents 6d0d313 + 859c1c4 commit 5a5761f
Show file tree
Hide file tree
Showing 20 changed files with 277 additions and 150 deletions.
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
## Packaging

# v2.0.0

https://github.com/proshunsuke/colmsg/pull/37

## BREAKING CHANGES

* support "櫻坂46メッセージ" and "日向坂46メッセージ"
* **no longer support "欅坂46/日向坂46 メッセージ"**
* add --s_refresh_token and --h_refresh_token options
* remove --refresh_token option

## Changes

* update README.md
* update doc
* add doc for "欅坂46/日向坂46 メッセージ" users

# v1.0.0

https://github.com/proshunsuke/colmsg/pull/30
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
[package]
name = "colmsg"
version = "1.0.0"
version = "2.0.0"
authors = ["proshunsuke <[email protected]>"]
categories = ["command-line-utilities"]
description="'欅坂46/日向坂46 メッセージ'アプリのメッセージをPCに保存します."
description="「櫻坂46メッセージ」「日向坂46メッセージ」アプリのメッセージをPCに保存します."
homepage = "https://github.com/proshunsuke/colmsg"
license = "MIT"
readme = "README.md"
Expand Down
38 changes: 21 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
# <img src="https://lh3.googleusercontent.com/NJqDujmTh1rwBtdnoOFci0bXNSNcm9pNjg93IfOkVGnjJC8hS5fzupnWFvOgqVqR7FY=s180" width="24px" alt="欅坂46/日向坂46 メッセージのロゴ"> colmsg
# <img src="https://user-images.githubusercontent.com/3148511/99256532-e3433e00-2858-11eb-9dce-c5941574224e.png" width="32px" alt="櫻坂46メッセージのロゴ"><img src="https://user-images.githubusercontent.com/3148511/99256580-f6eea480-2858-11eb-848e-3351c3d8159b.png" width="32px" alt="日向坂46メッセージのロゴ"> colmsg

### **「欅坂46/日向坂46 メッセージ」が10/14に「櫻坂46メッセージ」と「日向坂46メッセージ」に分かれるため、colmsgは10/14以降に動作しなくなる可能性があります。対応状況は[こちら](https://github.com/proshunsuke/colmsg/issues/33)を参照してください**
### (※ **"欅坂46/日向坂46 メッセージ" will be divided into "櫻坂46メッセージ" and "日向坂46メッセージ" on 10/14, so the colmsg may not work after 10/14. Please reference [this](https://github.com/proshunsuke/colmsg/issues/33))**)
[「欅坂46/日向坂46 メッセージ」アプリを使用していた方へ](doc/changes_about_sakurazaka_and_hinatazaka_app.md)

欅坂46/日向坂46 メッセージ」アプリのメッセージをPCに保存します。
櫻坂46メッセージ」「日向坂46メッセージ」アプリのメッセージをPCに保存します。

![sample.png](https://user-images.githubusercontent.com/3148511/85219015-fef60580-b3da-11ea-8b99-51666d27abe3.png)

## 概要

`colmsg` のインストール方法は[こちら](#インストール)を参照してください。

**まず初めに**欅坂46/日向坂46 メッセージ」アプリのrefresh_tokenを取得してください
**まず初めに**櫻坂46メッセージ」「日向坂46メッセージ」アプリそれぞれのrefresh_tokenを取得してください
取得方法は[こちら](doc/how_to_get_refresh_token.md)を参照してください。

取得出来たら以下を実行してください。
`<refresh_token>` に取得してきたrefresh_tokenを入れてください。
`<s_refresh_token>` , `<h_refresh_token>` に「櫻坂46メッセージ」「日向坂46メッセージ」それぞれで取得してきたrefresh_tokenを入れてください。
※片方のアプリのみ購読している方は片方のみを指定してください。
購読しているメンバー全員の全期間のメッセージが保存されます。

```shell script
$ colmsg -t <refresh_token>
$ colmsg --s_refresh_token <s_refresh_token> --h_refresh_token <h_refresh_token>
```

Windowsの場合は実行ファイル名を `colmsg.exe` に読み替えてください。
Expand All @@ -30,7 +30,9 @@ Windowsの場合は実行ファイル名を `colmsg.exe` に読み替えてく
* ✅ Android, iosアプリどちらにも対応しています
* ✅ Windows, macos, Linuxで実行できます
* ✅ 様々な保存方法が選べます
* ✅ 2020年6月10日のアプリアップデート後のバージョン(2.0.00)に対応しています
* ✅ 2020年10月14日のアプリアップデート後のバージョンに対応しています
* 「櫻坂46メッセージ」: バージョン1.0.00.65
* 「日向坂46メッセージ」: バージョン2.1.00.10020.68

## 使い方

Expand All @@ -51,7 +53,7 @@ $ colmsg -n 菅井友香 -n 佐々木久美
特定のグループのメッセージを保存したい場合

```shell script
$ colmsg -g keyakizaka
$ colmsg -g sakurazaka
```

特定の種類のメッセージを保存したい場合
Expand All @@ -77,16 +79,15 @@ $ colmsg --help
* 既にいくつかメッセージが保存されている場合にコマンドを実行すると、最後に保存したメッセージ以降のメッセージを取得して保存します
* 保存されるメッセージは次のディレクトリ構造で保存されます
* ```shell script
.
├── 日向坂46
colmsg/
├── 日向坂46 一期生
│   └── 佐々木久美
│   ├── 1_0_20191231235959.txt
│   └── 2_1_20200101000000.jpg
└── 欅坂46
└── 櫻坂46 一期生
└── 菅井友香
├── 3_2_20200101000001.mp4
└── 4_3_20200101000002.mp4

```
* ファイル名の形式は `<シーケンス番号>_<種類>_<日付>.<拡張子>` となっています
* シーケンス番号はメッセージの時系列を表す番号になっています。若い数字程昔のメッセージです。ファイルブラウザで辞書順に並べると保存したメッセージが時系列通りに並びます
Expand Down Expand Up @@ -122,8 +123,11 @@ export COLMSG_CONFIG_PATH="/path/to/colmsg.conf"
設定ファイルの例:

```bash
# refresh_tokenを指定
-t refresh_token
# s_refresh_tokenを指定
--s_refresh_token s_refresh_token
# h_refresh_tokenを指定
--h_refresh_token h_refresh_token
# メディアファイルだけ保存するように設定
-k image -k video -k voice
Expand Down Expand Up @@ -164,10 +168,10 @@ yay -S colmsg
`colmsg` は外部APIを叩きます。開発時はAPIのモックサーバを建てると良いでしょう。そのためのSwagger Specを配置してあります。
TODO: Swagger Specを置く

モックサーバのbase urlを環境変数 `BASE_URL` で指定することが出来ます。以下のように指定することでモックサーバ宛てにAPIを叩きにいきます。
モックサーバのbase urlを環境変数 `S_BASE_URL` , `H_BASE_URL` で指定することが出来ます。以下のように指定することでモックサーバ宛てにAPIを叩きにいきます。

```shell script
$ BASE_URL=http://127.0.0.1:3100 cargo run -- --help
$ S_BASE_URL=http://127.0.0.1:3100 cargo run -- --help
```

## TODO
Expand Down
17 changes: 17 additions & 0 deletions doc/changes_about_sakurazaka_and_hinatazaka_app.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# 「欅坂46/日向坂46 メッセージ」アプリを使用していた方へ

「欅坂46/日向坂46 メッセージ」アプリは2020年10月14日に「櫻坂46メッセージ」アプリと「日向坂46メッセージ」アプリに分かれました。
「欅坂46/日向坂46 メッセージ」アプリの頃からcolmsgを使用していた方には注意事項があります。

## 指定するオプションが変わります

今までは `-t` または `--refresh_token` を指定していましたが、今後は櫻坂46と日向坂46それぞれ専用のrefresh_tokenを指定する必要があります。
櫻坂46の場合は `--s_refresh_token` 、 日向坂46の場合は `--h_refresh_token` となります。

## 櫻坂46(欅坂46)の保存先が変わります

今までは `欅坂46` が付いた名前のフォルダが作成され、そこに各メンバーのメッセージが保存されていました。
今後は新たに `櫻坂46` が付いた名前のフォルダが作成され、そこに新たに各メンバーのメッセージが保存されます。
そのため、今までに保存されていた `欅坂46` フォルダの内容と今後保存される `櫻坂46` フォルダの内容が重複してしまいます。

内容を重複させたくない場合は、手動で `欅坂46` のフォルダ名を `櫻坂46` に変更してください。
5 changes: 3 additions & 2 deletions doc/how_to_get_refresh_token.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

## はじめに

以下で説明する方法によってデータ損失等が発生する可能性があります。自己責任でお願いします。
以下で説明する方法によってデータ損失等が発生する可能性があります。自己責任でお願いします。
また、以下の説明に用いている画像は「欅坂46/日向坂46 メッセージ」アプリのものですが、「櫻坂46メッセージ」「日向坂46メッセージ」共に同様の方法でrefresh_tokenは取得可能なため、適宜それぞれのアプリ用に読み替えてください。

## 外部サービス連携

Expand Down Expand Up @@ -35,7 +36,7 @@ Android 6 以前を使用している人の場合は [Androidアプリ共通の
Android 7 以降を使用している人の場合は後述するmitmproxyが動作しないため、[Genymotion](https://www.genymotion.com/)などのエミュレータを使用し、Android 6 以前の環境を作ってください。

[こちらの記事](https://qiita.com/sou_lab/items/bb06bb653b291c90bf45)などを参考にしてGenymotionにGoogle Play ストアを入れてください。
その後「欅坂46/日向坂46 メッセージ」アプリをインストールしてください。
その後「櫻坂46メッセージ」「日向坂46メッセージ」アプリをインストールしてください。
[Androidアプリ共通のデータ削除](#Androidアプリ共通のデータ削除) へ進んでください。

#### Androidアプリ共通のデータ削除
Expand Down
34 changes: 25 additions & 9 deletions src/bin/colmsg/app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,27 @@ use std::fs;

use clap::ArgMatches;
use wild;
use chrono::NaiveDateTime;

use colmsg::dirs::PROJECT_DIRS;
use colmsg::{
dirs::PROJECT_DIRS,
errors::*,
Config,
Group,
Kind,
http::client::{SClient, SHClient, HClient}
};

use crate::{
clap_app,
config::get_args_from_config_file,
config::get_access_token_from_file
config::get_access_token_from_file,
};

pub struct App {
pub matches: ArgMatches<'static>
}

use colmsg::{errors::*, Config, Group, Kind};
use chrono::NaiveDateTime;

impl App {
pub fn new() -> Result<Self> {
Expand All @@ -37,9 +43,19 @@ impl App {
Ok(clap_app::build_app().get_matches_from(args))
}

pub fn config(&self) -> Result<Config> {
pub fn sakurazaka_config(&self) -> Result<Config<SClient>> {
let client = SClient::new();
self.config("s_refresh_token", client)
}

pub fn hinatazaka_config(&self) -> Result<Config<HClient>> {
let client = HClient::new();
self.config("h_refresh_token", client)
}

fn config<S: AsRef<str>, C: SHClient>(&self, refresh_token_str: S, client: C) -> Result<Config<C>> {
let group = match self.matches.value_of("group") {
Some("keyakizaka") => Group::Keyakizaka,
Some("sakurazaka") => Group::Sakurazaka,
Some("hinatazaka") => Group::Hinatazaka,
_ => Group::All
};
Expand Down Expand Up @@ -88,11 +104,11 @@ impl App {
}

let refresh_token = self.matches
.value_of("refresh_token")
.value_of(refresh_token_str)
.map(String::from)
.unwrap_or_else(|| String::from("invalid_refresh_token"));

let access_token = get_access_token_from_file(&refresh_token)?;
Ok(Config { group, name, from, kind, dir, access_token })
let access_token = get_access_token_from_file(&refresh_token, client.clone())?;
Ok(Config { group, name, from, kind, dir, client: client.clone(), access_token })
}
}
23 changes: 14 additions & 9 deletions src/bin/colmsg/clap_app.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ pub fn build_app() -> ClapApp<'static, 'static> {
.version(crate_version!())
.global_setting(AppSettings::ColoredHelp)
.about(
"A CLI tool for '欅坂/日向坂メッセージアプリ'.\n\n\
"A CLI tool for '櫻坂46メッセージ' and '日向坂46メッセージ' app.\n\n\
Use '--help' instead of '-h' to see a more detailed version of the help text.",
)
.long_about("A CLI tool for saving messages of '欅坂/日向坂メッセージアプリ' locally.")
.long_about("A CLI tool for saving messages of '櫻坂46メッセージ' and '日向坂46メッセージ' app locally.")
.arg(
Arg::with_name("group")
.long("group")
.short("g")
.possible_values(&["keyakizaka", "hinatazaka"])
.possible_values(&["sakurazaka", "hinatazaka"])
.help("Save messages of specific group.")
.long_help("Save messages of specific group.
If not specified, save messages both of groups")
Expand Down Expand Up @@ -64,12 +64,17 @@ Use '--download-dir' to confirm the default directory.")
.takes_value(true),
)
.arg(
Arg::with_name("refresh_token")
.long("refresh_token")
.short("t")
.required(true)
.help("Set the refresh token.")
.long_help("Set the refresh token. refresh token is required.")
Arg::with_name("s_refresh_token")
.long("s_refresh_token")
.help("Set the sakurazaka refresh token.")
.long_help("Set the sakurazaka refresh token.")
.takes_value(true),
)
.arg(
Arg::with_name("h_refresh_token")
.long("h_refresh_token")
.help("Set the hinatazaka refresh token.")
.long_help("Set the hinatazaka refresh token.")
.takes_value(true),
)
.arg(
Expand Down
14 changes: 4 additions & 10 deletions src/bin/colmsg/config.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,8 @@
use std::env;
use std::ffi::OsString;
use std::fs;
use std::fs::File;
use std::io::Write;
use std::path::PathBuf;
use std::{env, ffi::OsString, fs, fs::File, io::Write, path::PathBuf};

use shell_words;

use colmsg::dirs::PROJECT_DIRS;
use colmsg::{errors::*, http};
use colmsg::{errors::*, http, dirs::PROJECT_DIRS, http::client::SHClient};

pub fn config_file() -> PathBuf {
env::var("COLMSG_CONFIG_PATH")
Expand Down Expand Up @@ -42,12 +36,12 @@ fn get_args_from_str(content: &str) -> Result<Vec<OsString>> {
.collect::<Vec<_>>())
}

pub fn get_access_token_from_file(refresh_token: &String) -> Result<String> {
pub fn get_access_token_from_file<C: SHClient>(refresh_token: &String, client: C) -> Result<String> {
let dir = PROJECT_DIRS.config_dir().to_path_buf();
if !dir.is_dir() { fs::create_dir_all(&dir)? };
let file = dir.join("access_token");
if file.is_file() { return Ok(fs::read_to_string(file)?); }
let update_token_res = http::update_token::request(refresh_token)?;
let update_token_res = http::update_token::request(client, refresh_token)?;
let mut f = File::create(file)?;
f.write_all(update_token_res.access_token.as_ref())?;
Ok(update_token_res.access_token)
Expand Down
Loading

0 comments on commit 5a5761f

Please sign in to comment.