Biblibiliビデオ投稿インタフェースを分析し、Pythonで自動投稿機能を実現します。


B駅のビデオリリースインターフェース分析
プロジェクトの住所:https://gitee.com/nbody1996/bilibili_video.uplloader
動画のアドレス:https://www.bilibili.com/video/BV1qt4y1v76u/
登録Cookiesを取得する
ログイン成功後にキーCookiesを持っていると、B駅のバックグラウンドに登録された状態と見なされます。
研究では、次の二つが必要です。
  • SESSDATA
  • bili_jct(CSRF攻撃防止)
  • この2つは、ブラウザ開発者ツール(F 12)で見られます。例えば、Googleブラウザで:

    この二つの値をコピーして、次の要求の中でcookiesはこの二つの値を持って登録状態を維持することができます。
    ソリューション:
  • は、後の要求セッションにおいてrequests.Session.cookies = requests.utils.cookiejar_from_dictにCookiesを設定することができる。
  • は、requests.Session.headers = {'User-Agent':'???'}でUAを設定することができ、その後の要求セッションにおいて
  • を維持することができる。
    preuplad事前アップロード
    要求方法:  GET要求インターフェース:  https://member.bilibili.com/preupload要求体:

    応答体:

    要求体ソリューション:
  • nameパラメータは、os.path.basenameまたはpathlib.Path.name によって
  • を得ることができる。
  • sizeパラメータは、os.path.getsizeまたはpathlib.Path.stat().st_sizeによって
  • を得ることができる。
    step 1動画をアップロードします。
    要求方法:  POST要求インターフェース:  https://upos-sz-upcdnbda2.bilivideo.com/[upos_uri][upos_uri]preupload の応答体のupos_uriの後の部分、たとえばupos://要求ヘッダ:

    要求体:

    応答体:

    Step 2バッチアップ動画
    重い難点
    要求方法:  https://upos-sz-upcdnbda2.bilivideo.com/ugcboss/m201010a23h35mci3cejzh2xe4a6gwq1.mp4要求インターフェース:  PUT要求ヘッダ:  step1 要求体(二つの部分に分けて)


    要求体ソリューション:
    パラmsパラメータは step1 パラメータで伝達され、requests.put paramspayloadパラメータで伝達される。
  • requests.put data総バッチはchunksパラメータに基づいて計算され、preupload chunk_sizeを介して上方に整理された。math.ceil(filesize/chunk_size)を得た後、chunkspartNumberの2つの
  • はサイクル中で変更される。
  • 内蔵関数chunkは、ビデオファイルIOストリームを取得する。open方法で指定サイズのビデオバイトを取得し、現在のバッチバイト数read(size=chunk_size)パラメータを内蔵関数lenで取得する。size方法は、現在のバイト位置を取得し、対応するtellstartパラメータ
  • に対応する。
  • は、endpartNumberchunkchunkssizestartendのパラメータ
  • をループで変更する。
  • は、readが読み出したバイトをrequests.put dataパラメータで
  • に渡す。
    Step 3アップロード完了をお知らせします。
    要求方法:  POST要求インターフェース:  step1 要求ヘッダ:  step1 要求体(二つの部分に分けて)

    PS:上の図には枠を使ったパラメータがなく、全部固定しています。

    要求体ソリューション:
    json形式の要求体は、requests.post jsonパラメータで伝達されてもよい。
    ポーリング動画のカバーを取得します。
    要求方法:  GET要求インターフェース:  https://member.bilibili.com/x/web/archive/recovers?fns=[bfilename]注意[bfilename]をB局のビデオファイル名に置き換えます。
    応答体:

    解決策:B局のバックエンドがカバー画像を処理するのを待つため、このステップは、応答体のdataフィールドが空のリストでないときにポーリングを終了するまで、時間をおいてインターフェースにアクセスする必要がある。
    推奨パーティションを選択
    要求方法:  GET要求インターフェース:  https://member.bilibili.com/x/web/archive/typeid要求体:

    PS:
  • groupidは何のために使うのか分かりません。今のところ固定できるのは0か1
  • です。
  • vfeaは何をするか分かりません。空の文字列でいいです。
    応答体:

    推奨ラベルを選択
    要求方法:  GET要求インターフェース:  https://member.bilibili.com/x/web/archive/typeid要求体:

    応答体:

    PS:リスト導出式でラベル文字列をリストに保存し、文字列joinでスティッチングすることができます。
    プリリリース
    要求方法:  要求インターフェース:  GETPS:何も言いませんでした。直接https://member.bilibili.com/x/geetest/pre/addというリンクです。応答体もあまり役に立ちません。
    動画を投稿
    前の「五関を越えて六将を斬る」を経て、いよいよ最終ステップです。
    要求方法:  get要求インターフェース:  POST注意置換リンクにおけるhttps://member.bilibili.com/x/vu/web/add?csrf=[bili_jct]パラメータはcsrfである(最初に必要な二つのCookiesのうちの一つ)
    要求体(JSON):

    自制タイプのビデオ要求体は上の図とは少し違っています。
  • SOurceは転載タイプのビデオに対して針だけですので、自制タイプのビデオはこのパラメータを携帯する必要がありません。
  • にinteractiveパラメータが追加されました。0または1の値を取ります。視聴者の字幕投稿を許可することに関連しているようです。
  • ノ_が追加されましたreprintパラメータは、0または1の値をとり、自制声明と関連があるようです。
  • 最も重要なのは著作権を宣言するので、copyrightを変えて1で
  • になります。
    完全コード
    Talk is chap,Show me the code

    これを押す: https://gitee.com/nbodyfun/bilibili_video.uplader/raw/master/bilibili_up.py
    ここでBiblibili動画投稿インタフェースについて分析し、Pythonで自動投稿機能を実現した文章を紹介します。もっと関連のPythonが自動投稿内容を実現しました。以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。