最近、開発者がPhotoshop APIを利用する方法について説明しました。その投稿では、Azure に保存されているファイルを使用して API の 1 つを呼び出す単純な Node.js スクリプトを共有しました。
それは簡単でした。アクセス トークンを取得し、入力ドキュメントを使用して API ジョブを開始し、完了をポーリングして、結果を確認します。
ただし、カスタム ワークフローに簡単に統合できるため、シンプルであることは良いことです。今日の投稿では、まさにそれを行います。
まず、ワークフローが何を行うかを定義することから始めましょう。写真を保存するためにクラウド ストレージ プロバイダー (この場合は Dropbox) を使用していると想像してください。私たちのワークフローはこのフォルダーを監視し、新しい写真が追加されたときにトリガーします。
画像が追加されると、ファイルを取得して、Lightroom の「AutoTone」機能を実行するエンドポイントに送信します。この機能は、写真の露出、コントラスト、その他の問題を修正しようとします。
例として ( ドキュメントからそのまま引用しました)、修正の影響を示す前後の図を次に示します。
API が完了したら、結果を Dropbox の別のフォルダーに保存します。オリジナルを上書きすることもできますが、おそらく、どちらが好みか最終チェックするために両方のコピーが必要になるでしょう。
ワークフローにはPipedreamを使用します。 Pipedream は、汎用ワークフローを構築するためのローコード/ノーコード ソリューションです。これは、Microsoft PowerAutomate および Workfront Fusion と同じスペースにあります。 (そして、これらのプラットフォームでも間もなく私たちの例が見られることが期待できます。)
Pipedream は、プロジェクトのより困難な、または退屈な部分を「プラグ アンド プレイ」にすることで、開発者を本当に助けます。たとえば、ワークフローを開始するトリガーであるトリガーを定義する場合、Pipedream には事前に構築されたコード ブロックの膨大なセットが付属しています。
ワークフローの構築方法のデモンストレーションを開始すると、それが実際に動作していることがわかります。 Pipedream には無料枠があるので、これを読んで続きを読みたい人は、サインアップした後に登録することができます。
これまで Pipedream を使用したことがない場合は、その仕組みの概要について、優れたPipedream Universityをチェックしてください。彼らは優れたドキュメントも持っています。最後に、ここの親切な著者も Pipedream について書いています。
さて、それでは構築を始めましょう!
Pipedream ワークフローは、プロセスを開始する「イベント」を表すトリガーから始まります。 Pipedream には、これらのトリガーが多数組み込まれており (独自に作成することもできます)、幸いなことに、Dropbox トリガーの「新しいファイル」がサポートされています。
「新しいファイル」トリガーを選択すると、それを構成するための簡単なインターフェイスが表示されます。
一番上は認証の側面です。ここで、Pipedream を Dropbox アカウントに接続できます。何よりも、一度接続を行うと、その接続を複数のワークフローで再利用できます。
次に、Path の値をメモします。ここに入力すると、Pipedream はアカウントに基づいてオートコンプリートを試みるか、単にパスを入力します。画像を取得するフォルダーとして/PSAPI_Input
を使用します。
次の 2 つの設定は無視できますが、最後の設定であるInclude Link
は true に切り替える必要があります。 API にデータの取得方法を指示できるように、そのリンクが必要になります。
ワークフロー用に最終的に構成されたトリガーは次のとおりです。
要約すると、この時点では、Dropbox アカウントの特定のフォルダーにファイルが追加されるとすぐにワークフローが自動的に起動するように設定しました。
Photoshop API を実行するときは、入力 URL と出力 URL という少なくとも 2 つのものを想定します。基本的には、その入力をどこで読み取り、結果をどこに保存するかです。
入力は、Dropbox に追加された新しいファイルになります。出力は、Lightroom によって補正された画像の位置になります。
これをサポートするには、データの保存に使用できる特別な URL を生成するように Dropbox に依頼する必要があります。 Pipedream には多くの Dropbox アクションが組み込まれていますが、残念ながら、この特定のアクションはありません。
幸いなことに、Pipedream では、すでに認証が処理されているカスタム コードを使用してステップを作成できます。トリガーでは、既存の Dropbox アカウントを指定したことに注意してください。これを行ったので、コードを記述して Pipedream に認証を処理させることができます。
Dropbox APIを参照すると、まさに必要なものであるget_temporary_upload_linkエンドポイントが見つかります。
Pipedream で、新しいステップを追加し、「Node.js で任意の Dropbox API を使用する」を選択します。これにより、1 つのサンプル エンドポイントにヒットする定型コードが得られます。
最も重要なのは、認証情報が自動的に提供されることに注意してください。その後、エンドポイントを編集して入力を設定するだけです。
別のフォルダー/PSAPI_Output
のパスを使用していることに注意してください。その後の値${steps.trigger.event.name}
、ワークフローの前半の情報、具体的にはワークフローをトリガーしたイベントのファイル名とファイル自体の名前を使用することを示しています。
コードは API 呼び出しの結果を返すことで終了します。この場合、これは API 呼び出しで使用できる特別な URL になります。
前回のブログ投稿では、Photoshop API の認証情報を取得する方法と、それをコード内で使用してアクセス トークンを取得する方法について説明しました。 Pipedream では、ワークフローにステップを追加してカスタム コードを実行できます。
これは、前のステップで Dropbox API にアクセスしたときにわかりました。 Pipedream は Node.js と Python の両方をサポートしているため、いくつかのオプションがあります。新しいコードステップを追加し、 getAccessToken
という名前を付けます。
このステップでは、認証情報を使用して JWT を生成し、それをアクセス トークンと交換します。
前回のブログ投稿では、コードで@adobe/jwt-authパッケージを使用してプロセスを簡素化しました。ただし、このパッケージは Pipedream がサポートする ES6 インポートとしては機能しません。幸いなことに、別の NPM パッケージjsonwebtokenに切り替えることができます。コードを見てみましょう:
ここでいくつかのことを説明します。まず、すべての Node Pipedream コード ステップでは次のような形式を使用します。
run
関数は自動的に呼び出され、前のステップからのデータと、必要のない他の操作のハンドラー ( $
) が渡されます。基本的に、インポートを上部に配置し、ロジックを内部に配置します。
当然のことですが、Pipedream ではカスタム環境変数も定義できるため、一連の変数が環境からコピーされていることがわかります。
次のコード ブロックは JWT を生成します。これはほとんど定型的なものですが、 jwtOptions
部分に特に注意してください。この変数"https://ims-na1.adobelogin.com/s/ent_ccas_sdk": true,
は、トークンのスコープを設定するものであり、API を操作するために必要です。
JWT が作成された後、それを汎用の Adobe エンドポイントに送信して、アクセス トークンを生成できます。ロジックの最後の部分は、そのトークンを返すことです。前のステップで覚えていれば、返されたものは後で使用できます。これが実際に動作する様子がすぐにわかります。
さあ、本題です。トリガーにより、新しい画像へのリンクが提供されました。次のコードステップでは、最終結果をアップロードするためのリンクが生成されました。その後、アクセストークンを取得しました。プロセスを開始するために必要なものはすべて揃っています。
もう一度、ワークフローに Node.js ステップを追加します。ここで実際に動作しています。
Autotone API にはいくつかのパラメーター (この場合は入力値と出力値) が必要です。この例では、トリガーからのリンクと、前に生成された特別なアップロード URL を渡します。
以上です!この呼び出しの結果は、最後に返されるジョブへのリンクです。
OK、まったく何もないわけではありませんが、興味深い質問があります。このワークフロー全体は人間の介入なしで自動的に実行されます。前のステップでプロセスが開始され、完了すると結果が Dropbox に保存されます。他に何かする必要がありますか?あまり。
API が何らかの理由で失敗する可能性は絶対にあります。他にも何か問題が発生する可能性があります。また、おそらく電子メールを通じて、誰かに変更について警告したい場合もあります。正直なところ、それはあなた次第です。
サンプル ワークフローでは、単純にジョブをチェックし、完了するまで待つことにしました。そのコードステップは次のとおりです。これは、以前のブログ投稿とかなり似ています。ジョブを確認し、待ってから再度確認します。
ここでワークフローは終了しますが、ジョブの結果を確認して何かを実行するためのロジックを追加することもできますし、おそらく追加する必要があります。おそらく結果が良好な場合は何もしませんが、エラーが発生した場合は電子メールを送信します。 (ちなみに、Pipedream を使用すると、メールの送信がバカバカしいほど簡単になります。)
ただし、良いのは、それを後で決定できることです。
Pipedream の非常に優れた機能の 1 つは、ワークフローがいつ実行されたかを簡単に確認できることです。たとえば、過去の実行のリストは次のとおりです。
そこに表示されるエラーは、私が API をいじって、それがどのように機能するかを理解したときに生じたものです。それらのいずれかをクリックして、そこに流れたデータを確認することもできます。
ワークフローを設定したら、新しい画像を Dropbox フォルダーにアップロードし、開いたタブでワークフローの実行を観察し、完了したら結果を確認しました。以前は次のとおりです。
そして、これがその後です:
結果はより鮮明になり、間違いなく改善されました。ここで私のワークフローの独自のコピーを作成できます: https://pipedream.com/new?h=tch_3xxfJA 。さらに詳しく知りたい場合は、ドキュメントにアクセスして、構築したものを共有してください。
ここでも公開されています