もう一人のY君

iPhoneアプリのレビューやアップデートレビューなどを書いています. たまに数学の記事も書きます.

もう一人のY君 MENU  MENU

【iPhoneショートカット】壁紙の好きな場所に文字を書く

f:id:thetheorier:20210901140809p:plain

 前回は透過画像を使った強引なやり方でした.

 こっちも面倒な問題がありますが前回より遙かに汎用性が高いです.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のiOSバージョン : iOS14.7.1

 

 

スポンサーリンク

 

 

 

ダウンロードと使い方

routinehub.co

 

 

f:id:thetheorier:20210901141029p:plain

 今回のレシピは関数型になっています.

 本レシピとは別に新規のレシピを作成し, パラメータとなる「辞書」アクションを入力として本レシピを実行する形式になっています.

 

 

 「辞書」アクションに必要なキーと値は以下になります.

 

  • txt
     本文となるテキストです。上のように「テキスト」アクションに書いて値にしたり, 他の処理の結果を入れてもいいです。html5を使用しているため、基本的な装飾タグに対応しているはずです。
  • color
     テキストの文字色です。カラーコードを使用する場合は先頭に#が必要です。
  • font-size
     テキストの大きさを指定します。デバイスの画面画素数によって相対的に変わるので以下のpaddingを含めて何度か試して調整して…を繰り返してください。
  • padding-left
     テキストの左端の位置を指定します。単位はpx。「壁紙の枠」を越えない値にしてください。
  • padding-top
     テキストの上端の位置を指定します。上に同じ。
  • image
     壁紙をBASE64エンコードしたものをここに入れます。
  • type
     使用しているiPhoneの画面画素数に応じた値を入れます。例えばiPhone12 Pro Maxの画面画素数は1284×2778ピクセルなので1284x2788とします。
     「幅」「高さ」の順に、かつ間に半角アルファベットのxを入れます。
     「壁紙を設定」アクションの使えるiPhoneを考えると、執筆時点で以下の9種類と思われます
    • 1284x2778
    • 1242x2688
    • 1170x2532
    • 1125x2436
    • 1080x2340
    • 1080x1920
    • 828x1792
    • 750x1334
    • 640x1136

 

 

f:id:thetheorier:20210901143001p:plain

 パラメータとなる辞書を作ったら、これを入力として本レシピを実行します。

 本レシピはテキストを書き込んだ画像として値を返すので、実際に壁紙として設定するのは本レシピ外です。

 

 以上、シンプルに文章を書くだけならメインのアクションはこの6つになります。

(後半の視差効果のオンオフは不具合回避なので本来なら4つ)

 

 

応用

 上の場合は文章一つでしたが、異なる場所に異なる色、大きさで書きたい場合もあります。

 その場合は本レシピの結果をBASE64エンコードし、これを使って必要な条件で更に本レシピを繰り返せばよいです。

 

 

 

(蛇足)レシピについて

 今回はRedditのとある投稿を参考にして作成しました(がソースが消されたようで今は見れません).

 似たようなアイデアは他でも見られます, ようはhtmlで記述し, PDF化→画像化→壁紙として設定…という流れです.

 

 

f:id:thetheorier:20210901144153p:plain

 しかし厄介なことに, htmlで書くまではいいのですがこれをPDFにすると上のように余白が生まれます.

 他のやり方でもやはり余白ができてしまい, このままでは壁紙にしてもズレたり余白が丸見えになってしまいます.

 

 

 

f:id:thetheorier:20210901144522p:plain

 例えばiPhone8で実行した結果(PDFを画像化した時点)でのものはこの画像の通り, 左と上にそれぞれ26ピクセル分の余白があります.

 

 

 

f:id:thetheorier:20210901144740p:plain

 さらに厄介なことに, PDFにした影響…いやhtmlで書いたせいでしょうかね、画像化した結果は元の壁紙として用意した画像のサイズと一致しません.

 上の場合はiPhone8に合わせて750×1334ピクセルの画像をBASE64エンコードして使っていますが, html→PDF→画像化の結果2251×4448ピクセルになってしまいます.

 2251は750の3.001333...倍、4448は1334の3.334332…倍と, 縦横の倍率は同じではありません.

 そしてこの倍率もiPhoneの種類によって恐らく変わります. 画像化されたときの上で定めたtypeごとの左と上の余白、そして幅と高さはショートカット上で調べたところ以下となりました(なおこれは「イメージを切り取り」で代入する値でもあります).

 

  X座標
(左余白) 
Y座標
(上余白) 
幅  高さ 
1284x2778   16 16   2409 5789 
1242x2688   16 16   2330 5601 
1170x2532   17  17 2280  5483 
1125x2436   18  18 2280  5484 
1080x2340  18  18  2279  5486 
1080x1920  18  18  2279  4501 
828x1792  24 25  2273  5470 
750x1334  26  26  2251  4480 
640x1136  26  26  1919  3786 

 ただ上で書いたとおりiPhone8上で試験したもののため, 実際に対応する機種でこの通りにしてピッタリ壁紙部分だけ切り取れる保障はありません.

 

 しかし切り取りさえできれば, 縦横の倍率の違いを無視できる「イメージのサイズを変更」で元の壁紙のサイズにリサイズできるためここは問題ありません.

 

 

レシピ

 というわけで上を踏まえてレシピを作ります.

 

 

f:id:thetheorier:20210901150628p:plain

 ひとまず壁紙の違いをベースに, 壁紙の幅と高さ, そして上で書いた通り拡大された画像の余白と縦横の長さの組を予め「辞書」アクションで組んでおきます.

 

 

f:id:thetheorier:20210901150859p:plain

 例えば1242x2688の場合は画像の通りです.

 上で書いた表の内容を辞書として追加しておきます.

 

 

 続けてhtmlを記述…といいたいのですが, その準備として以下の3つを行います。

 

①テキスト本文の改行処理

②typeとして与えたiPhoneの余白や拡大後の縦横の長さの値を含む辞書を指定

③壁紙として指定したBASE64コードをデコードし, リサイズしてから再エンコード

 

 ③を行うのは, 用意した壁紙の大きさやアスペクト比を揃えるためです.

 

 

f:id:thetheorier:20210901151024p:plain

 続いて「ショートカットの入力」, つまり今回は別に作成したレシピで予め約束した形式で入力として「辞書」アクションを本レシピの「ショートカットの入力」として受け取ります.

 このままだと「テキスト」アクションで行った改行はhtml上では無視されてしまうので, 「テキストを結合」で改行を<br>にします.

 

 

f:id:thetheorier:20210901151711p:plain

 続いて余白などを指定するためのtype値を取得します.

 「ショートカットの入力」で渡された辞書のキーtypeの値を使い, 本レシピ先頭の辞書の対応する値を取り出せば, 対応する端末の余白や拡大後の幅と高さの値が手に入ります.

 この辞書を改めてtypeとおきます.

 

 

f:id:thetheorier:20210901152045p:plain

 そして「ショートカットの入力」で得た辞書に含まれる壁紙のキーimageの値をデコードし, 一度画像化してから各iPhoneの正規のサイズにリサイズしてから再びエンコードします.

 

 これでhtmlを書く準備ができました.

 

 

