2021年3月10日水曜日

Msxml2.ServerXMLHTTPとか

 Twitterのtsファイルの抽出するのを自動化しようと思ってそのメモ的な何か

使ってるのはHTAとVBS


with CreateObject("Msxml2.ServerXMLHTTP")
で初めて後は

on error resume next
.Open "GET", [URL],[ true/false]
.Send
e=Err.Number
ed=Err.Description
on error goto 0

必要なのはopenとsendだけ。ほかの青コードは正常にいかない時用為。

「.open」の第2引数は「true:非同期」、「false:同期」
「.waitForResponse(数値)」はどうやらopenの第2引数はtrueじゃないとうまく動作しないっぽ。
「.readyState」は
状態説明
0UNSENTクライアントは作成済み。open() はまだ呼ばれていない。
1OPENEDopen() が呼び出し済み。
2HEADERS_RECEIVEDsend() が呼び出し済みで、ヘッダーとステータスが利用可能。
[.status]を使うにはここまでこないとダメッぽ?
3LOADINGダウンロード中。responseText には部分データが入っている。
4DONE操作が完了した。(処理が成功または失敗になった状態)
ただまぁ、チェックしてた所なんか.readyStateが1でもデータが取得出来た時がありよくわからない。

バイナリデータは「.responseBody」で受け取る。
入手したデータはADODB.Streamでファイルとして生成する。



基本的には問題無いのだが問題になるとすれば
非同期では
「この操作を完了するのに必要なデータは、まだ利用できません」
「-2147012739:セキュリティで保護されたチャネル サポートでエラーが発生しました」
の発生。
ぶっちゃけた話時間を置くと通ったりする。
ただまぁどのタイミングで繋がるのかよくわからない。
-----
んー同期通信GETfalseだと高確率で戻ってこない。URL直入力だと一瞬で返ってくるのに。理由が分からない。
非同期通信GETTrueにして駄目だったらURL手でいれた方が早くてもやもやが爆発しそう。
-----
・高画質ロード出来ない問題
4秒の動画の高画質がロード出来ない事件発生。
基本的にtsファイルは3・4秒おきのデータになっている。そして映像を最大化表示したさいに高画質のtsが読み込まれるようにm3u8のリストを読み込む・・・だがキャッシュがある場合それを読み込む。結果的にロードの瞬間低画質のリストを既に全てキャッシュしてしまい高画質の切り替えがされないという事態に・・・。
なにこれどうすればいい・・・。
→リストファイルをロードするリストファイルから高画質リストを取得
tsロードファイルリストの前にリストをロードするリストがある。
なのでリストのリストからURLを見つける。
中身は480x270、640x360、1280x720のリストだったので最後のをベタ打ちで取得
----
htaが固まるので同期DL処理をVBSの外部ファイルにしてCscriptで非同期キックするように変更。GETの送信時にエラーが出た場合同じ内容のGETを再度投げ続けるようにしたんだけど無限ループさせてる際にもう一度同じのを投げてDL出来たりしたのでMsxml2.ServerXMLHTTPの生成時点で駄目なのか一度ミスったらもうMsxml2.ServerXMLHTTPオブジェクトが死んでしまうのかどっちか??

だとすればミスったらMsxml2.ServerXMLHTTPの生成からやり直してリトライループ

0 件のコメント:

コメントを投稿