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はこの二つの値を持って登録状態を維持することができます。
ソリューション:は、後の要求セッションにおいて は、 を維持することができる。
preuplad事前アップロード
要求方法:

応答体:

要求体ソリューション: nameパラメータは、 を得ることができる。 sizeパラメータは、 を得ることができる。
step 1動画をアップロードします。
要求方法:

要求体:

応答体:

Step 2バッチアップ動画
重い難点
要求方法:


要求体ソリューション:
パラmsパラメータは はサイクル中で変更される。内蔵関数 に対応する。は、 をループで変更する。は、 に渡す。
Step 3アップロード完了をお知らせします。
要求方法:

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

要求体ソリューション:
json形式の要求体は、
ポーリング動画のカバーを取得します。
要求方法:
応答体:

解決策:B局のバックエンドがカバー画像を処理するのを待つため、このステップは、応答体の
推奨パーティションを選択
要求方法:

PS: です。
応答体:

推奨ラベルを選択
要求方法:

応答体:

PS:リスト導出式でラベル文字列をリストに保存し、文字列
プリリリース
要求方法:
動画を投稿
前の「五関を越えて六将を斬る」を経て、いよいよ最終ステップです。
要求方法:
要求体(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が自動投稿内容を実現しました。以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。
プロジェクトの住所:https://gitee.com/nbody1996/bilibili_video.uplloader
動画のアドレス:https://www.bilibili.com/video/BV1qt4y1v76u/
登録Cookiesを取得する
ログイン成功後にキーCookiesを持っていると、B駅のバックグラウンドに登録された状態と見なされます。
研究では、次の二つが必要です。

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

要求体ソリューション:
os.path.basename
またはpathlib.Path.name
によって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 params
はpayload
パラメータで伝達される。requests.put data
総バッチはchunks
パラメータに基づいて計算され、preupload chunk_size
を介して上方に整理された。math.ceil(filesize/chunk_size)
を得た後、chunks
、partNumber
の2つのchunk
は、ビデオファイルIOストリームを取得する。open
方法で指定サイズのビデオバイトを取得し、現在のバッチバイト数read(size=chunk_size)
パラメータを内蔵関数len
で取得する。size
方法は、現在のバイト位置を取得し、対応するtell
とstart
パラメータend
、partNumber
、chunk
、chunks
、size
、start
、end
のパラメータ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
でスティッチングすることができます。プリリリース
要求方法:
要求インターフェース: GET
PS:何も言いませんでした。直接https://member.bilibili.com/x/geetest/pre/add
というリンクです。応答体もあまり役に立ちません。動画を投稿
前の「五関を越えて六将を斬る」を経て、いよいよ最終ステップです。
要求方法:
get
要求インターフェース: POST
注意置換リンクにおけるhttps://member.bilibili.com/x/vu/web/add?csrf=[bili_jct]
パラメータはcsrf
である(最初に必要な二つのCookiesのうちの一つ)要求体(JSON):

自制タイプのビデオ要求体は上の図とは少し違っています。
完全コード
Talk is chap,Show me the code

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