f:id:thetheorier:20210901152839p:plain

 というわけでhtml本文がこちらです.

 拘る人はもっとイイカンジにするでしょうね.

 

 いくつか補足するなら以下になります.

 

    • font-famly
       フォントを指定する箇所でここではAvenirになっています。他のフォントが良いときは書き換えましょう。
       書く場所によってフォントも変えたい場合はここもパラメータとして受け渡しする必要があります。
    • <img src"data:image~~~ style="width:90%;"
       この90%の値は作成する壁紙そのものの大きさを(相対的に)指定しており, typeの幅と高さはこの値に依存しているため基本的に変更せずそのままにしてください。

  現時点ではこれでいいのですが, 今後より画面画素数の大きいモデルが登場した場合、この方法だとPDF化した時点で全体の右側が見切れてしまう恐れがあります.

 実際現時点でも, この横幅を100%にすると最新機種を含め一部のtypeが見切れてしまい, PDF化で「すべてを含める」にしてもダメだったため, やむなく90%にして対応しています.

 しかしこれもiPhone8で行っていることが影響している可能性がゼロではありません.
 もしそれが事実なら, 最悪typeとして用意した余白や縦横の長さすら別の機種では異なる可能性もあってまあ困ったことです.

 本文の位置調整同様何度も繰り返して見つけるか, 僕が実際に行ったようにPDF→画像化したものを一旦パソコンのイラストソフトでピクセル測定して値を求めるのが一番ではあります.
 その辺はスマホが苦手とする分野なので仕方ありませんね.

 

 

 

f:id:thetheorier:20210901154835p:plain

 なにはともあれ, 書き込んだhtmlテキストを「HTMLからリッチテキストを作成」で変換し, これを更に「PDFを作成」でPDFにします, ただし今回は上で書いた通り縦横拡大されてしまい1ページで収まらないため「含める」を「すべてのページ」にしておきます.

 そしてこの結果を「入力からイメージを取得」で画像にします.

 

 

 

f:id:thetheorier:20210901155119p:plain

 しかしまだ余白と大きさの調整が残っています.

 「イメージを結合」で縦方向に画像を繋げ(もちろん間隔は0), 「イメージを切り取り」で必要な部分だけ切り取ります.

 位置を「カスタム」にし, X座標、Y座標、幅、高さの4項目を辞書「type」の値からそれぞれ代入します.

 最後に切り取った画像を辞書typeにある対応するiPhoneのデフォルトの幅と高さにリサイズします.

 

 これで本レシピの処理は完了です.

 

 

 

 アクション数こそ20個と少ないですが, 不確定要素のせいで強引なところがあります.

 

 これを使ったオートメーションもちゃんと動作するのを確認しています.

 ちゃんと使えさえすればとても便利です.

 

 

 

【iPhoneショートカット】解析ログのヒートマップデータ

f:id:thetheorier:20210819080501p:plain

 ヒートマップのどういう値なのか…がまだよくわかっていません.

 とりあえず「そういうものがあるよ」という紹介記事です.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のiOSバージョン : iOS14.7.1

 

 

スポンサーリンク

 

 

 

解析ログのヒートマップ

blog.thetheorier.com

  バッテリーのサイクル数や寿命を取得するのにも使っている解析ログですが, 見ればわかる通り他のデータもたくさん存在します, アプリを開いた回数とか充電した回数とか.

 大抵はそこまでして見るものでなかったり, よくわかっていないものばかりです.

 

 

f:id:thetheorier:20210819081600p:plain

 その一つがヒートマップです.

 ただしこれも日によってデータ自体がなかったりします.

 画像の通りバッテリー(mV)とCに応じて値が書かれていますが, CがCレートのことなのか電荷のことなのかもよくわかりません(前者だと思うんですけどね).

 画像では12項目分ほど写っていますが実際にはもっとあります.

 

 ただこんな数字の羅列ではイメージしづらいです.

 ヒートマップなんですからヒートマップとして画像化したほうがわかりやすいはず.

 

 

充電

 解析ログデータはある程度の期間持っているので, 適当な期間を空けて3つずつ, 充電と放電をそれぞれ作ってみました.

 具体的には2021年1月1日と同じ年の6月2日, そして8月2日です.

 選んだ理由は適当です.

 

 まずは充電から

 

 

f:id:thetheorier:20210819082500p:plain
2021/1/1 充電ヒートマップ 

 30-35C, 4100-4200mVをトップに周囲の値が目立って大きいですね.

 4330-4350mV辺りも若干値が大きいです.

 

 

f:id:thetheorier:20210819083201p:plain
2021/6/2 充電ヒートマップ

 次は6月2日です.

 1月1日と比べて4000mV周辺の値が激減し, 代わりに4330-4350mV帯が大きくなっています.

 しかし値を見ると後者は大きく変わっていません.

 充電の方なので充電環境によるものでしょうかね.

 

 

f:id:thetheorier:20210819083538p:plain
2021/8/2 充電ヒートマップ

 8月2日のものです.

 値の高層が4100-4200mV周辺に戻りました.

 

 

 

放電

 次は放電です.

 

 

f:id:thetheorier:20210819084041p:plain
2021/1/1 放電ヒートマップ

 まずは2021年1月1日から.

 25-30C, 3900-4100mVを中心に分布しています.

 

 

f:id:thetheorier:20210819084321p:plain
2021/6/2 放電ヒートマップ

 次は6月2日.

 1月1日と大きく変わりませんがC値が15-25C辺りに移動しています.

 値が全体的に小さいのも気になります.

 

 

f:id:thetheorier:20210819084623p:plain
2021/8/2 放電ヒートマップ

 最後に8月2日.

 1月1日のものに近いように見えますが中心部分が更に大きくなっています.

 

 放電のヒートマップなので利用状況を反映しているとは推測されます.

 最初はこれらの値の合計がその日の秒数や分数と推測したんですが, 実際の合計時間はそこから余りにも外れたものであったため違うようです.

 

 

 普通は我々エンドユーザーが見るものでないためわからないのは仕方ないと言えば仕方ありません.

 それでもサイクル数やバッテリー寿命以外に有益なデータがあれば知りたいものです.

 

 

【iPhoneショートカット】Webサイトを横断する

f:id:thetheorier:20210819072512p:plain

 頻繁にアクセスするサイト, あると思います.

 ブラウザのお気に入りやブックマークでもいいんですがショートカットを利用すればもっと使い勝手の幅が広がります.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のiOSバージョン : iOS14.7.1

 

 

スポンサーリンク

 

 

 

(1)順番にアクセスする

 まずは指定順にアクセスする方法から.

 

 

f:id:thetheorier:20210819072740p:plain

 まず「辞書」アクションを追加し, キーにそのWebサイトのタイトル(好きな名前でOK), 値にそのWebサイトのURLを追加します.

 上から順番に移動するため希望の並びにしておきます.

 

 

f:id:thetheorier:20210819073142p:plain

 「各項目を繰り返す」アクションで上の辞書のすべてのキーに対して処理を行います.

 上の辞書から繰り返し項目に対応する値, つまり各々のWebサイトタイトルに対応するWebサイトのURLを取得し, 「Webページを表示」でページを開きます.

 通常なら「URLを開く」を使うかもしれません, しかしこれだと状況によってショートカットに戻れなくなるため今回はこれを使います.

 

 レシピはこれで完結です.

 

 

f:id:thetheorier:20210819073754p:plain

 次のWebサイトへ移動するには画面右上の「完了」をタップします.

 この「Webページを表示」アクションはレシピ起動のもとで使用している扱いのため, ここから別のリンクを踏んだりして28秒以上経過しても問題なく次のアクションに以降します.

 

 

(2)希望のサイトに何度もアクセスする

 (1)の場合は指定順にアクセスし終えたらレシピは終了してしまいます.

 しかしどのサイトとどの順にアクセスするかはその時々で変わるものです.

 というわけで少し変更します.

 

 

