(´・ω・)ノ < らいなーです。
Android13以降のAndroid端末で、
cURLが塞がれているケースがあり、
シェルスクリプト絡みでトラブルになっているケースが発生している場合があるようなので、
対処例のひとつとして書いておきます。
さて、
まずはサンプルマクロ全体を見てみます。
サンプルのマクロでは、TP-LINKさんのルーター、C1200のサポートページから、ルーターのファームウェアzipファイルをダウンロードします。
【ダウンロードURLの末尾のファイル名称だけを抽出するには?】
ダウンロードURLの末尾のファイル名称のみを抽出しておき、ファイル保存時の名称として利用する必要がありますね。
このような場合は「文字列処理」アクションで正規表現を使いつつ、抽出します。
「対象文字列」欄に、ダウンロードURL全体を指定して(サンプルではダウンロードURLをConst値として変数に持たせているので、ローカル変数のマジックテキストを指定して)、
「一致する文字列(正規表現)」欄には
.+/(.+?)([?#;].*)?$
を入力。
そして「グループ1」のラジオボタンを選択します。
細かくは説明しませんが、当該正規表現では文字列のグルーピングをしていて、そのグルーピング内のはじめのグループに「ファイル名称部分」が格納されるため、グループ1を態々指定してあげる必要があります。
面倒なら正規表現の部分
[^/]+$
でも良いかもしれませんねぇ。
これでも末尾は拾えるような?
まぁ厳密にやってるよ、ということで。
【HTTPリクエストでどうやってファイルを保存するんじゃい!?】
リクエストメソッドをGETにして、
URLにはファイルダウンロードのURLをまるっと貼り付けて…
「HTTPレスポンスをファイルに保存する」オプションを利用して、保存先フォルダを予め選択しておき、任意のファイル名を「ファイル名」欄に記述します。
「ファイル名」欄にはマジックテキストが使えますから、例えばa.zipと固定て指定してもファイルを保存することは出来るのですが、オリジナルのファイル名を損なう事になってしまいますから、オリジナルのファイル名をまるまる残したければ、何処か別な変数領域などに「オリジナルのファイル名」を保管しておいて、名称指定時に利用するしかありません。
前段の正規表現うんぬんの部分は、その事前準備をしていた、というわけですね。
【URLエンコードの問題をどうするか?】
では、
ファイル名を「ダウンロードURLのまま」抽出してみましょう。
↓結果はこちら。
余計な%の付いた文字列が含まれてしまっています。URLエンコードですね。
インターネットのアドレスには使えない文字列があり、そうした文字列はURLエンコードという処理によって「予め変換がなされて」います。%20うんぬんは、半角スペースのことですね。
これを何とかしないといけません。
が、
Macrodroid単体だと、実はどうしようもありません。
そんなアクションは2024年07月27日現在の最新ベータ版v5.47.5にもありません。
じゃあどうすんの?
→Javascriptを使うんだよ!
と。
JavascriptのdecodeURLクラスにダウンロードURLを喰わせて、予めURLデコードしておきます、と云うのが解決策となります。
これで、オリジナルのファイル名を保ったまま、「HTTPリクエスト」アクションを使って、ファイルダウンロードをすることが出来るようになりました。
記事は以上です。
ご参考までに!
ここまでお読み下さりありがとうございました。