onihusube / 2chAPIProxy

2ch(5ch)のAPI未対応専ブラに代わってAPIアクセスや書きこみを行うローカルプロクシ
MIT License
32 stars 6 forks source link

UA別プリセットの検討 #8

Closed onihusube closed 1 year ago

onihusube commented 2 years ago

基本構想

preset.yamlのようなファイルを導入して、ここにUA別にプリセットを書いておいて読み込ませて使用するようにするとする。

- style
  - UA : Monazilla/1.00 JaneStyle/4.23 Windows/10.0.19044
  - Appkey : ****
  - HMkey : ****
  - PostFiledOrder : submit&FROM&mail&MESSAGE&bbs&key&time
  - ThreadPostFieldOrder : submit&FROM&mail&MESSAGE&bbs&key&time
  - NonceType : Sec
  - RefererType : Board
  - KeepAlive : false
- mate
  - ...

みたいな構文を想定。

BoardSettings.yamlの各設定には新しいPresetのようなプロパティを追加して、これによって板毎に参照するUA設定を制御する。

検討項目

2 #6

ご意見等ありましたらご自由にどうぞ

onihusube commented 2 years ago

参考になるかもしれない要望等

yaml2つ読んでくれるようにならないかな _default : だけxmlの方に保存でもいいけど pink と 板別設定は一律だけど _default : だけはkeyと結び付いてるので

余所規制と同じ状態になって来たのでやっぱ板別設定出来るようになって欲しいな 設定別に多重起動しておいて専ブラ側で手動でポート切り替えるのはちょっと手間。切り替え忘れて鍵無効なるし

UAのWinVerとか泥のDalvikを複数登録しておいて書ける組み合わせを自動で探して板別設定として保持してくれたら完璧 その際、不正取得なったらこれも自動でIP変えてくれたら神 IP変えられるかどうかは契約回線サービス次第だけどIP変更してくれるソフトとかあるから技術的に不可能てことは無いと思うんだが

ただ、新しい書き込み仕様の噂も立ってるから使い回せなくてガックリ来るような機能の実装は避けた方が良いだろうけど板別の機能は無駄にはならないと思うんよね 作者さん頼りで申し訳ないが頑張って欲しい

モチベ湧かんなら寄付の窓口用意してみるとか 更に下がる可能性もあるが

onihusube commented 2 years ago

専ブラ事の新書き込み時リクエストの多様性、mateを基本とすると

onihusube commented 2 years ago

作者さんが 「UA別プリセットの検討」 を始めて下さったようです 皆さん情報提供、エールをお願いします Githubはアカウントが無いと投稿出来無いようですのでこちらに投稿させて頂きます

デメリット 設定ファイルが増える

のは各設定を整理されると思えば問題無いんじゃないでしょうか

書き込み関連設定のほとんどがUIから制御できなくなる  UIの設定は読み込みに関するもの、という分離にはなる・・・?

これです。"専ブラ←→串"間と"串←→5chAPI"間の設定の分離

UIと設定項目の重複がある

重複はなるべく避けたいですね

設定変更に再起動が必要

リロード可能な方が良いですがそれが手間なら再起動でも問題無いかと

何か気付きや参考になればと思い、素人ながらプリセット(プロファイル)仕様を考えてみました

APIKey,HMKey,書き込みやスレ立てのヘッダーとその値類をテンプレート化 "./template/2chMate_0.8.10.153.tpl" 各tplファイルのAPIKey,HMKeyを空欄にしておき、そこだけユーザーに書き込んでもらう この部分がテンプレート化するメリットとして根本的な仕様変更以外は有志による対応が可能に 今後、専ブラ毎にSIDやMonakeyの計算式が違って来たりした場合、それらもテンプレートとする事で有志に任せ本体側更新の手間を減らせられます Winver.txt,Dalvik.txtにUA後半の固有情報羅列。UIから選択時に使用 profile.ini かsettings.xml に iniの場合: [PF1] name=2chMate/0.8.10.153 Dalvik/2.1.0 (省略)#UIプロファイル選択欄に表示されるプロファイル名 type=2chMate_0.8.10.153.tpl#POSTに使用するテンプレート Dalvik=Dalvik/2.1.0 (省略)#.tplと組み合わせられるUA後半ユーザー固有機種OS等情報 key=#Monakey [PF2] name=JaneStyle/4.23 Windows/10.0.22000 type=JaneStyle_4.23.tpl Winver=Windows/10.0.22000 key= こんな感じで "テンプレート(偽装専ブラ)" + "UAのユーザー固有部分" を組み合わせプロファイル化 デフォルトや板別などをプロファイルにて指定 UIからのプロファイル作成時はテンプレートと対応した固有情報部分(Winver.txt|Dalvik.txt)をプルダウンで選択し保存 プロファイル名をそれらから自動で出力しつつユーザーが名前変更可能 テンプレート側にWinverかDalvikどちらと組み合わされるかの情報が必要