f:id:thetheorier:20210819074503p:plain

 まず(1)と同様, 利用したいWebサイトのタイトルとURLの組を「辞書」アクションに追加しておきます.

 今回は自由に選択する仕様にするため, 選びやすい(タップしやすい)順番にするとよいです.

 

 

f:id:thetheorier:20210819074637p:plain

 上の辞書のすべてのキーに対して「リストから選択」アクションで1つ選択させます.

 プロンプトに複数行テキストを適用しているのは見栄えのためで必須ではありません.

 

 

f:id:thetheorier:20210819074826p:plain

 「リストから選択」で選んだのは最初の「辞書」のキーなので「辞書の値を取得」でその値を取得したものは対象のURLです.

 よってこれを「Webページで表示」で表示させます.

 最後に「ショートカットを実行」で自分自身を呼び出します.

 

 レシピは以上です.

 

 

f:id:thetheorier:20210819075133p:plain

 こうして作ったレシピは, まず予め「辞書」に入れておいたWebサイトを選択させてアクセスし, 画面左上の「完了」をタップするとレシピが再び呼び出されるのでWebサイトの選択画面に何度も戻ります.

 終了したいときは例えばホームボタンを押したり, 選択画面のポップ外(画像左の青枠部分)をタップ, あるいは画面右下のアイコンをタップしてSafariへ移動することで抜けることができます.

 

 

 よくあるPay系を開くレシピを少し変えたようなものですね.

 

 

 ただし「Appを開く」なりURLスキームを使うなりしてアプリへ飛んでしまうと, 今回と同じように次へ移動することはできません.

 あくまでもWebサイトのみ可能なやり方です.

 

 

【iPhoneショートカット】アルファベット大文字・小文字を区別せず検索する

f:id:thetheorier:20210729173234p:plain

 出来てよかったこと, 悪いこと両方あります.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のiOSバージョン : iOS14.7.1

 

 

スポンサーリンク

 

 

 

正規表現を利用

blog.thetheorier.com

 過去に投稿したレシピでの最大の問題なのがこの大文字小文字検索です.

 「ファイルにフィルタを適用」はiOS14以降で改悪されたリスト検索の代わりとして貢献したものの, 唯一の欠点がこの大文字小文字の区別です.

 

 このアクションでは大文字小文字の区別を行い, かつ無視するよう変更することができません.

 なので例えば"Twitter"をtwitterで検索シても結果は出てこないのです.

 

 そのため上記レシピではやむを得ず元データの辞書のキーにあたるすべての文字のアルファベットを小文字に直してから配布し, 「入力を要求」で入力した文字列を小文字に直してから配布データで検索する仕組みです.

 

 当然ですが通常大文字を含む「見た目」に慣れている場合, すべて小文字だとどうしても違和感を覚えるものです.

 しかし現時点ではこれ以上の改善案は思いついていませんでした, メニューやリストからの選択で項目数が増えると一気に動作が重くなるため, その手法が使えなくなったのが前回のUSLauncherでした.

 

 

大文字小文字を区別せず検索

 というわけで今回思いついた, 大文字小文字を区別せず検索する方法です.

 

 

 

f:id:thetheorier:20210730074036p:plain

 元データをどうするかは色々あると思います.

 今回は辞書を使うこととします.

 与えた辞書のすべてのキーに対し, 「テキストを分割」で改行で分割します.

 

 

f:id:thetheorier:20210730074218p:plain

 「入力を要求」で検索ワードを入力させます.

 これを使い, 「一致するテキスト」で

 

.*指定入力.*

 

にマッチさせます.

 正規表現 .* は先日の記事でも紹介したように, 0文字を含む任意の文字を意味します.

 つまり「入力を要求」で指定した文字を含む行をマッチさせることが可能です.

 

 ここで「一致するテキスト」の「大文字/小文字を区別」を必ずオフにします.

 これが今回の肝心な部分です, 「ファイルにフィルタを適用」で区別ができないことの代案となります.

 

 あとは例えば「リストから選択」で一つなり複数を選ばせます.

 実際にはその先に何かをするわけですが今回は大文字小文字の区別をせず検索することが目的なので省略します.

 

 

実行

f:id:thetheorier:20210730075130p:plain

 これで入力した文字列を, 大文字小文字の区別無しに選ぶことができます.

 

 

f:id:thetheorier:20210730075748p:plain

 入力側が大文字でも同じ結果になります.

 

 

 これを利用して先程紹介したUSLauncherにも適用できると期待していたのですが, キーを取得する時点でレシピが落ちてしまいました.

 どうやら扱う文字数が多いとこの手法ではダメのようです.

 

 ちなみに

 

<key>1</key><string>1</string>
<key>2</key><string>2</string>
<key>3</key><string>3</string>

 

というシンプルな形式で試したところ, 2230行まではOKで2231行からレシピが落ちるのを確認しました.

 2230行以下であればこの方法で大文字小文字の区別なく検索できるというわけですね.

 

 というわけでUSLauncherの改善はお預けになってしまいました…

 

 

【iPhoneショートカット】JTWCの台風情報を取得する

f:id:thetheorier:20210729160645p:plain

 指標の一つとして有益な情報です.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のiOSバージョン : iOS14.7

 

 

スポンサーリンク

 

 

 

ダウンロード

www.icloud.com

 

 

米JTWCの台風情報

www.metoc.navy.mil

 台風情報と言えば気象庁ですが, 軍用地などの資産を守る一手段として, 米海軍および陸軍合同で設立した機関があり, そこで提供されているのがこのサイトです.

 目的が異なるため, 同じ台風情報でもこちらについては中心気圧についての情報はありませんが速報具合や予測進路についてはこちらに分がある印象です(個人的な感想です).

 

 

f:id:thetheorier:20210729161316p:plain

 サイトにアクセスすると, タイあたりを中心とした地図があり, 台風やその「卵」があると危険度などに応じて表示され, 各々の詳細はページ右から確認できます.

 

 

f:id:thetheorier:20210729161512p:plain

 台風が発生するとページ右に情報が表示されます.

 ここでは全部紹介することはしませんが最低限知っておくとよいものとして

 

  • TC Warning Text
  • TC Warning Graphic

 

があります.

 

 

f:id:thetheorier:20210729161649p:plain

 順番が逆になりますが, TC Warming Grapgicでは台風の予想進路をマップ画像で確認できます.

 こちらにも情報が略記されていますが全体でgif画像になっているためテキストとして取り出すことはショートカットではできません.

 

 

f:id:thetheorier:20210729161915p:plain

 今回使用するのはTC Warning Textの方です.

 ここでは台風の基本情報と進路予想時の位置や風速などの情報が書かれています.

 ここにあるテキストから欲しい情報を取り込むのが今回の目的です.

 

 

f:id:thetheorier:20210729162120p:plain

 テキストをもう少し見てみます.

 280600Zというのは時刻を表しており, この場合28日06時00分を意味しています.

 ただしこれは標準時であるため, 日本時間にするには9時間足す必要があります, なのでこれは日本時間で28日15時00分ということになります.

 その後ろにある39.5N 140.3Eは位置を表しています, 秋田県大仙市あたりですね.

 次の行にあるMAX SUSTAINED WINDSは最大風速, GUTSは最大瞬間風速の値です.

 各々の風速の単位はノットですから, 我々日本人が慣れ親しんでいる風速単位であるm/sに直さないと分かりづらいので計算する必要があります.

 

 よって, 今回は各時刻における最大風速と最大瞬間風速をm/sで取得することを考えます.

