oo

ビデオショートカットプロバイダーの作成

Liferay DXP 7.4以降で利用可能

デフォルトでは、Liferayの外部ビデオショートカットは、 YouTubeVimeoFacebook 、および Twitch をサポートしています。 ただし、この機能を拡張して、他のビデオソースをサポートすることができます。

次の手順に従って、独自のビデオショートカットプロバイダーを作成します。

  1. OSGIコンポーネントアノテーション@Componentアノテーションを使用して、OSGiフレームワーク内でプロバイダーをDLVideoExternalShortcutProvider.classサービスとして宣言します。

  2. DLVideoExternalShortcutProviderDLVideoExternalShortcutProviderインターフェースを実装します。

  3. インターフェイスメソッドのオーバーライド :インターフェイスのgetDLVideoExternalShortcut()メソッドをオーバーライドします。 このメソッドは、 DLVideoExternalShortcut インターフェイスのインスタンスを作成し、URL文字列を受け取ります。 実装において次のことが実行されるか確認してください。

    • 受信したURLが定義済みのURLパターンと一致するかどうかを確認します。
    • URLがパターンに一致しない場合、プログラムはnullを返す必要があります。 Liferayは、一致するものを探して他の利用可能なプロバイダーをチェックします。
    • URLがパターンと一致する場合は、URLを解析し、外部ソースから追加情報をフェッチして、収集した情報を含むDLVideoExternalShortcutインスタンスを返します。
  4. DLVideoExternalShortcutメソッドのオーバーライドgetDLVideoExternalShortcut()メソッドによって返されるDLVideoExternalShortcutインスタンスに必要なメソッドをオーバーライドします。

    • getURL():元のビデオURLを取得します。
    • renderHTML():ユーザーインターフェイスにビデオを埋め込みます。 これは通常、iframeをレンダリングしますが、ユーザー向けにビデオをレンダリングするHTMLビデオタグにすることもできます。
  5. 次のオプションのメソッドをオーバーライドします。

    • getDescription():このメソッドを使用して、元のビデオの説明を取得します。デフォルト値はnullです。
    • getThumbnailURL():このメソッドを使用して、ビデオのサムネイルを取得します。デフォルト値はnullです。
    • getTitle():このメソッドを使用して、元のビデオのタイトルを取得します。デフォルト値はnullです。

以下は、 外部のビデオショートカットプロバイダーのサンプル で、独自に実装するための最低限の要件を示しています。 より複雑な例については、 既存のプロバイダー を参照してください。

サンプルビデオプロバイダーのデプロイ

新しいLiferay インスタンスを起動し、以下を実行します。

docker run -it -m 8g -p 8080:8080 liferay/portal:7.4.3.112-ga112。

http://localhost:8080でLiferayへのサインインします。 メールアドレス test@liferay.com とパスワード test を使用してください。 プロンプトが表示されたら、パスワードを learn に変更します。

次に、以下の手順を実行します。

  1. サンプルモジュールをダウンロードして解凍する。

    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
    
  2. 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)に生成されます。

  3. プロバイダーが正常にデプロイされ、コンテナコンソールを介して開始されたことを確認します。

    Processing com.acme.G9B6.impl-1.0.0.jar
    STARTED com.acme.G9B6.impl-1.0.0 [1356]
    
  4. 短いDailymotionのURLで新しい外部動画ショートカットを作成し、モジュールが機能していることを確認します (例:https://dai.ly/x7szh28)。

    成功した場合、LiferayはDailymotionをサポートされているプラットフォームとして認識します。

    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が返されます。

関連トピック