ビデオショートカットプロバイダーの作成
Liferay DXP 7.4以降で利用可能
デフォルトでは、Liferayの外部ビデオショートカットは、 YouTube 、 Vimeo 、 Facebook 、および Twitch をサポートしています。 ただし、この機能を拡張して、他のビデオソースをサポートすることができます。
次の手順に従って、独自のビデオショートカットプロバイダーを作成します。
-
OSGIコンポーネントアノテーション :
@Component
アノテーションを使用して、OSGiフレームワーク内でプロバイダーをDLVideoExternalShortcutProvider.class
サービスとして宣言します。 -
DLVideoExternalShortcutProvider
:DLVideoExternalShortcutProvider
インターフェースを実装します。 -
インターフェイスメソッドのオーバーライド :インターフェイスの
getDLVideoExternalShortcut()
メソッドをオーバーライドします。 このメソッドは、DLVideoExternalShortcut
インターフェイスのインスタンスを作成し、URL文字列を受け取ります。 実装において次のことが実行されるか確認してください。- 受信したURLが定義済みのURLパターンと一致するかどうかを確認します。
- URLがパターンに一致しない場合、プログラムは
null
を返す必要があります。 Liferayは、一致するものを探して他の利用可能なプロバイダーをチェックします。 - URLがパターンと一致する場合は、URLを解析し、外部ソースから追加情報をフェッチして、収集した情報を含む
DLVideoExternalShortcut
インスタンスを返します。
-
DLVideoExternalShortcut
メソッドのオーバーライド :getDLVideoExternalShortcut()
メソッドによって返されるDLVideoExternalShortcut
インスタンスに必要なメソッドをオーバーライドします。getURL()
:元のビデオURLを取得します。renderHTML()
:ユーザーインターフェイスにビデオを埋め込みます。 これは通常、iframe
をレンダリングしますが、ユーザー向けにビデオをレンダリングするHTMLビデオタグにすることもできます。
-
次のオプションのメソッドをオーバーライドします。
getDescription()
:このメソッドを使用して、元のビデオの説明を取得します。デフォルト値はnull
です。getThumbnailURL()
:このメソッドを使用して、ビデオのサムネイルを取得します。デフォルト値はnull
です。getTitle()
:このメソッドを使用して、元のビデオのタイトルを取得します。デフォルト値はnull
です。
以下は、 外部のビデオショートカットプロバイダーのサンプル で、独自に実装するための最低限の要件を示しています。 より複雑な例については、 既存のプロバイダー を参照してください。
サンプルビデオプロバイダーのデプロイ
新しいLiferay インスタンスを起動し、以下を実行します。
docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.120-ga120。
http://localhost:8080でLiferayへのサインインします。 メールアドレス test@liferay.com とパスワード test を使用してください。 プロンプトが表示されたら、パスワードを learn に変更します。
次に、以下の手順を実行します。
-
サンプルモジュールをダウンロードして解凍する。
curl https://resources.learn.liferay.com/dxp/latest/en/content-authoring-and-management/documents-and-media/developer-guide/liferay-g9b6.zip -O
unzip liferay-g9b6.zip
-
gradlew deploy
コマンドを実行してJARファイルをビルドし、それを新しいDockerコンテナにデプロイします。cd liferay-g9b6
./gradlew deploy -Ddeploy.docker.container.id=$(docker ps -lq)
JARは、
build/libs
フォルダ(つまり、g9b6-impl/build/libs/com.acme.G9B6.impl-1.0.0
)に生成されます。 -
プロバイダーが正常にデプロイされ、コンテナコンソールを介して開始されたことを確認します。
Processing com.acme.G9B6.impl-1.0.0.jar STARTED com.acme.G9B6.impl-1.0.0 [1356]
-
短いDailymotionのURLで新しい外部動画ショートカットを作成し、モジュールが機能していることを確認します (例:https://dai.ly/x7szh28)。
成功した場合、LiferayはDailymotionをサポートされているプラットフォームとして認識します。
サンプルビデオプロバイダーのコード
@Component(service = DLVideoExternalShortcutProvider.class)
public class G9B6DLVideoExternalShortcutProvider
implements DLVideoExternalShortcutProvider {
@Override
public DLVideoExternalShortcut getDLVideoExternalShortcut(String url) {
Matcher matcher = _pattern.matcher(url);
if (!matcher.matches()) {
return null;
}
return new DLVideoExternalShortcut() {
@Override
public String getURL() {
return url;
}
@Override
public String renderHTML(HttpServletRequest httpServletRequest) {
String iframeSrc =
"https://www.dailymotion.com/embed/video/" +
matcher.group(1) + "?rel=0";
return StringBundler.concat(
"<iframe allow=\"autoplay; encrypted-media\" ",
"allowfullscreen height=\"315\" frameborder=\"0\" ",
"src=\"", iframeSrc, "\" width=\"560\"></iframe>");
}
};
}
private static final Pattern _pattern = Pattern.compile(
"https?:\\/\\/(?:www\\.)?dai\\.ly\\/(\\S*)$");
}
OSGiコンポーネントアノテーション
プロバイダーは、OSGiフレームワーク内でコンポーネントとして宣言され、DLVideoExternalShortcutProvider.class
サービスとして識別されます。
DLVideoExternalShortcutProvider
実装
プロバイダーは、DLVideoExternalShortcutProvider
インターフェースを実装します。 このインターフェースには、有効なURLを受信した場合にDLVideoExternalShortcut
を返す単一のメソッドgetDLVideoExternalShortcut
が含まれています。
getDLVideoExternalShortcut
のオーバーライド
プロバイダーは、インターフェースのgetDLVideoExternalShortcut
メソッドをオーバーライドします。このメソッドには、プロバイダーの基本的なロジックがすべて含まれています。 URLが定義された正規表現パターンと一致するかどうかをチェックします。 一致するものが見つからない場合は null
を返し、Liferayは一致するものを探して他の利用可能なプロバイダーを呼び出します。 一致する場合は、ビデオをLiferayのページまたはアセットに埋め込むための新しいDLVideoExternalShortcut
オブジェクトを返します。
DLVideoExternalShortcut
のメソッドのオーバーライド
プロバイダーがDLVideoExternalShortcut
オブジェクトを返すと、オブジェクトのgetURL()
メソッドとrenderHTML()
メソッドがオーバーライドされます。 getURL()
は、ユーザーが入力したURLを返します。 renderHTML()
はHttpServletRequest
パラメーターを受け取り、Liferayのページまたはアセットに埋め込まれるiframe
文字列を返します。 次の例を考えてみましょう。
getDescription()
、getThumbnailURL()
、およびgetTitle()
がオーバーライドされていないので、null
が返されます。