(位置情報は数値で見て分かる人はほぼいませんし, そこまでするならTC Warning Graphicを見たほうが早いので割愛します)

 

 

レシピ

 では実際にレシピを見ていきます.

 

 

f:id:thetheorier:20210804143008p:plain

 JTWCにおけるTC Warning TextのURLは

 

https://www.metoc.navy.mil/jtwc/products/wpXXXXweb.txt

 

となっています.

 このXXXXの部分に各台風に対応する4桁の数字が入るのですが, それをノンタップで取得する方法が結局思いつきませんでした.

 おそらく「台風の番号」+「発生日」のようではあるんですがそれ以上は不明です.

 執筆時点である8月4日に宮古島周辺にある台風(の卵)に9721なんて番号が振られているので全然関係なさそうです.

 

 ともかく今回はその「台風コード」を辞書に入れます.

 辞書のキーを同一にし, 値の方に台風コードを入れ, 上のURLのXXXXの部分に指定します.

 こうすることで複数の台風を切り替えることができます, 切り替える際はチェックしたい台風を辞書アクションの先頭にすればいいです.

 

 そしてこのURLから「Webページの内容を取得」で中身を取得します.

 

 

f:id:thetheorier:20210804144248p:plain

 メインの処理に入ります.

 TC Warning Textでは更新時点での情報に加え, 台風の状況に応じていくつかの予想情報を含んでいます.

 またテキストの先頭部分に, その台風の英名が書かれています.

 なのでそれらをうまく分割するような文字列を選んで「テキストを分割」で分割していきます.

 今回はそのために"POSITION:"と"AT:"を採用しましたが条件に合うものなら他でも構いません.

 

 これを行えば分割の一つ目に台風の英名が, そして二つ目以降には各時間における風速の情報が一対一で含まれているはずです.

 

 そして分割したテキストを使って「各項目を繰り返す」で処理します.

 

 

f:id:thetheorier:20210729164912p:plain

 まずは風速情報から取り込んでいくことにします.

 分割したテキストの塊を改行で分割します.

 今回は先の段階で"POSITION:"で分割したことにより, 分割の2行目に日付と位置情報の文字列が固定で存在します.

 よって「リストから項目を取得」で2行目を取得します.

 

 これで得た文字列は例えば

 

271800Z -- NEAR 37.8N 142.0E

 

です, 日付はこのうち271800に相当する場所であり, 更にこれを先頭2桁ずつ区切って(わかりやすい)日本時間に直さなければなりません.

 

 

f:id:thetheorier:20210804144353p:plain

 これが日本時間までの変換処理です.

 取得したテキストから先頭6桁の数だけ取り出すんですが, 台風の状況によって時刻の後ろが " --- NEAR" だったり " --- " だったりします.

 そのためこの2通りで分割します(この順番で分割すればどちらか1回しか分割されません).

 分割した先頭が時刻にあたる数字6桁です.

 これを正規表現で先頭2桁ずつ取り出します(末2桁は固定で0分なので省略).

 これを現在時刻の年と月に繋げて再フォーマットし, 更に9時間加算します.

 元データは日付からだけで月がないため, 残りは現在の時刻からカスタムフォーマットで補完します.

 確認できていないですが月をまたぐとこの方法じゃダメな気がします…

 これで時刻については完成です.

 

 

 

f:id:thetheorier:20210729165936p:plain

 次はつの風速です.

 ここでは「ファイルにフィルタを適用」を使って"MAX SUSTAINED WINDS-"を含む行を取得します.

 分割した一つにそれを含む行が一つしかないのはわかっているため, 取得制限はオフのままです.

 

 

f:id:thetheorier:20210729170456p:plain

 上記の時点で得られたテキストは例えば

 

MAX SUSTAINED WINDS - 035 KT, GUTS 045 KT

 

です.

 なので先頭にある"MAX SUSTAINED WINDS -"や末端にある"KT"を消し, "KT, GUTS"で分割すれば2つの風速値を得ることができます.

 値を得るために改行で分割もしておきます.

 

 

f:id:thetheorier:20210729170849p:plain

 先の通り, 我々はノットという単位に馴染みがないのでこれをm/sに変換します.

 計算はノットの値を1.944で割ることで得られます.

 こうして得た各予測の時刻と2つの風速値を「テキスト」アクションで体裁を整え, 適当な変数に追加します.

 

 これで各予測の繰り返し処理は完成です.

 

 

f:id:thetheorier:20210804150113p:plain

 順番が逆になってしまった, 台風の英名を取得します.

 これは「各項目を繰り返す」内の初めに行った「繰り返しインデックスが1と等しくない」の「その他の場合」になります.

 

 「一致するテキスト」で"SUBJ/TROPICAL STORM"から始まる1行を正規表現で探します(末尾に.*を付けています).

 

 ここから不要な文字を取り除けばいいんですが, 台風の状況次第でこの行の内容の先頭が"SUBJ/TROPICAL STORM~"だったり"SUBJ/TROPICAL DEPRESSION~"だったりします.

 そのため変数を使って上書きすることで双方に対応します.

 どちらを先にしてもいいですが, 後者の「変数を設定」は一致する場合のif文内で行わないと, 条件によって空に上書きされてしまうため注意です.

 

 

f:id:thetheorier:20210804145557p:plain

 これで英名を含む行が取得できたので, 不要な先頭部分をまず取り除きます.

 

 

f:id:thetheorier:20210729172117p:plain

 不要な先頭を取り除いたので, あとは英名の後ろの部分を分割し, その最初の行を取得することで無事英名を取り出すことが可能となります.

 

 

f:id:thetheorier:20210804145044p:plain

 「各項目を繰り返す」から抜け, 最後にこれまでに取得した英名と予測情報を繋げ, 表示させればレシピの完成です.

 ただし最初の「辞書」で4桁の数字に対応する台風のページがサイトにない, あるいは単純に誤っている場合があるためその例外処理も行います.

(最初にやっておけばよかったんですが後付けになってしまいました)

 「Webページの内容を取得」でそのようなページの内容を取得すると, "AccessDenied~"から始まるテキストになっているはずなのでこれをif文の条件とします.

 

 

実行

f:id:thetheorier:20210804150352p:plain

 実際に動かすと画像のように時刻ごとの結果が得られます.

 

 

f:id:thetheorier:20210804150426p:plain

 エラー処理についても概ね問題ありません.

 今回は修正を複数行ったせいで処理を最後にしてしまいましたが, 本来であれば「Webページの内容を取得」の後で行うのがよいです.

 さもないとそれ以降の余計な処理をし続けることとなります.

 

 

 普段であれば, Webページの本文を取得するのに「URLの内容を取得」のアクションを使っているのですが, しょっちゅう403エラーを返してくるので諦め, 代わりに「Webページの内容を取得」に切り替えました.

 このアクションはページ自体のリッチテキストを返しますが, テキストとして扱うことでhtmlテキストとして扱えます.

 今回は指定ワードで区切る手法を取っていたため, htmlタグの有無を追加で考えることなく修正前とほぼ同じやり方で使い回せたので助かりました.

 

 何より今回のレシピは肝心の台風が来ないことにはレシピが正しく動くかどうかの確認すら取れず, また台風の変化に応じて変わる記述に対応して修正することもできません.

 そのため現状でもまだ不備がある可能性があります.

 

 

 気象庁と共に, 台風を評価する指標としてJTWCはとても便利です.

 レシピ抜きにしても参考にしてください.

 

 