通知アイコン右クリックメニューに[プロファイル→] マウスオーバーでプロファイル名と「解除」をズラッと表示し選択で現在のプロファイルを一時的に変更 [解除]で一時変更を解除し設定してあるデフォや板別に従う、みたいな

肝心なテンプレート化のメリットとして StyleやLiveのスレなどでどこどこの板はWindows/10.0.22000では書けないけどWindows/10.0.25151では書けるといった情報が共有されており 板依存の規制ではWinver違いのプロファイルを複数用いることが想定されます 分けて居ない場合、設定データが無駄に重複して大きくなってしまいます 共通部分としてテンプレート化することで設定データをスッキリさせられます

🙏🙏🙏🙏

板毎にUAのバージョン部が異なりうると言うのは盲点だった。
板毎設定(BoardSettings.yaml)の方で指定したUAで置換するようにすれば割と自然にフィットしそう。

将来的に他の部分が変わる場合は・・・プリセットの重複を許容する?

そうなると、共通も含めた板毎設定で使用するプリセットを指定して使用するようにして、UIの書き込みUAから自動判別のやり方はなしかな

UI上でプリセットを指定できるようにする(タスクトレイのメニューも含めて)のは多分将来の方向性で、そうなると板毎設定の共通設定との兼ね合いをどうするか

onihusube commented 2 years ago

1つのプリセットに必要なプロパティ、暫定

    // nonce値の表記の指定
    public enum NonceTypeEnum
    {
        Sec = 0,
        Milisec,
        MilisecZero,
        MilisecRandom
    }

    // リファラの種類の指定
    public enum RefererTypeEnum
    {
        BoardURL,
        ThreadURL,
        ThreadURLl50
    }

    // 1つのプリセットを表すクラス
    public class PostSettings
    {
        public string UserAgent { get; set; }

        public string AppKey { get; set; }

        public string HMkey { get; set; }

        public string X2chUA { get; set; }

        public string PostFiledOrder { get; set; }

        public string ThreadPostFieldOrder { get; set; }

        public NonceTypeEnum NonceType { get; set; } = NonceTypeEnum.Milisec;

        public RefererTypeEnum RefererType { get; set; } = RefererTypeEnum.ThreadURL;

        public bool KeepAlive { get; set; } = false;

        //public string ContentType { get; set; }

        public Dictionary<string, string> Headers { get; set; } = new Dictionary<string, string>();
    }

ContentTypeの指定はヘッダ指定としてやったほうが良いかな?

こうなると、板別設定はプリセット名とUA(とお絵描き?)くらいしか指定するものがなくなり、板別共通設定はpink専用になりそう。

onihusube commented 2 years ago

monakeyの保存は現在同様settings.xmlにシリアライズして行う。

monakeyはUAとセットで扱う。その際問題になるのはDictionalyxmlselalizerでシリアライズできないこと。

そのため、(UA, monakey)のペアの列を1つの文字列としてシリアライズする。その際さらに問題なのは、ペア間の境界とペア内でのUAとkeyの境界判定。UAには任意の文字が入るし、monakeyも何か仮定できそうにない。

何かしらエンコードしてその結果に表れない文字でつないでいく

URLエンコードすることにする。URLエンコードをE(...)であらわして、次のように文字列化

E(UA1):E(monakey1)&E(UA2):E(monakey2)&...&E(UAn):E(monakeyn)
onihusube commented 1 year ago

ひとまず必要なくなったっぽい