niconicolibs / niconico.py

niconico.py is a Python library for retrieving Niconico video content and information, and is compatible with the latest version of Niconico.
MIT License
42 stars 5 forks source link

[Improvement] Add a decorating function that explicitly requires authentication #20

Closed Negima1072 closed 3 weeks ago

Negima1072 commented 2 years ago

Overview

Use Python's decorating function to distinguish whether it is an authentication-required function.

Sample

@auth_required
def get_own_information():
   ~~do something~~

Tasks

Negima1072 commented 2 years ago

is_login変数をそれぞれのclientに作ってそれを参照するのが良さそう?

tasuren commented 2 years ago

is_login変数をそれぞれのclientに作ってそれを参照するのが良さそう?

ニコニコ動画やニコニコ静画などでログインの確認方法が変わったりするのですか? だとしたらそれで良いと思います。

一応確認なんですが、このデコレータは内部で実装するというもので、ログインしている状態の確認を簡単に関数実行時に行うようにするためのもの、という認識で良いでしょうか?

Negima1072 commented 2 years ago

ニコニコ動画にログインしているかどうかを確認するすべは.nicovideo.jpにリクエストした際のレスポンスヘッダーのx-niconico-idx-niconico-authflag(生放送は非対応)のどちらかで判断するか、client内のcookieが存在するかで判断するかのどちらかなんですが、後者のほうが圧倒的に負担が少ないのでそれでいいと思います。 でvideoクラスやその他のクラスから親のclient.cookieにアクセスできるかを確認してないのでわかりませんが、アクセスできるのなら直接、できないのならそれぞれのクラスごとにis_login変数を作成するのが最適解なのかな...?と 自分がデコレータについてよくわかってないのであれなんですが、例えばログインが必須な関数である「コメントを投稿する関数」があったとします。このとき以下のように記載すればログインされていない場合Exception("ログインしてください云々")が帰ってくる感じを想定しています。 実装に関しては以下のようなものを想定しています。ただ、自分はC++畑の人間でPythonの詳しい機能はわかんないんで、なにか良い手法があれば他に提案してもらえればと思います。

def auth_required(func):
    def wrapper(~~):
        if ここでログインしているかの判定
            func(~~)
        raise Exception("~~")
    return wrapper

@auth_required
def post_comment():
    do something