【iPhoneショートカット】USLauncherのコンテンツを追加しました【210731】

f:id:thetheorier:20201201145203p:plain

 定例のデータ更新です.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のiOSバージョン : iOS14.7.1

 

 

スポンサーリンク

 

 

 

ダウンロード

www.dropbox.com

 基本的には過去に保存した場所と同じフォルダーにすると楽です.

 ※リクエストに伴い個別配布した方もこちらに差し替えてください.

 

 USLauncher自身の更新はありません.

 

 

URLスキームの追加・削除

 バージョンの後ろに"?"がついているものは, 調べたバージョンより古いバージョンから変更された可能性があります.

 

 

  • Adobe Fresco v2.7.3
    追加:com.adobe.fresco.ios://
  • buffer v10.5.1?
    削除:bufferappfeedly://
  • BuzszVideo 11.9.1?
    追加:awuvs41tkchq2p8x://
  • Microsoft Office v2.51
    追加:ms-powerpoint-offlineopen-support-2106://
    追加:ms-powerpoint-offlineopen-support-2106-intunemam://
    追加:ms-word-offlineopen-support-2106://
    追加:ms-word-offlineopen-support-2106-intunemam://
  • Microsoft PowerPoint v2.51
    追加:ms-powerpoint-offlineopen-support-2106://
    追加:ms-powerpoint-offlineopen-support-2106-intunemam://
  • Microsoft Teams v.3.11.1?
    削除:hae7c87d62956b468fab231e33f6920b6c://
    削除:hae7c87d62956b468fab231e33f6920b6c-intunemam://
  • Microsoft Word v2.51
    追加:ms-word-offlineopen-support-2106://
    追加:ms-word-offlineopen-support-2106-intunemam://
  • Monument Valley v2.7.6?
    追加:fb690517271043345fb-messenger-share-api://
    削除:fb690517271043345://
  • Things 3 v3.13.16?
    追加:things2-database-import://
  • アークナイツ v4.0.02
    削除:arknightsjp://
  • 荒野行動 v90
    追加:com.googleusercontent.apps.476419569508-oa3kvhpecu6si83vrq9omsacpjfkvopr://
  • ドラゴンクエストX 冒険のおでかけ超便利ツール v5.5.5?
    削除:fb949655368897705://

 

 

 

 前回6月までに配布したテキストで, URLスキームの末尾://が入っていないものが複数あったのでそれを修正した上で今回は配布しています.

 一時期自作ツールを介さず追加したことがあり, それが原因だと思います, 迂闊でした.

 

 

【iPhoneショートカット】充電音を「変える」という誤解

f:id:thetheorier:20210722150535p:plain

 今更ではありますが.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のiOSバージョン : iOS14.7

 

 

スポンサーリンク

 

 

 

充電音が変わっているわけではない

blog.thetheorier.com

 iOS14のリリースと共に流行ったこのライフハック.

 上の記事でも便宜上「変更する」としていますが実際には異なります.

 

 

 

f:id:thetheorier:20210722151114p:plain

 まずはデフォルト(システム音)から見てみます.

 ケーブルを使うなどして充電した際, システム内ではそれを検知し, これをトリガーとして充電音を鳴らします.

 より細かく見ると, 人の感覚ではわかりにくいですがトリガーを受けて実際に通知音が鳴るまでに時間差が生じます.

 

 これはその時点での端末の「忙しさ」によって時間の長さが変わります.

 余裕のあるときは充電したとほぼ同時に鳴る場合もあれば, 何らかの要因で処理が遅れ, 明らかな時間を置いて鳴る場合もあります.

 

 パソコンはもちろんスマートフォンは「マルチタスク」と言いますが, 実際にはある単位時間を区切り, その一つ一つで各処理を行うことで人の感覚で「同時に処理しているように見える」挙動をする, あるいは有限であるメモリをうまく管理してやりくりします. 

 

 

 

f:id:thetheorier:20210722151012p:plain

 同じことが「充電音の変更」, つまりオートメーションの場合でも言えます.

 

 オートメーションも結局はアプリの起動や終了, 時刻, バッテリー残量といった, 予め容易されたトリガーをもとにアクションを動かします.

 これについてもトリガーの立ち上がり(または立ち下がり)を見てからオートメーションの最初のアクションが働きますから, それまでにある程度の時間差が生じるのは避けられません.

 

 

 

同じトリガーで複数のアクションを行うとどうなるのか

 充電音に限らず, 同じトリガーで複数のアクションを処理するとどうなるのか, 気なるところです.

 

 

f:id:thetheorier:20210722154050p:plain

 まったく同じ, 通知のテキストだけ異なるオートメーションを3つ作って試したのが上の画像です.

 2つだけですが, 充電するたびに順番が異なることがわかります.

 

 ただし, 各々の中身は「マルチタスク」で処理しているようです.

 例えば双方の通知の前に「待機」で例えばどちらも5秒待たせることで確認できます.

 

 これは充電でのシステム音についても同様です.

 

 

 

f:id:thetheorier:20210722155624p:plain

 したがって, 充電のシステム音が先に鳴ってからオートメーションの充電音が鳴るときもあれば…

 

 

f:id:thetheorier:20210722155827p:plain

 オートメーションの充電音が先になってからシステム音が鳴る場合もあります.

 

 

消音モード解除時は避けられない

 以上の話, とくにシステム音については消音モード時はそもそも鳴りませんから関係ない話です.

 むしろ消音モードで充電のシステム音が鳴らない仕様だからこそ, オートメーションを使って充電音を変えた「ように見せる」ことができる…というのが正しい表現です.

 

 そのため, 消音モードを解除すれば上の理屈によって順番の違いこそランダムですがどちらにしろシステム音も鳴ってしまうわけです.

 

 なので根本的に仕様が変わらない限り, 覆すことはできません.

 

 アクション内であれば一時的に音量を落とす手もあるんですが, システム音が鳴った後の話なので対応することもできません.

 

 なかなかかゆいところに手が届かないですが仕方ないですね. 

 

 

【iPhoneショートカット】絵文字の各種コードを取得するレシピ【Unicode,UTF-8,etc...】

f:id:thetheorier:20210715101551p:plain

 多少強引なところはあります.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のiOSバージョン : iOS14.6

 

 

スポンサーリンク

 

 

 

ダウンロード

www.icloud.com

 今回は直リンクです.

 

 

結果を得るためのアイデア

 今回はキーボードで予め入力した絵文字に対する名前やUnicode、UTFなどのコードを取得することが目的です.

 

apps.timwhitlock.info

 コードの取得について, 今回はTim Whitlockというサイトを利用しています.

 

https://apps.timwhitlock.info/unicode/inspect?s=😊

 

のように, 指定のURLの末尾に絵文字そのものを入れて検索することが可能なためショートカットと相性がよいです.

 

 

f:id:thetheorier:20210715102256p:plain

 ただし絵文字によってはコードが一種類, つまり一つの絵文字で構成されている場合と…

 

 

f:id:thetheorier:20210715102354p:plain

 コードが2つ, つまり2つの絵文字からなる場合(Surrogate、サロゲート), またそれとはまた別にコードが2つでありながらサロゲートでないケース, 少なくともこの3通りあるようです.

 

 「Webの内容を取得」で対象ページの本文を取得し, 該当箇所を取り出せばOKなわけですが, 上記の違いによって同じコードの行数が異なり, その対応が面倒です.

 

 今回はサロゲートの有無をメインにコードの数で場合分けすることにします.

 

 

フロー

