動画ショートカットプロバイダーの作成
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.132-ga132
http://localhost:8080でLiferayにサインインします。 メールアドレス test@liferay.com とパスワード testを使用してください。 プロンプトが表示されたら、パスワードを learnに変更します。
次に、以下の手順に従います。
-
サンプルモジュールをダウンロードして解凍します。
curl https://resources.learn.liferay.com/examples/liferay-g9b6.zip -Ounzip 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が返されます。