エンジニアブログ株式会社ラクスのITエンジニアによる技術ブログです。iPhoneだけでAPI実行!!「ショートカット」アプリを試してみた2018-09-25iPhoneだけでAPI実行!!「ショートカット」アプリを試してみたiOSはじめに新卒2年目エンジニアのkasuke18です。先日iOS12がリリースされました。リリースされた内容は数多くありますが、その中でも気になったのが「ショートカット」というアプリです。このアプリをうまく使えばiPhone単体でAPIの実行が可能になります。実際に試してみましたので、紹介します。notesを見ると、「ショートカット」アプリはiOS12の以前に「Workflow」アプリとして公開されていたようです。「ショートカット」アプリでは、ビジュアルプログラミング言語のようにアクションと呼ばれる構成要素を組み合わせて1つのショートカットを作成します。foreach)といった制御を行うものも用意されています。作成したショートカット内容クリップボードに保存されている画像のリンクに対してOCRのAPIを実行し、画像内の文字をテキストに変換して出力する、ということをやってみました。OCR.spaceです。POSTパラメータやレスポンスのJSON構成はリンク先でご確認ください。作成例まずはPOSTリクエストを送信する部分です。今回POSTパラメータとして必要な情報はAPIキー・画像内の文字の言語・base64エンコードされた画像の3つです。このうち画像内の文字の言語は日本語で固定としているので、残り2つを取得する処理はサブルーチンとして別ショートカットに切り出し、それらを呼び出す方式をとっています。それぞれのショートカットを見ていきます。APIキーの取得処理です。APIキーは環境変数に持っておきたいのですが、さすがにそこまではできないようなので、今回はリマインダーアプリに保持・読み出すようにしています。内容はAPIキーを保持しているリマインダーを検索し、その中から今回使用するOCR.spaceというタイトルの項目からAPIキーを取得しています。ショートカットの最後では、メインのショートカットに値を渡すため、変数から値を取り出して終了しています。次にbase64エンコードされた画像の取得処理です。このパラメータに設定する値はdata:image/[フォーマット],[base64エンコードされた画像]ですので、実際は拡張子と画像をbase64エンコードしたテキストの2つが必要になります。拡張子の取得処理です。大きな流れとしては、まずクリップボードの内容がURL形式どうか確認し、URL形式ならその内容を取得します。その内容がイメージであれば拡張子を、そうでなければnoneというテキストを返却する、という処理を行っています。このnoneというテキストは、ショートカットを実行する側の処理でnoneを受け取り、エラーとして処理を終了するために利用します。次が画像をbase64エンコードしたテキストの取得処理です。画像をbase64エンコードしたテキストの取得これは拡張子の時とほぼ同じ処理の流れをしていて、拡張子を取得していたところを画像をbase64エンコードしたテキストを取得するように変更しただけです。最後にメインのショートカットで他のショートカットを実行する&その結果を受け取る処理と、レスポンスJSONをパースする処理を行います。他のショートカットを実行&その結果受け取る処理です。処理の流れは画像の通りです。ショートカットを実行し、その結果が拡張子ではないときは中断されたことを通知しショートカットを終了します。続いてレスポンスJSONをパースする処理です。レスポンスJSONのパース「ショートカット」アプリ内ではJSONは辞書という単語で扱われています。アクションとしては辞書の値を取得というもので、これは組み合わせればネストされたJSONのパースも可能です。今回は結果出力のため、最後にメモに書きだすようにしています。以上のサンプルを、前回私が書いた記事の画像に対して実行した結果が以下となります。実行結果おわりに今まではちょっとAPIを試してみたいだけでもPCを用意する必要がありましたが、この「ショートカット」アプリを使用すればiPhone単体で簡単にできます。今回は紹介していませんが、テキストに対して正規表現を用いたマッチングもできるので、スクレイピングも可能です。iPhoneユーザの方は試してみてはいかがでしょうか。最後までご覧いただきありがとうございます。OCR.spacehttps://ocr.space/ocrapi付録:今回使用したアクションアクション名とその使い方を以下にまとめました。新卒2年目のtaku_76です。こんにちは、@rs_tukkiです。こんにちは、開発エンジニアのnorth_mkyです。こんにちは、rs_tukkiです。レガシーシステムとの戦い方について話しました。reserved.はてなブログをはじめよう!tech-rakusさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。