f:id:thetheorier:20210715103430p:plain

 今回は予め「テキスト」アクションに希望の絵文字を書き込んでおきます.

 これを「テキストを分割」で一文字ごとに分割し, 「各項目を繰り返す」で一文字ずつ処理します.

 この「各項目を繰り返す」は以降すべてのアクションを内包します.

 各絵文字である「繰返し項目」に対し, 

 

https://apps.timwhitlock.info/unicode/inspect?s=「繰り返し項目」

 

の内容を取得します.

 

 

f:id:thetheorier:20210715103838p:plain

 コードの種類がいくつかどうかはHex Dec Oct…とある行の上にあり, また実際のコードは「Webの内容を取得」で得られたテキストにおいて「Block」の行の次から始まります.

 よってこれらの情報を取り出すために「テキストを分割」を複数使います.

 「 unique」で分割したことで最初の項の末尾がコードの種類の数が, さらに「Block」で分割したことで3つ目の項がコードを含みます.

 

 

f:id:thetheorier:20210715104816p:plain

 というわけで分割したテキストを更に改行で分割し, 末項を取り出します.

 正しければこれがコード数であるはずです.

 

 

f:id:thetheorier:20210715104933p:plain

 同じく分割したテキストの3項目を取り出し, 改行で分割しておきます.

 でないと改行を含むとはいえショートカット上では一つの塊であるため, そのままでは指定行の取り出しができません.

 

 

 これでコード数, つまり繰り返し回数とコード本体を含むテキストが得られました.

 

 

f:id:thetheorier:20210715105848p:plain

 これを用いて順番にテキストを取り出せばいいんですがそうシンプルではありません.

 画像の通り, テキスト分割で生まれた空行と, Unicode手前の2項目が手前に存在するため, 必要なテキストは(固定とはいえ)4行目から始まります.

 

 

f:id:thetheorier:20210715111121p:plain

 というわけで, サロゲートの判断のためにはじめに分割したテキストの2項目目を取り出しておき, また上の目的から好きな変数としてtmpに4を代入しておきます.

 

 

f:id:thetheorier:20210715111309p:plain

 if文を追加し, 先程取ってきた分割テキストの2項目目に"Surroagates"の文字が含まれているかどうかで場合分けします.

 まずが含んでいてる場合から.

 コード数で同じ処理を繰り返します.

 Surrogatesを含んでいる場合, 取り出すべき情報は

 

Code,UTF-8,UTF-16 LE,Surrogates,Name 

 

の5種なのでtmp行からtmp+4行必要になります.

 

 

f:id:thetheorier:20210715111821p:plain

 各5行を取り出し, 好きな変数で置きます.

 ただし絵文字が複数ある場合を想定し, 「変数を設定」でなく「変数に追加」を使用します.

 繰り返しの最後に変数tmpが2つ目のコードの先頭になるよう(今回は)9を足して上書きします.

 

 これでサロゲートありの場合でのデータ取得は終わりました.

 

 

f:id:thetheorier:20210715112050p:plain

 続いてサロゲートがない場合です.

 これはサロゲートありの場合とほとんど同じで, 異なるのは取得する行数と, 2種類目の先頭行の指定, そしてSurrogatesの変数が不要な点です.

 まず今回の行数は前回に比べ1つ減っているのでtmp+4からtmp+3と変わります.

 

 

f:id:thetheorier:20210715112514p:plain

 2項目目への頭出しも, 1項目減っているためtmp+9でなくtmp+8になります.

 

 この2点とsurrogatesを扱わないこと以外はサロゲートありとまったく同じなので全体は省略します.

 

 

f:id:thetheorier:20210715112717p:plain

 必要な情報は概ね揃ったので表示処理を行います.

 せっかく「絵文字の名前を取得」で日本名がわかるので, これも入れておきましょう.

 またこれらのアクションが含まれている「各項目を繰り返す」の「繰り返し項目」は各々の絵文字そのものですから, 見た目のためにこれも入れておきます.

 あとはサロゲートの有無があるためこの場合分けで表示スタイルを分けることとなります.

 見た目を気にしないなら一緒にしてしまっても構いません.

 

 

 

blog.thetheorier.com

 「各項目を繰り返す」の最後に, 各変数をクリアしておきます.

 今回, コードが複数存在することを想定して「変数に追加」を使用しているため, このままだと前回の内容を含んだまま情報が追加されてしまうからです.

 共有などを使用しないスタンドアロン型レシピ限定で使えるテクニックです.

 

 

f:id:thetheorier:20210715113038p:plain

 やり方は簡単で, 「変数を設定」で対象の変数に「ショートカットの入力」を代入するだけです.

 共有などを行わないレシピでは「ショートカットの入力」は常に空データであることを利用しています.

 

 

実行

f:id:thetheorier:20210715113808p:plain

 timwhitlock.infoの仕様でコードによって半角スペースが間に入っていたりするので, 不要の場合は予め取り除く必要があります.

 

 

f:id:thetheorier:20210715114401p:plain

 またちょっとしたことですが, 「変数に追加」で複数追加されると末項に空行が付いてくるようで, 画像の通り1種類のときと違って空行が一つずつ入っているのがわかります.

 これも気になる人は表示する前に整える必要があります.

 

 

 依頼を受けて作った試作を改善させたのが今作です.

 必要な種類が揃っているサイト自体を見つけるのに苦労した…というのもありますね, 大抵はUnicodeならUnicodeだけ、UTFならUTFだけ、UTF-8があってもUTF-16がない…という状況でした.

 JSONもいくつかありますがそれも上と同じで採用できませんでした、あればもっと簡単に作れるんですけどね…

 

 ちなみに, 絵文字と銘打っていますがUnicode云々の話ですからアルファベットやひらがな、漢字ももちろん対応しています.

 ただし英名が存在しない場合があります.

 

 

 

【iPhoneショートカット】指定ワードを含む行の次行を取得する【実践】

f:id:thetheorier:20210625082937p:plain

 先日投稿した, 指定ワードを含む行の次行を取得するアイデアを実際に応用します.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のiOSバージョン : iOS14.6

 

 

スポンサーリンク

 

 

 

結果を得るためのアイデア

blog.thetheorier.com

 今回は別投稿である, iOS14のURLスキームの記事を使ってみます.

 

 

f:id:thetheorier:20210625083011p:plain

 「Webの内容を取得」で記事の内容を得ると, 画像のような状態(全体の一部)になっています.

 項目に相当する行の次の行が必ずURLスキームとなっているため, 先日のアイデアが使えます.

 

 ただ前回の投稿と異なる点は, 検索するワードによって項目数が複数になりうるということです, そこだけ工夫する必要があります.

 

 

フロー

f:id:thetheorier:20210625083627p:plain

 今回は一部端折ってあります(赤枠部分).

 実際にはURLを指定してそれを「Webの内容を取得」で取り出します.

 このままだとそのページのヘッダやフッタなどにある余計な部分も含んでいます.

 問題ない場合もありますがこの後キーワード検索する上で必要な項目に被るものを含んでいる場合は適用な箇所で「テキストを分割」を使って分割し, 必要な場所のみ「リストから項目を取得」で取り出し, これを使います.

 こうして取り出した内容を「テキストを分割」で改行によって分割します, 今回はこれをtxtという名前の変数に設定しました.

 

 

f:id:thetheorier:20210625084150p:plain

 次に「入力を要求」で検索ワードを入力させます.

 さらに先程の変数txtに対して「ファイルにフィルタを適用」アクションを適用します.

 フィルタを一つ追加し,

 

名前 - 次を含む - 指定入力(上の「入力を要求」アクション)

 

とします.

 並び順序や制限は好みで変更します.

 この結果を「リストから選択」で一つ選ばせます.

 これで「入力を要求」で打った文字列を含む行が一つ選ばれたことになります.

 

 

f:id:thetheorier:20210625084708p:plain

 次に「一致したテキスト」アクションを追加し, 中身を

 

選択した項目\n.*

 

とします(画像では 選択した項目.*\n.* になっていますが左側の .* は不要でした), これで選択した行とその次行の2行が選ばれているはずです.

 なので「テキストを分割」で改行によって分割し, 「リストから項目を取得」で最後の行を取得します.

 これで必要な項目, URLスキームが得られたはずです.

 

 

f:id:thetheorier:20210625085701p:plain

 実際に動かしてみるとちゃんと記事上に表記されたURLスキームを取得できています.

 

 

 実際には目的のデータが一つとは限らないため, このやり方が任意のサイトで100%通用するとは限りません.

 実際今回使ったURLスキームの記事にしても, 一部の項目は2種類以上あるためこれでは一つしかわかりません.

 

 そのため場合によってはもう一行多めに取得して処理するなど, もう一歩踏み込んだ工夫が必要となります.

 

 

【iPhoneショートカット】アマゾン商品の短縮URLを生成する

f:id:thetheorier:20210624161124p:plain

 SNSなどでできるだけ短くしたいときに使えます.

 短縮サービスは使いません.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のiOSバージョン : iOS14.6

 

 

スポンサーリンク

 

 

 

商品URLは単純に端折れる

 例えばApple AirPod Proの商品リンクは

 

www.amazon.co.jp/Apple-%E3%82%A2%E3%83%83%E3%83%97%E3%83%AB-MWP22J-A-AirPods/dp/B07ZPS4FSW/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=apple&qid=1624519357&sr=8-6

 

となっています(スキームhttps://を抜いてあります).

 

kdp.amazon.co.jp

 もちろんそのままアクセスしてもいいのですが, 実際には

 

http://www.amazon.com/dp/ASIN

 

でもアクセスできます. ここでASINというのはアマゾンが発行する, 書籍を除く商品につけられたコードです.

 URLにももちろん含まれており, /dp/から続く10桁の文字列がこれに相当します, なので上記AirPodsの場合はB07ZPS4FSWであり, またアマゾンはhttps://amazon.jpでもアクセスできることから更に文字列を省略して

 

https://amazon.jp/dp/ASIN

 

とできます.

 よってその商品のURLを短くする手法として, 商品ページからURLを取得し, ASINだけ抜き取って上のURLに置き換えればいいわけです.

 

 

フロー

 というわけで実際に作ってみます.

 

 

f:id:thetheorier:20210624163716p:plain

 今回はブラウザにしろアプリにしろ, 共有からレシピを使うタイプとなるため, レシピの「共有シートに表示」をオンにし, 少なくとも「URL」の項目にチェックを入れた状態にしておきます.

 その上で「ショートカットの入力」からURLを得るわけなんですが, 原因は不明ですがこの時点で同じURLを2つ取得してしまう現象を確認しています.

 アソシエイトが影響してるかも…と思ったんですが結局わからずじまいなので, やむなく「ショートカットの入力」を直に使わず, 「テキストを分割」で改行で分割し, その最初の項目を取得することでURLを確実に一つにすることで回避しています(これがなければこの2つのアクションは不要だったんですが…).

 

 

f:id:thetheorier:20210624164222p:plain

 ともかく, 共有から得たURLから/dp/~の部分を「一致するテキスト」で取得し, "https://amazon.jp"の後ろに繋げます.

 今回はこれを表示するだけにしました.

 

 なお「一致するテキスト」では正規表現を使っています.

 /dp/は一致するかを見たい初めの部分なのでともかく, 残る.[0-9A-Z]{9}の説明ですね.

 まず.は「任意の一文字」にマッチします, アルファベットでも英数字でもなんでもいいです.

 次に[0-9A-Z]は10種の数あるいは26種のアルファベットのいずれかにマッチします.

 [01234...]と書いてもいいみたいですがこのように省略できるみたいですね.

 最後に{9}というのは直前の文字の桁数を指定します.

 今回は[0-9A-Z]が対象, つまり[0-9A-Z]{9}で「数字またはアルファベット9文字」という意味です.

 

 あれ?でもASINは10桁だからおかしいよね?って思いますよね.

 これは[0-9A-Z]{9}の手前にある.で一文字マッチしているため, これを合わせて10桁にする必要があるからです.

 

 

 

f:id:thetheorier:20210624165259p:plain

 というわけで実行してみます.
 商品ページの共有ボタンは商品画像右上にあります.

 

 

f:id:thetheorier:20210624165413p:plain

 問題なければ画像のように表示されます.

 

 

 他の短縮サービスと比べちょっとは長いですがそれでも35文字まで短くなります.

 

 

【iPhoneショートカット】指定ワードを含む行とその次行を取得する【正規表現】

f:id:thetheorier:20210624150719p:plain

 知っておくと便利です.

 前者については「ファイルにフィルタを適用」アクションもあり, オプションも豊富なのでそっちがいいかも.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のiOSバージョン : iOS14.6

 

 

スポンサーリンク

 

 

 

いかにして取り出すか

blog.thetheorier.com

 もう1年以上前の投稿ですが, Webページの本文を取り出して必要なデータを処理することを紹介しました.

 しかしここでは「必要なデータまでの行数が固定である」という条件が必要でした.

 もしその情報より手前の行数が変わるよう更新が行われると, 正しく処理できないということになります.

 

 もしその情報が指定ワードを含む同じ行に存在するなら, 一旦分割した後に「ファイルにフィルタを適用」を使うことで解決しますがショートカットの扱い次第では次の行になることもしばしばでです.

 

 そこでヒントになるのが「一致するテキスト」アクションです.

 

f:id:thetheorier:20210624150753p:plain

 例えば画像のように簡単なレシピを使って説明します.

 「入力を要求」で指定ワードを決め, 「テキスト」アクションに改行つきで適当な文字列を入れておき(Webからテキストとして抽出した状態を想定), 「一致するテキスト」で「入力を要求」の内容でマッチさせ, その結果を表示します.

 この「一致するテキスト」アクションは正規表現の機能を内包しています.

 

 

f:id:thetheorier:20210624151714p:plain

 そのためマッチする結果を単純に返すことしかできません.

 ただキーワードを充てがうだけでは不十分です.

 

 

f:id:thetheorier:20210624152041p:plain

 というわけで正規表現を追加します.

 「入力を要求」の結果である「指定入力」の後ろに

 

.*

 

の2文字を追加します.

 ちなみに.は任意の一文字にマッチする正規表現, そして*は直前の文字が0回以上繰り返す最長一致の正規表現です.

 まあ僕も正規表現に詳しくないのでこれらを正確な表現かは自身がないのですが, 大雑把に言えばこの正規表現の組は「(空を含む)すべての文字列にマッチ」します.

 

 

 

f:id:thetheorier:20210624153109p:plain

 これを実行すると, 例えばbと打って続けると結果にbcが帰ってきます.

 .*を加えたことで, マッチしたbに加えその後ろも対象になったわけです.

 ただし改行を含めそれ以降は結果に含まれないという点を忘れてはなりません, そもそも正規表現での改行表記は\nとして別に存在する…という事情もあります.

 

 

 

f:id:thetheorier:20210624153416p:plain

 というわけで例えば更に左にも同じ正規表現を追加すれば…

 

 

f:id:thetheorier:20210624153510p:plain

 指定行の一部だけでその行全体を取得することが可能となります.

 「ファイルにフィルタを適用」の簡易版のようなものですね.

 

 

 見ての通りですが, 対象の行そのものを得ている場合は「完全一致」なので正規表現を使う必要はありません.

 正規表現を使えばマッチさせる行の一部しかわかってなくてもよい…ということです.

 

 

マッチした行の次の行を取得

 ではマッチさせた行の次の行が欲しい場合はどうすればいいのか.

 先程書いたように, .*で好きな文字列にマッチし, 改行の正規表現が\nであることをサッと書きました.

 ならそれを単純に並べれば良いです.

 

 

f:id:thetheorier:20210624154059p:plain

 先程と同じようなレシピですが今度は「一致するテキスト」が

 

「指定入力」.*\n.*

 

に変わります.

 理屈で言えばこの時点で

 

  • キーワードにマッチした行の、キーワード以降の文字列(なのでマッチした行全体とは限らない)
  • マッチした行の次の行全体

 

が得られているはずです.

 

 

f:id:thetheorier:20210624154454p:plain

 よって得られた文字列を改行で分割し, その最後の項目が望む文字列であるはずです.

 

 

f:id:thetheorier:20210624154555p:plain

 実行して確かめたところ, 上記の仮定が正しかったことが確認できます.

 

 

【応用】マッチした行の次の複数行を取得

 上記まではマッチした行の次の一行だけでした, 今度は複数行取り出すことを考えます.

 

 

f:id:thetheorier:20210626080623p:plain

 レシピを改めて作り直しました.

 まず画像にある通り改行を含む適当なテキストを用意し, "hi"を含む行とそのの次の3行分を取得します.

 今回は一致させるための正規表現として

 

hi.*(\n.*){3}

 

と書きます.

 正規表現において括弧()はその中をグループ化するものです, 今回は改行\nと任意の一行/*の組を一つのグループとしているわけですね.

 それに続く{3}は「直前の文字の桁数」を意味します, つまり{3}なら「直前の文字が3回繰り返される」場合にマッチします.

 よって(\n.*){3}は\n.*\n.*\n.*と書いた場合と同じになります.

 

 繰り返しの{}の中身をマジック変数で代入すれば, 好きな行数を指定することができるわけですね.

 もちろん, 「指定した行(の一部)を含むn行」を取得したい場合は{}の中の数がn-1になります.

 

 

f:id:thetheorier:20210626081854p:plain

 というわけで上記のままでは指定行(の一部)が含まれたままです.

 次行のみを取り出したい場合は例えばマッチした結果の先頭のみを「一致したテキスト」でhi.*\nによってマッチさせてから分割し, 後ろの項目を「リストから取得」で取り出す必要があります.

 

 

f:id:thetheorier:20210626082143p:plain

 これを実行してみます.

 マッチさせた時点ではやはり指定行(の一部)が残っていますね.

 後の分割処理によって, 2行目以降が残ります.

 

 

f:id:thetheorier:20210626082424p:plain

 ちなみに指定行を取り出すために「一致したテキスト」でhi.*\nと指定しました.

 この改行\nを無くしてhi.*だけにした場合どうなるか…というと, 改行が残ったために画像のように1行目が空行として残ってしまいます.

 行の内容だけ対象にすればいい…というわけではないので注意が必要です.

 

 

f:id:thetheorier:20210626082800p:plain

 ちなみに指定行を取り除くのにもう一つ, 「テキストを置き換え」アクションを使う方法があります.

 置き換えの対象(灰色で「こんにちは」と書かれている枠)にhi.*\nを入れ, 置き換え先(灰色で「世界」と書かれている枠)には何も書かれていない状態にし, 表示を開いた「正規表現」のスイッチをオンにした状態にします.

 どちらも結局は正規表現を使い, アクション数が2つ少ない1つで済むのでこちらの方が適任でしょうね.

 

 

 このように, ショートカットではあるアクションが別のアクション(の組み合わせ)に置き換えられることがしばしばあります.

 プログラミング言語でもそうなので珍しいことではありませんね.

 

 

 ショートカットは先に述べた通り「ファイルにフィルタを適用」などの検索機能のあるアクション自体は存在しますが, それらで得た項目から相対的に前後の情報を得る簡単な方法が(多分)ありません.

 結果こうして正規表現に頼るしかなさそうです.

 

 だからといって「ファイルにフィルタを適用」が役に立たないわけでもなく, それぞれが異なる性質を持ち, 目的に応じてメリット・デメリットがある…ということです.

 目的に沿うアクションを使えばいいだけの話ですね.

 

 でも正規表現ってわかるようでわからないですね, 難しい…

 

 

【iPhoneショートカット】USLauncherのコンテンツを追加しました【210630】

f:id:thetheorier:20201201145203p:plain

 定例のデータ更新です.

 

 

ショートカット

ショートカット

  • Apple
  • 仕事効率化
  • 無料

※価格は記事執筆時のものです. 現在の価格はApp Storeから確認ください.

 レビュー時のiOSバージョン : iOS14.6

 

 

スポンサーリンク

 

 

 

ダウンロード

www.dropbox.com

 基本的には過去に保存した場所と同じフォルダーにすると楽です.

 ※リクエストに伴い個別配布した方もこちらに差し替えてください.

 

 USLauncher自身の更新はありません.

 

 

URLスキームの追加・削除

 バージョンの後ろに"?"がついているものは, 調べたバージョンより古いバージョンから変更された可能性があります.

 

  • Adobe Lightroom for iPhone v6.3.0
    追加:com.adobe.lrmobilephone://
  • Adobe Lightroom for iPad v6.3.0
    追加:com.adobe.lrmobile://
  • Amazon Alexa v2.2.422194
    追加:alexa-shortcut://
    追加:alexa-widget://
  • Buffer v10.4.2
    追加:bufferComposer://
  • DiDi v7.2.42
    追加:adyenRedirect://
    追加:omega886c3a19bd://
  • Flickr v4.16.12?
    削除:fb137206539707334://
    削除:flickr-tumblr://
  • Twitter v8.69.2
    追加:com.googleusercontent.apps.638150425128-l5vqrme56bqgum2unv5151c5569dllud://
  • アイドルマスター ミリオンライブ! シアターデイズ v3.1.300
    追加:millionlive-universallinks://
  • スドリカ v3.5.1
    追加:sdorica://
  • 刀剣乱舞 v1.6.1
    削除:iostest://
  • ドールズフロントライン v2.0701
    追加:dollsfrontline://
  • プロジェクトセカイ v1.8.0
    追加:fb824690895009146://

 

 

 iOS15が発表されました.

 ショートカットについても複数の改善や新機能があるようですね, まだ正式なリリースは遠いので現在分かる情報がそのまま反映されるとは限りませんが.

 

 メジャーアップデートで一番困るのがURLスキームです.

 過去には設定アプリのURLスキームの大半, prefs:root以外のすべてが全滅したときもあったくらいです.

 現在設定アプリのかなりの項目を(公式ではないですが)サポートしているものの, iOS15では一部またはすべてが使えなくなる可能性は過去の例からゼロではありません.

 少なくともショートカットのアクションとして対応している項目についてはそちらでの操作…という形で残るであろうことは間違いないですが, 問題なのはそれ以外ですね.

 

 個人的にはメジャーアップデートで一番心配なのがこれです, 無事使えることを祈ります.