すべてのプロダクト
Search
ドキュメントセンター

Content Moderation:Video Moderation 2.0 SDK および統合ガイド

最終更新日:Jan 07, 2026

Video Moderation 2.0 は、ソフトウェア開発キット (SDK) およびネイティブ HTTPS リクエストによる API 呼び出しをサポートしています。統合を簡素化するために SDK を使用することを推奨します。SDK は、署名検証や本文形式の構築などの詳細を処理します。このトピックでは、Video Moderation 2.0 との統合方法について説明します。

ステップ 1: サービスの有効化

Content Moderation 2.0 サービスを有効化 のページに移動して、Video Moderation 2.0 サービスを有効化します。API 操作を呼び出すと、使用量に基づいて自動的に課金されます。詳細については、「課金」をご参照ください。

Video Moderation 2.0 サービスを有効化すると、デフォルトの課金方法は従量課金になります。日々の料金は実際の使用量に基づいて計算されます。サービスを呼び出さない場合、料金は発生しません。

ステップ 2: RAM ユーザーへの権限付与

SDK または API と統合する前に、Resource Access Management (RAM) ユーザーに権限を付与します。RAM ユーザーの AccessKey ペアを作成します。Alibaba Cloud API 操作を呼び出す際には、この AccessKey ペアを使用して ID 検証を完了する必要があります。詳細については、「AccessKey ペアの取得」をご参照ください。

手順

  1. RAM 管理者として RAM コンソールにログインします。

  2. RAM ユーザーを作成します。

    詳細については、「RAM ユーザーの作成」をご参照ください。

  3. RAM ユーザーに AliyunYundunGreenWebFullAccess システムポリシーを付与します。

    詳細については、「RAM ユーザーへの権限付与」をご参照ください。

    上記の手順を完了すると、RAM ユーザーとして Content Moderation API を呼び出すことができます。

ステップ 3: 動画審査サービスのインストールと統合

以下のリージョンがサポートされています:

リージョン

パブリックエンドポイント

VPC エンドポイント

サポートされるサービス

シンガポール

green-cip.ap-southeast-1.aliyuncs.com

green-cip-vpc.ap-southeast-1.aliyuncs.com

videoDetection_global, videoDetectionByVL_global, liveStreamDetection_global, liveStreamDetectionByVL_global

米国 (バージニア)

https://green-cip.us-east-1.aliyuncs.com

https://green-cip-vpc.us-east-1.aliyuncs.com

videoDetection_global, liveStreamDetection_global

米国 (シリコンバレー)

https://green-cip.us-west-1.aliyuncs.com

利用不可

ドイツ (フランクフルト)

green-cip.eu-central-1.aliyuncs.com

利用不可

説明

他のプログラミング言語の SDK サンプルコードが必要な場合は、OpenAPI Explorer で API 操作をデバッグできます。このツールは、対応する API 操作の SDK サンプルコードを自動的に生成します。以下の API 操作はオンラインデバッグが可能です:

Alibaba Cloud SDK コードでは、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を定義することで、デフォルトのアクセス認証情報を作成できます。Alibaba Cloud サービスの API 操作を呼び出すと、システムは直接認証情報にアクセスし、ご利用の AccessKey ペアを読み取り、自動的に認証を完了します。SDK サンプルコードを使用する前に、環境変数を設定する必要があります。詳細については、「認証情報の設定」をご参照ください。

API パラメーターの詳細については、「動画ファイル審査 2.0 API」および「ライブストリーム審査 2.0 API」をご参照ください。

Java SDK

Java 1.8 以降がサポートされています。

ソースコードについては、「Java SDK ソースコード」または「Java SDK ソースコード (OSS パス)」をご参照ください。

以下の 3 種類の動画審査がサポートされています。

パブリックにアクセス可能な動画の検出

シナリオ

審査したい動画がインターネット経由でアクセス可能な場合、Video Moderation 2.0 は URL を使用してファイルを取得し、審査を実行できます。

  1. Maven プロジェクトで SDK を使用するには、pom.xml ファイルに以下の依存関係を追加します。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>2.2.11</version>
    </dependency>
  2. Java SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationRequest;
      import com.aliyun.green20220302.models.VideoModerationResponse;
      import com.aliyun.green20220302.models.VideoModerationResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VideoModerationDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
             /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("環境変数から RAM ユーザーの AccessKey ID を取得します。");
              config.setAccessKeySecret("環境変数から RAM ユーザーの AccessKey Secret を取得します。");
              //必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //接続タイムアウト (ミリ秒単位)。
              config.setReadTimeout(6000);
              //読み取りタイムアウト (ミリ秒単位)。
              config.setConnectTimeout(3000);
              //HTTP プロキシを設定します。
              //config.setHttpProxy("http://10.10.xx.xx:xxxx");
              //HTTPS プロキシを設定します。
              //config.setHttpsProxy("https://10.10.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              serviceParameters.put("url", "https://xxx.oss.aliyuncs.com/xxx.mp4");
      
              VideoModerationRequest videoModerationRequest = new VideoModerationRequest();
              // 審査サービス:videoDetection_global
              videoModerationRequest.setService("videoDetection_global");
              videoModerationRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationResponse response = client.videoModeration(videoModerationRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationResponseBody result = response.getBody();
                      System.out.println(JSON.toJSONString(result));
                      System.out.println("requestId = " + result.getRequestId());
                      System.out.println("code = " + result.getCode());
                      System.out.println("msg = " + result.getMessage());
                      Integer code = result.getCode();
                      if (200 == code) {
                          VideoModerationResponseBody.VideoModerationResponseBodyData data = result.getData();
                          System.out.println("taskId = [" + data.getTaskId() + "]");
                      } else {
                          System.out.println("動画審査に失敗しました。コード:" + code);
                      }
                  } else {
                      System.out.println("リクエストに失敗しました。ステータス:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • コード例:動画検出タスクの取得

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationResultRequest;
      import com.aliyun.green20220302.models.VideoModerationResultResponse;
      import com.aliyun.green20220302.models.VideoModerationResultResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      public class VideoModerationResultDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("環境変数から RAM ユーザーの AccessKey ID を取得します。");
              config.setAccessKeySecret("環境変数から RAM ユーザーの AccessKey Secret を取得します。");
              //必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //接続タイムアウト (ミリ秒単位)。
              config.setReadTimeout(6000);
              //読み取りタイムアウト (ミリ秒単位)。
              config.setConnectTimeout(3000);
              //HTTP プロキシを設定します。
              //config.setHttpProxy("http://10.10.xx.xx:xxxx");
              //HTTPS プロキシを設定します。
              //config.setHttpsProxy("https://10.10.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // タスク送信時に返されるタスクの ID。
              serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
      
              VideoModerationResultRequest videoModerationResultRequest = new VideoModerationResultRequest();
              // 審査サービス:videoDetection_global
              videoModerationResultRequest.setService("videoDetection_global");
              videoModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationResultResponse response = client.videoModerationResult(videoModerationResultRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationResultResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 == result.getCode()) {
                          VideoModerationResultResponseBody.VideoModerationResultResponseBodyData data = result.getData();
                          System.out.println("dataId = " + data.getDataId());
                          System.out.println("riskLevel = " + data.getRiskLevel());
                          System.out.println("audioResult = " + JSON.toJSONString(data.getAudioResult()));
                          System.out.println("frameResult = " + JSON.toJSONString(data.getFrameResult()));
                      } else {
                          System.out.println("動画審査結果のクエリに失敗しました。コード:" + result.getCode());
                      }
                  } else {
                      System.out.println("リクエストに失敗しました。ステータス:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • ライブストリーム審査タスクをキャンセルするためのサンプルコード

      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationCancelRequest;
      import com.aliyun.green20220302.models.VideoModerationCancelResponse;
      import com.aliyun.green20220302.models.VideoModerationCancelResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VideoModerationCancelDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("環境変数から RAM ユーザーの AccessKey ID を取得します。");
              config.setAccessKeySecret("環境変数から RAM ユーザーの AccessKey Secret を取得します。");
              //必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //接続タイムアウト (ミリ秒単位)。
              config.setReadTimeout(6000);
              //読み取りタイムアウト (ミリ秒単位)。
              config.setConnectTimeout(3000);
              //HTTP プロキシを設定します。
              //config.setHttpProxy("http://xx.xx.xx.xx:xxxx");
              //HTTPS プロキシを設定します。
              //config.setHttpsProxy("https://xx.xx.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // タスク送信時に返されるタスクの ID。
              serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
              VideoModerationCancelRequest videoModerationCancelRequest = new VideoModerationCancelRequest();
              
              videoModerationCancelRequest.setService("liveStreamDetection_global");
              videoModerationCancelRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationCancelResponse response = client.videoModerationCancel(videoModerationCancelRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationCancelResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 != result.getCode()) {
                          System.out.println("動画審査タスクのキャンセルに失敗しました。コード:" + result.getCode());
                      }
                  } else {
                      System.out.println("リクエストに失敗しました。ステータス:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

ローカル動画の検出

シナリオ

審査したい動画がローカルマシン上にあり、パブリック URL を持たない場合、Content Moderation が提供する Object Storage Service (OSS) バケットに動画をアップロードできます。Video Moderation 2.0 は OSS に直接アクセスし、動画コンテンツを取得して審査を実行できます。

  1. Maven プロジェクトで SDK を使用するには、pom.xml ファイルに以下の依存関係を追加します。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>2.2.11</version>
    </dependency>

    OSS SDK をインストールします:

    <dependency>
      <groupId>com.aliyun.oss</groupId>
      <artifactId>aliyun-sdk-oss</artifactId>
      <version>3.16.3</version>
    </dependency>
  2. Java SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      import com.alibaba.fastjson.JSON;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.DescribeUploadTokenResponse;
      import com.aliyun.green20220302.models.DescribeUploadTokenResponseBody;
      import com.aliyun.green20220302.models.VideoModerationRequest;
      import com.aliyun.green20220302.models.VideoModerationResponse;
      import com.aliyun.green20220302.models.VideoModerationResponseBody;
      import com.aliyun.oss.OSS;
      import com.aliyun.oss.OSSClientBuilder;
      import com.aliyun.oss.model.PutObjectRequest;
      import com.aliyun.teaopenapi.models.Config;
      import com.aliyun.teautil.models.RuntimeOptions;
      
      import java.io.File;
      import java.util.HashMap;
      import java.util.Map;
      import java.util.UUID;
      
      public class LocalVideoModeration {
      
          //サービスが VPC にデプロイされているかどうかを指定します。
          public static boolean isVPC = false;
      
          //ファイルのアップロードに使用されるトークン。キーはエンドポイント、値はトークンです。
          public static Map<String, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData> tokenMap = new HashMap<>();
      
          //ファイルアップロードリクエスト用のクライアント。
          public static OSS ossClient = null;
      
          /**
           * リクエストクライアントを作成します。
           *
           * @param accessKeyId
           * @param accessKeySecret
           * @param endpoint
           * @return
           * @throws Exception
           */
          public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              Config config = new Config();
              config.setAccessKeyId(accessKeyId);
              config.setAccessKeySecret(accessKeySecret);
              // 必要に応じてリージョンとエンドポイントを変更します。
              config.setEndpoint(endpoint);
              return new Client(config);
          }
      
          /**
           * ファイルアップロードクライアントを作成します。
           *
           * @param tokenData
           * @param isVPC
           */
          public static void getOssClient(DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData, boolean isVPC) {
              //注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
              if (isVPC) {
                  ossClient = new OSSClientBuilder().build(tokenData.ossInternalEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken());
              } else {
                  ossClient = new OSSClientBuilder().build(tokenData.ossInternetEndPoint, tokenData.getAccessKeyId(), tokenData.getAccessKeySecret(), tokenData.getSecurityToken());
              }
          }
      
          /**
           * ファイルをアップロードします。
           *
           * @param filePath
           * @param tokenData
           * @return
           * @throws Exception
           */
          public static String uploadFile(String filePath, DescribeUploadTokenResponseBody.DescribeUploadTokenResponseBodyData tokenData) throws Exception {
              String[] split = filePath.split("\\.");
              String objectName;
              if (split.length > 1) {
                  objectName = tokenData.getFileNamePrefix() + UUID.randomUUID() + "." + split[split.length - 1];
              } else {
                  objectName = tokenData.getFileNamePrefix() + UUID.randomUUID();
              }
              PutObjectRequest putObjectRequest = new PutObjectRequest(tokenData.getBucketName(), objectName, new File(filePath));
              ossClient.putObject(putObjectRequest);
              return objectName;
          }
      
          public static VideoModerationResponse invokeFunction(String accessKeyId, String accessKeySecret, String endpoint) throws Exception {
              //注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
              Client client = createClient(accessKeyId, accessKeySecret, endpoint);
              RuntimeOptions runtime = new RuntimeOptions();
      
              //ローカルファイルの完全なパス。例:D:\localPath\exampleFile.mp4。
              String filePath = "D:\localPath\exampleFile.mp4";
              //ファイルアップロード用のトークンを取得します。
              if (tokenMap.get(endpoint) == null || tokenMap.get(endpoint).expiration <= System.currentTimeMillis() / 1000) {
                  DescribeUploadTokenResponse tokenResponse = client.describeUploadToken();
                  tokenMap.put(endpoint, tokenResponse.getBody().getData());
              }
              //ファイルアップロードリクエスト用のクライアント。
              getOssClient(tokenMap.get(endpoint), isVPC);
      
              //ファイルをアップロードします。
              String objectName = uploadFile(filePath, tokenMap.get(endpoint));
      
              // 審査パラメーターを構築します。
              Map<String, String> serviceParameters = new HashMap<>();
              //ファイルアップロード情報。
              serviceParameters.put("ossBucketName", tokenMap.get(endpoint).getBucketName());
              serviceParameters.put("ossObjectName", objectName);
              serviceParameters.put("dataId", UUID.randomUUID().toString());
      
              VideoModerationRequest request = new VideoModerationRequest();
              // 審査サービス:videoDetection_global
              request.setService("videoDetection_global");
              request.setServiceParameters(JSON.toJSONString(serviceParameters));
      
              VideoModerationResponse response = null;
              try {
                  response = client.videoModerationWithOptions(request, runtime);
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return response;
          }
      
          public static void main(String[] args) throws Exception {
              /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得します。";
              String accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得します。";
              // 必要に応じてリージョンとエンドポイントを変更します。
              VideoModerationResponse response = invokeFunction(accessKeyId, accessKeySecret, "green-cip.ap-southeast-1.aliyuncs.com");
              try {
                  // 審査結果を出力します。
                  if (response != null) {
                      if (response.getStatusCode() == 200) {
                          VideoModerationResponseBody body = response.getBody();
                          System.out.println(JSON.toJSONString(body));
                          System.out.println("requestId = " + body.getRequestId());
                          System.out.println("code = " + body.getCode());
                          System.out.println("msg = " + body.getMessage());
                          Integer code = body.getCode();
                          if (200 == code) {
                              VideoModerationResponseBody.VideoModerationResponseBodyData data = body.getData();
                              System.out.println("taskId = [" + data.getTaskId() + "]");
                          } else {
                              System.out.println("動画審査に失敗しました。コード:" + code);
                          }
                      } else {
                          System.out.println("リクエストに失敗しました。ステータス:" + response.getStatusCode());
                      }
                  }
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              } }
    • 動画検出タスクのコード例

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationResultRequest;
      import com.aliyun.green20220302.models.VideoModerationResultResponse;
      import com.aliyun.green20220302.models.VideoModerationResultResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      public class VideoModerationResultDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("環境変数から RAM ユーザーの AccessKey ID を取得します。");
              config.setAccessKeySecret("環境変数から RAM ユーザーの AccessKey Secret を取得します。");
              //必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //接続タイムアウト (ミリ秒単位)。
              config.setReadTimeout(6000);
              //読み取りタイムアウト (ミリ秒単位)。
              config.setConnectTimeout(3000);
              //HTTP プロキシを設定します。
              //config.setHttpProxy("http://10.10.xx.xx:xxxx");
              //HTTPS プロキシを設定します。
              //config.setHttpsProxy("https://10.10.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // タスク送信時に返されるタスクの ID。
              serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
      
              VideoModerationResultRequest videoModerationResultRequest = new VideoModerationResultRequest();
              // 審査サービス:videoDetection_global
              videoModerationResultRequest.setService("videoDetection_global");
              videoModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationResultResponse response = client.videoModerationResult(videoModerationResultRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationResultResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 == result.getCode()) {
                          VideoModerationResultResponseBody.VideoModerationResultResponseBodyData data = result.getData();
                          System.out.println("dataId = " + data.getDataId());
                          System.out.println("riskLevel = " + data.getRiskLevel());
                          System.out.println("audioResult = " + JSON.toJSONString(data.getAudioResult()));
                          System.out.println("frameResult = " + JSON.toJSONString(data.getFrameResult()));
                      } else {
                          System.out.println("動画審査結果のクエリに失敗しました。コード:" + result.getCode());
                      }
                  } else {
                      System.out.println("リクエストに失敗しました。ステータス:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • ライブストリーム審査タスクをキャンセルするためのサンプルコード

      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationCancelRequest;
      import com.aliyun.green20220302.models.VideoModerationCancelResponse;
      import com.aliyun.green20220302.models.VideoModerationCancelResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VideoModerationCancelDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("環境変数から RAM ユーザーの AccessKey ID を取得します。");
              config.setAccessKeySecret("環境変数から RAM ユーザーの AccessKey Secret を取得します。");
              //必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //接続タイムアウト (ミリ秒単位)。
              config.setReadTimeout(6000);
              //読み取りタイムアウト (ミリ秒単位)。
              config.setConnectTimeout(3000);
              //HTTP プロキシを設定します。
              //config.setHttpProxy("http://xx.xx.xx.xx:xxxx");
              //HTTPS プロキシを設定します。
              //config.setHttpsProxy("https://xx.xx.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // タスク送信時に返されるタスクの ID。
              serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
              VideoModerationCancelRequest videoModerationCancelRequest = new VideoModerationCancelRequest();
              
              videoModerationCancelRequest.setService("liveStreamDetection_global");
              videoModerationCancelRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationCancelResponse response = client.videoModerationCancel(videoModerationCancelRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationCancelResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 != result.getCode()) {
                          System.out.println("動画審査タスクのキャンセルに失敗しました。コード:" + result.getCode());
                      }
                  } else {
                      System.out.println("リクエストに失敗しました。ステータス:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

OSS 内の動画の審査

シナリオ

審査したい動画ファイルが既に Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation に OSS へのアクセス権限を付与できます。Video Moderation 2.0 は、サービスロールを通じて OSS からファイルを取得し、審査を実行できます。クラウドリソースアクセス承認ページに移動して、サービスロールを作成します。

  1. Maven プロジェクトで SDK を使用するには、pom.xml ファイルに以下の依存関係を追加します。

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>green20220302</artifactId>
      <version>2.2.11</version>
    </dependency>
  2. Java SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationRequest;
      import com.aliyun.green20220302.models.VideoModerationResponse;
      import com.aliyun.green20220302.models.VideoModerationResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VideoModerationDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
             /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("環境変数から RAM ユーザーの AccessKey ID を取得します。");
              config.setAccessKeySecret("環境変数から RAM ユーザーの AccessKey Secret を取得します。");
              //必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //接続タイムアウト (ミリ秒単位)。
              config.setReadTimeout(6000);
              //読み取りタイムアウト (ミリ秒単位)。
              config.setConnectTimeout(3000);
              //HTTP プロキシを設定します。
              //config.setHttpProxy("http://10.10.xx.xx:xxxx");
              //HTTPS プロキシを設定します。
              //config.setHttpsProxy("https://10.10.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              serviceParameters.put("ossBucketName", "bucket_01");
              serviceParameters.put("ossObjectName", "20240307/07/28/test.flv");
              serviceParameters.put("ossRegionId", "ap-southeast-1");
      
              VideoModerationRequest videoModerationRequest = new VideoModerationRequest();
              // 審査サービス:videoDetection_global
              videoModerationRequest.setService("videoDetection_global");
              videoModerationRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationResponse response = client.videoModeration(videoModerationRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationResponseBody result = response.getBody();
                      System.out.println(JSON.toJSONString(result));
                      System.out.println("requestId = " + result.getRequestId());
                      System.out.println("code = " + result.getCode());
                      System.out.println("msg = " + result.getMessage());
                      Integer code = result.getCode();
                      if (200 == code) {
                          VideoModerationResponseBody.VideoModerationResponseBodyData data = result.getData();
                          System.out.println("taskId = [" + data.getTaskId() + "]");
                      } else {
                          System.out.println("動画審査に失敗しました。コード:" + code);
                      }
                  } else {
                      System.out.println("リクエストに失敗しました。ステータス:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • 動画検出タスクのサンプルコード

      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationResultRequest;
      import com.aliyun.green20220302.models.VideoModerationResultResponse;
      import com.aliyun.green20220302.models.VideoModerationResultResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      public class VideoModerationResultDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("環境変数から RAM ユーザーの AccessKey ID を取得します。");
              config.setAccessKeySecret("環境変数から RAM ユーザーの AccessKey Secret を取得します。");
              //必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //接続タイムアウト (ミリ秒単位)。
              config.setReadTimeout(6000);
              //読み取りタイムアウト (ミリ秒単位)。
              config.setConnectTimeout(3000);
              //HTTP プロキシを設定します。
              //config.setHttpProxy("http://10.10.xx.xx:xxxx");
              //HTTPS プロキシを設定します。
              //config.setHttpsProxy("https://10.10.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // タスク送信時に返されるタスクの ID。
              serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
      
              VideoModerationResultRequest videoModerationResultRequest = new VideoModerationResultRequest();
              // 審査サービス:videoDetection_global
              videoModerationResultRequest.setService("videoDetection_global");
              videoModerationResultRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationResultResponse response = client.videoModerationResult(videoModerationResultRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationResultResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 == result.getCode()) {
                          VideoModerationResultResponseBody.VideoModerationResultResponseBodyData data = result.getData();
                          System.out.println("dataId = " + data.getDataId());
                          System.out.println("riskLevel = " + data.getRiskLevel());
                          System.out.println("audioResult = " + JSON.toJSONString(data.getAudioResult()));
                          System.out.println("frameResult = " + JSON.toJSONString(data.getFrameResult()));
                      } else {
                          System.out.println("動画審査結果のクエリに失敗しました。コード:" + result.getCode());
                      }
                  } else {
                      System.out.println("リクエストに失敗しました。ステータス:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }
    • ライブストリーム審査タスクをキャンセルするためのサンプルコード

      import com.alibaba.fastjson.JSONObject;
      import com.aliyun.green20220302.Client;
      import com.aliyun.green20220302.models.VideoModerationCancelRequest;
      import com.aliyun.green20220302.models.VideoModerationCancelResponse;
      import com.aliyun.green20220302.models.VideoModerationCancelResponseBody;
      import com.aliyun.teaopenapi.models.Config;
      
      
      public class VideoModerationCancelDemo {
      
          public static void main(String[] args) throws Exception {
              Config config = new Config();
              /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * 環境変数を取得する一般的な方法:
               * 方法 1:
               *     RAM ユーザーの AccessKey ID を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               * 方法 2:
               *     RAM ユーザーの AccessKey ID を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_ID");
               *     RAM ユーザーの AccessKey Secret を取得する:System.getProperty("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
               */
              config.setAccessKeyId("環境変数から RAM ユーザーの AccessKey ID を取得します。");
              config.setAccessKeySecret("環境変数から RAM ユーザーの AccessKey Secret を取得します。");
              //必要に応じてリージョンとエンドポイントを変更します。
              config.setRegionId("ap-southeast-1");
              config.setEndpoint("green-cip.ap-southeast-1.aliyuncs.com");
              //接続タイムアウト (ミリ秒単位)。
              config.setReadTimeout(6000);
              //読み取りタイムアウト (ミリ秒単位)。
              config.setConnectTimeout(3000);
              //HTTP プロキシを設定します。
              //config.setHttpProxy("http://xx.xx.xx.xx:xxxx");
              //HTTPS プロキシを設定します。
              //config.setHttpsProxy("https://xx.xx.xx.xx:xxxx");
              Client client = new Client(config);
      
              JSONObject serviceParameters = new JSONObject();
              // タスク送信時に返されるタスクの ID。
              serviceParameters.put("taskId", "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
              VideoModerationCancelRequest videoModerationCancelRequest = new VideoModerationCancelRequest();
              
              videoModerationCancelRequest.setService("liveStreamDetection_global");
              videoModerationCancelRequest.setServiceParameters(serviceParameters.toJSONString());
      
              try {
                  VideoModerationCancelResponse response = client.videoModerationCancel(videoModerationCancelRequest);
                  if (response.getStatusCode() == 200) {
                      VideoModerationCancelResponseBody result = response.getBody();
                      System.out.println("requestId=" + result.getRequestId());
                      System.out.println("code=" + result.getCode());
                      System.out.println("msg=" + result.getMessage());
                      if (200 != result.getCode()) {
                          System.out.println("動画審査タスクのキャンセルに失敗しました。コード:" + result.getCode());
                      }
                  } else {
                      System.out.println("リクエストに失敗しました。ステータス:" + response.getStatusCode());
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          }
      }

Python SDK

Python 3.6 以降がサポートされています。

ソースコードについては、「Python SDK ソースコード」をご参照ください。

以下の 3 種類の動画審査がサポートされています。

パブリックインターネット経由でアクセス可能な動画の審査

シナリオ

審査したい動画がインターネット経由でアクセス可能な場合、Video Moderation 2.0 は URL を使用してファイルを取得し、審査を実行できます。

  1. 以下のコマンドを実行して pip をインストールできます。

    pip install alibabacloud_green20220302==2.2.11
  2. Python SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      #encoding:utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
                  # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  # プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
                  # 環境変数を取得する一般的な方法:
                  # RAM ユーザーの AccessKey ID を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                  # RAM ユーザーの AccessKey Secret を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                  access_key_id='環境変数から RAM ユーザーの AccessKey ID を取得します。',
                  access_key_secret='環境変数から RAM ユーザーの AccessKey Secret を取得します。',
                  #接続タイムアウト (ミリ秒単位)。
                  connect_timeout=3000,
                  #読み取りタイムアウト (ミリ秒単位)。
                  read_timeout=6000,
                  # 必要に応じてリージョンとエンドポイントを変更します。
                  region_id='ap-southeast-1',
                  endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      serviceParameters = {
          'url': 'https://xxx.oss.aliyuncs.com/xxx.mp4'
      }
      videoModerationRequest = models.VideoModerationRequest(
          # 審査サービス:videoDetection_global
          service='videoDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation(videoModerationRequest)
          if response.status_code == 200:
              # リクエストは成功しました。
              # 審査結果を取得します。
              result = response.body
              print('リクエストは成功しました。結果:{}'.format(result))
          else:
              print('リクエストに失敗しました。ステータス:{}、結果:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
    • 動画検出タスクの結果を取得

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
                  # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  # プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
                  # 環境変数を取得する一般的な方法:
                  # RAM ユーザーの AccessKey ID を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                  # RAM ユーザーの AccessKey Secret を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                  access_key_id='環境変数から RAM ユーザーの AccessKey ID を取得します。',
                  access_key_secret='環境変数から RAM ユーザーの AccessKey Secret を取得します。',
                  #接続タイムアウト (ミリ秒単位)。
                  connect_timeout=3000,
                  #読み取りタイムアウト (ミリ秒単位)。
                  read_timeout=6000,
                  # 必要に応じてリージョンとエンドポイントを変更します。
                  region_id='ap-southeast-1',
                  endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # タスク送信時に返されるタスクの ID。
      serviceParameters = {
          "taskId": 'vi_f_11w5THcbVYctjdxz2C0Afa-1x****'
      }
      videoModerationResultRequest = models.VideoModerationResultRequest(
          # 審査サービス:videoDetection_global
          service='videoDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation_result(videoModerationResultRequest)
          if response.status_code == 200:
              # リクエストは成功しました。
              # 審査結果を取得します。
              result = response.body
              print('リクエストは成功しました。結果:{}'.format(result))
          else:
              print('リクエストに失敗しました。ステータス:{}、結果:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
    • ライブストリーム審査タスクをキャンセルするためのサンプルコード

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
          # プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
          # 環境変数を取得する一般的な方法:
          # RAM ユーザーの AccessKey ID を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # RAM ユーザーの AccessKey Secret を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='環境変数から RAM ユーザーの AccessKey ID を取得します。',
          access_key_secret='環境変数から RAM ユーザーの AccessKey Secret を取得します。',
          # 接続タイムアウト (ミリ秒単位)。
          connect_timeout=10000,
          # 読み取りタイムアウト (ミリ秒単位)。
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # タスク送信時に返されるタスクの ID。
      serviceParameters = {
          "taskId": 'vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****'
      }
      videoModerationCancelRequest = models.VideoModerationCancelRequest(
          # 審査サービス
          service='liveStreamDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation_cancel(videoModerationCancelRequest)
          if response.status_code == 200:
              # リクエストは成功しました。
              result = response.body
              print('リクエストは成功しました。結果:{}'.format(result))
          else:
              print('リクエストに失敗しました。ステータス:{}、結果:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)

ローカル動画の検出

シナリオ

審査したい動画がローカルマシン上にあり、パブリック URL を持たない場合、Content Moderation が提供する Object Storage Service (OSS) バケットに動画をアップロードできます。Video Moderation 2.0 は OSS に直接アクセスし、動画コンテンツを取得して審査を実行できます。

  1. 以下のコマンドを実行して pip をインストールします。

    pip install alibabacloud_green20220302==2.2.11

    OSS SDK をインストールします:

    pip install oss2
  2. Python SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      from alibabacloud_tea_util.client import Client as UtilClient
      from alibabacloud_tea_util import models as util_models
      import json
      import uuid
      
      import oss2
      import time
      
      config = Config(
          # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
          # プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
          # 環境変数を取得する一般的な方法:
          # RAM ユーザーの AccessKey ID を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # RAM ユーザーの AccessKey Secret を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='環境変数から RAM ユーザーの AccessKey ID を取得します。',
          access_key_secret='環境変数から RAM ユーザーの AccessKey Secret を取得します。',
          #接続タイムアウト (ミリ秒単位)。
          connect_timeout=10000,
          #読み取りタイムアウト (ミリ秒単位)。
          read_timeout=10000,
          # 必要に応じてリージョンとエンドポイントを変更します。
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      # 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
      client = Client(config)
      
      bucket = None
      upload_token = None
      
      
      def get_oss_client(is_vpc):
          global upload_token
          global bucket
          if (upload_token == None) or int(upload_token.expiration) <= int(time.time()):
              response = client.describe_upload_token()
      
              upload_token = response.body.data
              auth = oss2.StsAuth(upload_token.access_key_id, upload_token.access_key_secret, upload_token.security_token)
      
              end_point = upload_token.oss_internet_end_point
              if (is_vpc):
                  end_point = upload_token.oss_internal_end_point
              bucket = oss2.Bucket(auth, end_point, upload_token.bucket_name)
      
      
      def upload_file(file_name, is_vpc):
          get_oss_client(is_vpc)
          object_name = upload_token.file_name_prefix + str(uuid.uuid4()) + '.' + file_name.split('.')[-1]
          bucket.put_object_from_file(object_name, file_name)
          return object_name
      
      
      def video_moderation_by_local_file(file_path, is_vpc):
          # 1. ファイルをアップロードします。
          object_name = upload_file(file_path, is_vpc)
      
          # 2. 動画審査を実行します。
          service_parameters = {
              'dataId': str(uuid.uuid4()),
              'ossBucketName': upload_token.bucket_name,
              'ossObjectName': object_name
          }
      
          video_moderation_request = models.VideoModerationRequest(
              # 審査サービス:videoDetection_global
              service='videoDetection_global',
              service_parameters=json.dumps(service_parameters)
          )
      
          # RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
          runtime = util_models.RuntimeOptions()
          runtime.read_timeout = 10000
          runtime.connect_timeout = 10000
          try:
              global client
              response = client.video_moderation_with_options(video_moderation_request, runtime)
              if response.status_code == 200:
                  # リクエストは成功しました。
                  # 審査結果を取得します。
                  result = response.body
                  print('リクエストは成功しました。結果:{}'.format(result))
                  if result.code == 200:
                      result_data = result.data
                      print('結果:{}'.format(result_data))
              else:
                  print('リクエストに失敗しました。ステータス:{}、結果:{}'.format(response.status_code, response))
          except Exception as err:
              print(err)
      
      
      if __name__ == '__main__':
          # ローカルファイルのパス。
          file_path = 'D:/test/video/b652.mp4'
          # サービスが VPC にデプロイされているかどうかを指定します。
          is_vpc = False  # True
          video_moderation_by_local_file(file_path, is_vpc)
          
    • 動画検出のタスク結果の取得

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
                  # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  # プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
                  # 環境変数を取得する一般的な方法:
                  # RAM ユーザーの AccessKey ID を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                  # RAM ユーザーの AccessKey Secret を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                  access_key_id='環境変数から RAM ユーザーの AccessKey ID を取得します。',
                  access_key_secret='環境変数から RAM ユーザーの AccessKey Secret を取得します。',
                  #接続タイムアウト (ミリ秒単位)。
                  connect_timeout=3000,
                  #読み取りタイムアウト (ミリ秒単位)。
                  read_timeout=6000,
                  # 必要に応じてリージョンとエンドポイントを変更します。
                  region_id='ap-southeast-1',
                  endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # タスク送信時に返されるタスクの ID。
      serviceParameters = {
          "taskId": 'vi_f_11w5THcbVYctjdxz2C0Afa-1x****'
      }
      videoModerationResultRequest = models.VideoModerationResultRequest(
          # 審査サービス:videoDetection_global
          service='videoDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation_result(videoModerationResultRequest)
          if response.status_code == 200:
              # リクエストは成功しました。
              # 審査結果を取得します。
              result = response.body
              print('リクエストは成功しました。結果:{}'.format(result))
          else:
              print('リクエストに失敗しました。ステータス:{}、結果:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
    • ライブストリーム審査タスクをキャンセルするためのサンプルコード

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
          # プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
          # 環境変数を取得する一般的な方法:
          # RAM ユーザーの AccessKey ID を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # RAM ユーザーの AccessKey Secret を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='環境変数から RAM ユーザーの AccessKey ID を取得します。',
          access_key_secret='環境変数から RAM ユーザーの AccessKey Secret を取得します。',
          # 接続タイムアウト (ミリ秒単位)。
          connect_timeout=10000,
          # 読み取りタイムアウト (ミリ秒単位)。
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # タスク送信時に返されるタスクの ID。
      serviceParameters = {
          "taskId": 'vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****'
      }
      videoModerationCancelRequest = models.VideoModerationCancelRequest(
          # 審査サービス
          service='liveStreamDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation_cancel(videoModerationCancelRequest)
          if response.status_code == 200:
              # リクエストは成功しました。
              result = response.body
              print('リクエストは成功しました。結果:{}'.format(result))
          else:
              print('リクエストに失敗しました。ステータス:{}、結果:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)

OSS 内の動画の審査

シナリオ

審査したい動画ファイルが既に Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation に OSS へのアクセス権限を付与できます。Video Moderation 2.0 は、サービスロールを通じて OSS からファイルを取得し、審査を実行できます。クラウドリソースアクセス承認ページに移動して、サービスロールを作成します。

  1. 以下のコマンドを実行して pip をインストールします。

    pip install alibabacloud_green20220302==2.2.11
  2. Python SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      #encoding:utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
                  # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  # プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
                  # 環境変数を取得する一般的な方法:
                  # RAM ユーザーの AccessKey ID を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                  # RAM ユーザーの AccessKey Secret を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                  access_key_id='環境変数から RAM ユーザーの AccessKey ID を取得します。',
                  access_key_secret='環境変数から RAM ユーザーの AccessKey Secret を取得します。',
                  #接続タイムアウト (ミリ秒単位)。
                  connect_timeout=3000,
                  #読み取りタイムアウト (ミリ秒単位)。
                  read_timeout=6000,
                  # 必要に応じてリージョンとエンドポイントを変更します。
                  region_id='ap-southeast-1',
                  endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      serviceParameters = {
          'ossBucketName': 'bucket_01',
          'ossObjectName': '20240307/07/28/test.flv',
          'ossRegionId': 'ap-southeast-1'
      }
      videoModerationRequest = models.VideoModerationRequest(
          # 審査サービス:videoDetection_global
          service='videoDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation(videoModerationRequest)
          if response.status_code == 200:
              # リクエストは成功しました。
              # 審査結果を取得します。
              result = response.body
              print('リクエストは成功しました。結果:{}'.format(result))
          else:
              print('リクエストに失敗しました。ステータス:{}、結果:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
    • 動画検出タスクの結果の取得

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
                  # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  # プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
                  # 環境変数を取得する一般的な方法:
                  # RAM ユーザーの AccessKey ID を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
                  # RAM ユーザーの AccessKey Secret を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
                  access_key_id='環境変数から RAM ユーザーの AccessKey ID を取得します。',
                  access_key_secret='環境変数から RAM ユーザーの AccessKey Secret を取得します。',
                  #接続タイムアウト (ミリ秒単位)。
                  connect_timeout=3000,
                  #読み取りタイムアウト (ミリ秒単位)。
                  read_timeout=6000,
                  # 必要に応じてリージョンとエンドポイントを変更します。
                  region_id='ap-southeast-1',
                  endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # タスク送信時に返されるタスクの ID。
      serviceParameters = {
          "taskId": 'vi_f_11w5THcbVYctjdxz2C0Afa-1x****'
      }
      videoModerationResultRequest = models.VideoModerationResultRequest(
          # 審査サービス:videoDetection_global
          service='videoDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation_result(videoModerationResultRequest)
          if response.status_code == 200:
              # リクエストは成功しました。
              # 審査結果を取得します。
              result = response.body
              print('リクエストは成功しました。結果:{}'.format(result))
          else:
              print('リクエストに失敗しました。ステータス:{}、結果:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)
    • ライブストリーム審査タスクをキャンセルするためのサンプルコード

      # coding=utf-8
      # python version >= 3.6
      from alibabacloud_green20220302.client import Client
      from alibabacloud_green20220302 import models
      from alibabacloud_tea_openapi.models import Config
      import json
      
      config = Config(
          # Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
          # プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
          # 環境変数を取得する一般的な方法:
          # RAM ユーザーの AccessKey ID を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID']
          # RAM ユーザーの AccessKey Secret を取得する:os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          access_key_id='環境変数から RAM ユーザーの AccessKey ID を取得します。',
          access_key_secret='環境変数から RAM ユーザーの AccessKey Secret を取得します。',
          # 接続タイムアウト (ミリ秒単位)。
          connect_timeout=10000,
          # 読み取りタイムアウト (ミリ秒単位)。
          read_timeout=3000,
          region_id='ap-southeast-1',
          endpoint='green-cip.ap-southeast-1.aliyuncs.com'
      )
      
      clt = Client(config)
      
      # タスク送信時に返されるタスクの ID。
      serviceParameters = {
          "taskId": 'vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****'
      }
      videoModerationCancelRequest = models.VideoModerationCancelRequest(
          # 審査サービス
          service='liveStreamDetection_global',
          service_parameters=json.dumps(serviceParameters)
      )
      
      try:
          response = clt.video_moderation_cancel(videoModerationCancelRequest)
          if response.status_code == 200:
              # リクエストは成功しました。
              result = response.body
              print('リクエストは成功しました。結果:{}'.format(result))
          else:
              print('リクエストに失敗しました。ステータス:{}、結果:{}'.format(response.status_code, response))
      except Exception as err:
          print(err)

PHP SDK

PHP 5.6 以降がサポートされています。

ソースコードについては、「PHP SDK ソースコード」をご参照ください。

以下の 3 種類の動画審査がサポートされています。

パブリックにアクセス可能な動画の検出

シナリオ

審査したい動画がインターネット経由でアクセス可能な場合、Video Moderation 2.0 は URL を使用してファイルを取得し、審査を実行できます。

  1. 以下のコマンドを実行して依存関係を追加します。

    composer require alibabacloud/green-20220302 2.2.10
  2. PHP SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
           * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
           * 環境変数を取得する一般的な方法:
           * RAM ユーザーの AccessKey ID を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey Secret を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '環境変数から RAM ユーザーの AccessKey ID を取得します。',
          "accessKeySecret" => '環境変数から RAM ユーザーの AccessKey Secret を取得します。',
          // HTTP プロキシを設定します。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          // HTTPS プロキシを設定します。
          // "httpsProxy" => "https://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
      $client = new Green($config);
      
      $request = new VideoModerationRequest();
      // 審査サービス:動画ファイル審査の場合は videoDetection_global、ライブストリーム審査の場合は liveStreamDetection_global。
      $request->service = "videoDetection_global";
      $serviceParameters = array("url" => "https://xxx.oss.aliyuncs.com/xxx.mp4");
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->videoModerationWithOptions($request, $runtime);
          print_r($response->body);
          if (200 != $response->statusCode) {
              print_r("リクエストに失敗しました。コード:" . $response->statusCode);
              return;
          }
          $body = $response->body;
          print_r("requestId = " . $body->requestId . "\n");
          print_r("code = " . $body->code . "\n");
          print_r("message = " . $body->message . "\n");
          if (200 != $body->code) {
              print_r("動画審査に失敗しました。コード:" . $body->code);
          }
          $data = $body->data;
          print_r("taskId = " . $data->taskId);
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }
    • 動画検出タスクのサンプルコードの取得

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationResultRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
           * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
           * 環境変数を取得する一般的な方法:
           * RAM ユーザーの AccessKey ID を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey Secret を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '環境変数から RAM ユーザーの AccessKey ID を取得します。',
          "accessKeySecret" => '環境変数から RAM ユーザーの AccessKey Secret を取得します。',
          // HTTP プロキシを設定します。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          // HTTPS プロキシを設定します。
          // "httpsProxy" => "https://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
      $client = new Green($config);
      
      $request = new VideoModerationResultRequest();
      // 審査サービス:動画ファイル審査の場合は videoDetection、ライブストリーム審査の場合は liveStreamDetection。
      $request->service = "videoDetection_global";
      $serviceParameters = array("taskId" => "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->videoModerationResultWithOptions($request, $runtime);
          if (200 != $response->statusCode) {
              print_r("リクエストに失敗しました。コード:" . $response->statusCode);
              return;
          }
          $body = $response->body;
          print_r("requestId = " . $body->requestId . "\n");
          print_r("code = " . $body->code . "\n");
          print_r("message = " . $body->message . "\n");
          if (280 == $body->code) {
              print_r("動画審査タスクは処理中です。コード:" . $body->code);
              return;
          }
          if (200 != $body->code) {
              print_r("動画審査結果のクエリに失敗しました。コード:" . $body->code);
              return;
          }
          $data = $body->data;
          print_r("liveId = " . $data->liveId . "\n");
          print_r("dataId = " . $data->dataId . "\n");
          print_r("riskLevel = " . $data->RiskLevel . "\n");
          print_r("audioResult = " . json_encode($data->audioResult) . "\n");
          print_r("frameResult = " . json_encode($data->frameResult) . "\n");
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }
    • ライブストリーム審査タスクをキャンセルするためのサンプルコード

      <?php
        require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationCancelRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
           * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
           * 環境変数を取得する一般的な方法:
           * RAM ユーザーの AccessKey ID を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey Secret を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します',
          "accessKeySecret" => '環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します',
          // HTTP プロキシを設定します。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          // HTTPS プロキシを設定します。
          // "httpsProxy" => "https://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意:インスタンス化されたクライアントをできるだけ再利用して、接続の繰り返し確立を避け、検出パフォーマンスを向上させることを推奨します。
      $client = new Green($config);
      
      $request = new VideoModerationCancelRequest();
      // 審査タイプ:動画ファイル審査の場合は videoDetection、ライブストリーム審査の場合は liveStreamDetection。
      $request->service = "liveStreamDetection_global";
      $serviceParameters = array('taskId' => 'vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****');
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
        $response = $client->videoModerationCancel($request, $runtime);
        print_r($response->body);
        if (200 == $response->statusCode) {
          $body = $response->body;
          print_r("requestId = " . $body->requestId);
          print_r("code = " . $body->code);
          print_r("message = " . $body->message);
          if (200 != $body->code) {
            print_r("video moderation cancel not success. code:" . $body->code);
          }
        } else {
          print_r("response not success. code:" . $response->statusCode);
        }
      } catch (TeaUnableRetryError $e) {
        var_dump($e->getMessage());
        var_dump($e->getErrorInfo());
        var_dump($e->getLastException());
        var_dump($e->getLastRequest());
      }

ローカル動画の検出

シナリオ

審査したい動画がローカルマシン上にあり、パブリック URL を持たない場合、Content Moderation が提供する Object Storage Service (OSS) バケットに動画をアップロードできます。Video Moderation 2.0 は OSS に直接アクセスし、動画コンテンツを取得して審査を実行できます。

  1. 以下のコマンドを実行して依存関係を追加します。

    composer require alibabacloud/green-20220302 2.2.10

    OSS SDK をインストールします:

    composer require aliyuncs/oss-sdk-php
  2. PHP SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationResponse;
      use AlibabaCloud\Tea\Utils\Utils;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationRequest;
      use OSS\OssClient;
      
      // サービスが VPC にデプロイされているかどうかを指定します。
      $isVPC = false;
      // ファイルアップロード用のトークン。
      $tokenArray = array();
      // ファイルアップロードリクエスト用のクライアント。
      $ossClient = null;
      
      /**
       * リクエストクライアントを作成します。
       * @param $accessKeyId
       * @param $accessKeySecret
       * @param $endpoint
       * @return Green
       */
      function create_client($accessKeyId, $accessKeySecret, $endpoint): Green
      {
          $config = new Config([
              "accessKeyId" => $accessKeyId,
              "accessKeySecret" => $accessKeySecret,
              // HTTP プロキシを設定します。
              // "httpProxy" => "http://10.10.xx.xx:xxxx",
              // HTTPS プロキシを設定します。
              // "httpsProxy" => "https://username:password@xxx.xxx.xxx.xxx:9999",
              "endpoint" => $endpoint,
          ]);
          return new Green($config);
      }
      
      /**
       * ファイルアップロードクライアントを作成します。
       * @param $tokenData
       * @return void
       */
      function create_upload_client($tokenData): void
      {
      
          global $isVPC;
          global $ossClient;
          // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
          if ($isVPC) {
              $ossClient = new OssClient($tokenData->accessKeyId, $tokenData->accessKeySecret, $tokenData->ossInternalEndPoint, false, $tokenData->securityToken);
          } else {
              $ossClient = new OssClient($tokenData->accessKeyId, $tokenData->accessKeySecret, $tokenData->ossInternetEndPoint, false, $tokenData->securityToken);
          }
      }
      
      /**
       * ファイルをアップロードします。
       * @param $fileName
       * @param $tokenData
       * @return string
       * @throws \OSS\Core\OssException
       */
      function upload_file($filePath, $tokenData): string
      {
          global $ossClient;
          //OssClient インスタンスを初期化します。
          create_upload_client($tokenData);
          $split = explode(".", $filePath);
          if (count($split) > 1) {
              $objectName = $tokenData->fileNamePrefix . uniqid() . "." . explode(".", $filePath)[count($split) - 1];
          } else {
              $objectName = $tokenData->fileNamePrefix . uniqid();
          }
          //ファイルをアップロードします。
          $ossClient->uploadFile($tokenData->bucketName, $objectName, $filePath);
          return $objectName;
      }
      
      /**
       * 審査タスクを送信します。
       * @param $accessKeyId
       * @param $accessKeySecret
       * @param $endpoint
       * @return VideoModerationResponse
       * @throws \OSS\Core\OssException
       */
      function invoke($accessKeyId, $accessKeySecret, $endpoint): VideoModerationResponse
      {
          global $tokenArray;
          // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
          $client = create_client($accessKeyId, $accessKeySecret, $endpoint);
          // RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
          $runtime = new RuntimeOptions([]);
          // ローカルファイルの完全なパス。例:D:\\localPath\\exampleFile.mp4。
          $filePath = "D:\\test\\video\\b652.mp4";
      
          //ファイルアップロード用のトークンを取得します。
          if (!isset($tokenArray[$endpoint]) || $tokenArray[$endpoint]->expiration <= time()) {
              $token = $client->describeUploadToken();
              $tokenArray[$endpoint] = $token->body->data;
          }
      
          // ファイルをアップロードします。
          $objectName = upload_file($filePath, $tokenArray[$endpoint]);
      
          // 審査パラメーターを構築します。
          $request = new VideoModerationRequest();
          // 例:videoDetection_global
            $request->service = "videoDetection_global";
          // 審査対象ファイルの OSS 情報。
          $serviceParameters = array(
              'ossObjectName' => $objectName,
              'ossBucketName' => $tokenArray[$endpoint]->bucketName,
              'dataId' => uniqid());
          $request->serviceParameters = json_encode($serviceParameters);
          // 審査タスクを送信します。
          return $client->videoModerationWithOptions($request, $runtime);
      }
      
      /**
      * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
      * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
      * 環境変数を取得する一般的な方法:
      * RAM ユーザーの AccessKey ID を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
      * RAM ユーザーの AccessKey Secret を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
      */
      $accessKeyId = '環境変数から RAM ユーザーの AccessKey ID を取得します。';
      $accessKeySecret = '環境変数から RAM ユーザーの AccessKey Secret を取得します。';
      // 必要に応じてリージョンとエンドポイントを変更します。
      $endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
      
      try {
          $response = invoke($accessKeyId, $accessKeySecret, $endpoint);
          print_r(json_encode($response->body, JSON_UNESCAPED_UNICODE));
      } catch (Exception $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }
    • 動画検出タスクのコード例

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationResultRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
           * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
           * 環境変数を取得する一般的な方法:
           * RAM ユーザーの AccessKey ID を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey Secret を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '環境変数から RAM ユーザーの AccessKey ID を取得します。',
          "accessKeySecret" => '環境変数から RAM ユーザーの AccessKey Secret を取得します。',
          // HTTP プロキシを設定します。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          // HTTPS プロキシを設定します。
          // "httpsProxy" => "https://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
      $client = new Green($config);
      
      $request = new VideoModerationResultRequest();
      // 審査サービス:動画ファイル審査の場合は videoDetection、ライブストリーム審査の場合は liveStreamDetection。
      $request->service = "videoDetection_global";
      $serviceParameters = array("taskId" => "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->videoModerationResultWithOptions($request, $runtime);
          if (200 != $response->statusCode) {
              print_r("リクエストに失敗しました。コード:" . $response->statusCode);
              return;
          }
          $body = $response->body;
          print_r("requestId = " . $body->requestId . "\n");
          print_r("code = " . $body->code . "\n");
          print_r("message = " . $body->message . "\n");
          if (280 == $body->code) {
              print_r("動画審査タスクは処理中です。コード:" . $body->code);
              return;
          }
          if (200 != $body->code) {
              print_r("動画審査結果のクエリに失敗しました。コード:" . $body->code);
              return;
          }
          $data = $body->data;
          print_r("liveId = " . $data->liveId . "\n");
          print_r("dataId = " . $data->dataId . "\n");
          print_r("riskLevel = " . $data->RiskLevel . "\n");
          print_r("audioResult = " . json_encode($data->audioResult) . "\n");
          print_r("frameResult = " . json_encode($data->frameResult) . "\n");
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }
    • ライブストリーム審査タスクをキャンセルするためのサンプルコード

      <?php
        require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationCancelRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
           * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。
           * 環境変数を取得する一般的な方法:
           * RAM ユーザーの AccessKey ID を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey Secret を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '環境変数から RAM ユーザーの AccessKey ID を取得することを推奨します',
          "accessKeySecret" => '環境変数から RAM ユーザーの AccessKey Secret を取得することを推奨します',
          // HTTP プロキシを設定します。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          // HTTPS プロキシを設定します。
          // "httpsProxy" => "https://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意:インスタンス化されたクライアントをできるだけ再利用して、接続の繰り返し確立を避け、検出パフォーマンスを向上させることを推奨します。
      $client = new Green($config);
      
      $request = new VideoModerationCancelRequest();
      // 審査タイプ:動画ファイル審査の場合は videoDetection、ライブストリーム審査の場合は liveStreamDetection。
      $request->service = "liveStreamDetection_global";
      $serviceParameters = array('taskId' => 'vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****');
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
        $response = $client->videoModerationCancel($request, $runtime);
        print_r($response->body);
        if (200 == $response->statusCode) {
          $body = $response->body;
          print_r("requestId = " . $body->requestId);
          print_r("code = " . $body->code);
          print_r("message = " . $body->message);
          if (200 != $body->code) {
            print_r("video moderation cancel not success. code:" . $body->code);
          }
        } else {
          print_r("response not success. code:" . $response->statusCode);
        }
      } catch (TeaUnableRetryError $e) {
        var_dump($e->getMessage());
        var_dump($e->getErrorInfo());
        var_dump($e->getLastException());
        var_dump($e->getLastRequest());
      }

OSS 内の動画の審査

シナリオ

審査したい動画ファイルが既に Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation に OSS へのアクセス権限を付与できます。Video Moderation 2.0 は、サービスロールを通じて OSS からファイルを取得し、審査を実行できます。クラウドリソースアクセス承認ページに移動して、サービスロールを作成します。

  1. 以下のコマンドを実行して依存関係を追加します。

    composer require alibabacloud/green-20220302 2.2.10
  2. PHP SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
           * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
           * 環境変数を取得する一般的な方法:
           * RAM ユーザーの AccessKey ID を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey Secret を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '環境変数から RAM ユーザーの AccessKey ID を取得します。',
          "accessKeySecret" => '環境変数から RAM ユーザーの AccessKey Secret を取得します。',
          // HTTP プロキシを設定します。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          // HTTPS プロキシを設定します。
          // "httpsProxy" => "https://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
      $client = new Green($config);
      
      $request = new VideoModerationRequest();
      // 審査サービス:動画ファイル審査の場合は videoDetection_global、ライブストリーム審査の場合は liveStreamDetection_global。
      $request->service = "videoDetection_global";
      $serviceParameters = array(
                // 審査対象のファイル。例:video/001.mp4
              'ossObjectName' => 'video/001.mp4',
              // バケットが配置されているリージョン。例:cn-shanghai
              'ossRegionId' => 'ap-southeast-1',
                // バケットの名前。例:bucket001
              'ossBucketName' => 'bucket001',
              // データの一意の ID。
              'dataId' => uniqid());
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->videoModerationWithOptions($request, $runtime);
          print_r($response->body);
          if (200 != $response->statusCode) {
              print_r("リクエストに失敗しました。コード:" . $response->statusCode);
              return;
          }
          $body = $response->body;
          print_r("requestId = " . $body->requestId . "\n");
          print_r("code = " . $body->code . "\n");
          print_r("message = " . $body->message . "\n");
          if (200 != $body->code) {
              print_r("動画審査に失敗しました。コード:" . $body->code);
          }
          $data = $body->data;
          print_r("taskId = " . $data->taskId);
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }
    • 動画検出タスクのコードサンプルを取得

      <?php
      require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationResultRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
           * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
           * 環境変数を取得する一般的な方法:
           * RAM ユーザーの AccessKey ID を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey Secret を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '環境変数から RAM ユーザーの AccessKey ID を取得します。',
          "accessKeySecret" => '環境変数から RAM ユーザーの AccessKey Secret を取得します。',
          // HTTP プロキシを設定します。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
      $client = new Green($config);
      
      $request = new VideoModerationResultRequest();
      // 審査サービス:動画ファイル審査の場合は videoDetection、ライブストリーム審査の場合は liveStreamDetection。
      $request->service = "videoDetection_global";
      $serviceParameters = array("taskId" => "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****");
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
          $response = $client->videoModerationResultWithOptions($request, $runtime);
          if (200 != $response->statusCode) {
              print_r("リクエストに失敗しました。コード:" . $response->statusCode);
              return;
          }
          $body = $response->body;
          print_r("requestId = " . $body->requestId . "\n");
          print_r("code = " . $body->code . "\n");
          print_r("message = " . $body->message . "\n");
          if (280 == $body->code) {
              print_r("動画審査タスクは処理中です。コード:" . $body->code);
              return;
          }
          if (200 != $body->code) {
              print_r("動画審査結果のクエリに失敗しました。コード:" . $body->code);
              return;
          }
          $data = $body->data;
          print_r("liveId = " . $data->liveId . "\n");
          print_r("dataId = " . $data->dataId . "\n");
          print_r("riskLevel = " . $data->RiskLevel . "\n");
          print_r("audioResult = " . json_encode($data->audioResult) . "\n");
          print_r("frameResult = " . json_encode($data->frameResult) . "\n");
      } catch (TeaUnableRetryError $e) {
          var_dump($e->getMessage());
          var_dump($e->getErrorInfo());
          var_dump($e->getLastException());
          var_dump($e->getLastRequest());
      }
    • ライブストリーム審査タスクをキャンセルするためのサンプルコード

      <?php
        require('vendor/autoload.php');
      
      use AlibabaCloud\SDK\Green\V20220302\Models\VideoModerationCancelRequest;
      use AlibabaCloud\Tea\Exception\TeaUnableRetryError;
      use Darabonba\OpenApi\Models\Config;
      use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
      use AlibabaCloud\SDK\Green\V20220302\Green;
      
      $config = new Config([
          /**
           * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
           * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
           * 環境変数を取得する一般的な方法:
           * RAM ユーザーの AccessKey ID を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
           * RAM ユーザーの AccessKey Secret を取得する:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
           */
          "accessKeyId" => '環境変数から RAM ユーザーの AccessKey ID を取得します。',
          "accessKeySecret" => '環境変数から RAM ユーザーの AccessKey Secret を取得します。',
          // HTTP プロキシを設定します。
          // "httpProxy" => "http://10.10.xx.xx:xxxx",
          // HTTPS プロキシを設定します。
          // "httpsProxy" => "https://10.10.xx.xx:xxxx",
          "endpoint" => "green-cip.ap-southeast-1.aliyuncs.com",
          "regionId" => "ap-southeast-1"
      
      ]);
      // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
      $client = new Green($config);
      
      $request = new VideoModerationCancelRequest();
      // 審査サービス:動画ファイル審査の場合は videoDetection、ライブストリーム審査の場合は liveStreamDetection。
      $request->service = "liveStreamDetection_global";
      $serviceParameters = array('taskId' => 'vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****');
      
      $request->serviceParameters = json_encode($serviceParameters);
      
      $runtime = new RuntimeOptions();
      $runtime->readTimeout = 6000;
      $runtime->connectTimeout = 3000;
      
      try {
        $response = $client->videoModerationCancel($request, $runtime);
        print_r($response->body);
        if (200 == $response->statusCode) {
          $body = $response->body;
          print_r("requestId = " . $body->requestId);
          print_r("code = " . $body->code);
          print_r("message = " . $body->message);
          if (200 != $body->code) {
            print_r("動画審査タスクのキャンセルに失敗しました。コード:" . $body->code);
          }
        } else {
          print_r("リクエストに失敗しました。コード:" . $response->statusCode);
        }
      } catch (TeaUnableRetryError $e) {
        var_dump($e->getMessage());
        var_dump($e->getErrorInfo());
        var_dump($e->getLastException());
        var_dump($e->getLastRequest());
      }

Go SDK

以下の 3 種類の動画審査がサポートされています。

パブリックインターネット経由でアクセス可能な動画の審査

シナリオ

審査したい動画がインターネット経由でアクセス可能な場合、Video Moderation 2.0 は URL を使用してファイルを取得し、審査を実行できます。

  1. 以下のコマンドを実行して依存関係を追加します。

    go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2
  2. Go SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/v3/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。Security Token Service (STS) などのより安全な方法を使用して API 操作を呼び出すことを推奨します。
          config := &openapi.Config{
              /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
               * 環境変数を取得する一般的な方法:
               * RAM ユーザーの AccessKey ID を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * RAM ユーザーの AccessKey Secret を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("環境変数から RAM ユーザーの AccessKey ID を取得します。"),
              AccessKeySecret: tea.String("環境変数から RAM ユーザーの AccessKey Secret を取得します。"),
              // HTTP プロキシを設定します。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // HTTPS プロキシを設定します。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * タイムアウト期間を設定します。サーバー側のエンドツーエンド処理のタイムアウトは 10 秒です。タイムアウト期間を適宜設定してください。
      		 * 設定した ReadTimeout 期間がサーバー側の処理時間より短い場合、ReadTimeout 例外が返されます。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          client, _err := green20220302.NewClient(config)
          if _err != nil {
              panic(_err)
          }
      
          // RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
          runtime := &util.RuntimeOptions{}
          runtime.ReadTimeout = tea.Int(10000)
          runtime.ConnectTimeout = tea.Int(10000)
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "url": "https://xxx.oss.aliyuncs.com/xxx.mp4",
              },
          )
          request := green20220302.VideoModerationRequest{
              Service:           tea.String("videoDetection_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
      
          result, _err := client.VideoModerationWithOptions(&request, runtime)
          if _err != nil {
              panic(_err)
          }
      
          if *result.StatusCode != http.StatusOK {
              fmt.Printf("リクエストに失敗しました。ステータス:%d\n", *result.StatusCode)
              return
          }
          body := result.Body
          fmt.Printf("リクエストは成功しました。RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message)
          if *body.Code != http.StatusOK {
              fmt.Printf("動画審査に失敗しました。コード:%d\n", *body.Code)
              return
          }
          
          data := body.Data
          fmt.Printf("動画審査 taskId:%s\n", *data.TaskId)
      }
    • 動画検出タスクの結果を取得

      package main
      
      import (
      	"encoding/json"
      	"fmt"
      	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      	green20220302 "github.com/alibabacloud-go/green-20220302/v3/client"
      	util "github.com/alibabacloud-go/tea-utils/v2/service"
      	"github.com/alibabacloud-go/tea/tea"
      	"net/http"
      )
      
      func main() {
      	// プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。Security Token Service (STS) などのより安全な方法を使用して API 操作を呼び出すことを推奨します。
          config := &openapi.Config{
              /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
               * 環境変数を取得する一般的な方法:
               * RAM ユーザーの AccessKey ID を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * RAM ユーザーの AccessKey Secret を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("環境変数から RAM ユーザーの AccessKey ID を取得します。"),
              AccessKeySecret: tea.String("環境変数から RAM ユーザーの AccessKey Secret を取得します。"),
              // HTTP プロキシを設定します。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // HTTPS プロキシを設定します。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * タイムアウト期間を設定します。サーバー側のエンドツーエンド処理のタイムアウトは 10 秒です。タイムアウト期間を適宜設定してください。
      		 * 設定した ReadTimeout 期間がサーバー側の処理時間より短い場合、ReadTimeout 例外が返されます。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
      	// RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
      	runtime := &util.RuntimeOptions{}
      	runtime.ReadTimeout = tea.Int(10000)
      	runtime.ConnectTimeout = tea.Int(10000)
      
      	serviceParameters, _ := json.Marshal(
      		map[string]interface{}{
      			"taskId": "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****",
      		},
      	)
      	request := green20220302.VideoModerationResultRequest{
      		Service:           tea.String("videoDetection_global"),
      		ServiceParameters: tea.String(string(serviceParameters)),
      	}
      
      	result, _err := client.VideoModerationResultWithOptions(&request, runtime)
      	if _err != nil {
      		panic(_err)
      	}
      
      	if *result.StatusCode != http.StatusOK {
      		fmt.Printf("リクエストに失敗しました。ステータス:%d\n", *result.StatusCode)
      		return
      	}
      	body := result.Body
      	fmt.Printf("リクエストは成功しました。RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message)
      	if *body.Code == 280 {
      		fmt.Printf("動画審査タスクは処理中です。コード:%d\n", *body.Code)
      		return
      	}
      	if *body.Code != http.StatusOK {
      		fmt.Printf("動画審査結果のクエリに失敗しました。コード:%d\n", *body.Code)
      		return
      	}
      
      	data := body.Data
          fmt.Printf("動画審査結果:%s\n", data)
      	fmt.Printf("動画審査音声結果:%s\n", data.AudioResult)
      	fmt.Printf("動画審査フレーム結果:%s\n", data.FrameResult)
      }
    • ライブストリーム審査タスクをキャンセルするためのサンプルコード

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/v3/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
      	// プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。Security Token Service (STS) などのより安全な方法を使用して API 操作を呼び出すことを推奨します。
          config := &openapi.Config{
              /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
               * 環境変数を取得する一般的な方法:
               * RAM ユーザーの AccessKey ID を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * RAM ユーザーの AccessKey Secret を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("環境変数から RAM ユーザーの AccessKey ID を取得します。"),
              AccessKeySecret: tea.String("環境変数から RAM ユーザーの AccessKey Secret を取得します。"),
              // HTTP プロキシを設定します。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // HTTPS プロキシを設定します。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * タイムアウト期間を設定します。サーバー側のエンドツーエンド処理のタイムアウトは 10 秒です。タイムアウト期間を適宜設定してください。
      		 * 設定した ReadTimeout 期間がサーバー側の処理時間より短い場合、ReadTimeout 例外が返されます。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
          // RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
          runtime := &util.RuntimeOptions{}
          runtime.ReadTimeout = tea.Int(10000)
          runtime.ConnectTimeout = tea.Int(10000)
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "taskId": "vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****",
              },
          )
          request := green20220302.VideoModerationCancelRequest{
              Service:           tea.String("liveStreamDetection_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
      
          result, _err := client.VideoModerationCancelWithOptions(&request, runtime)
          if _err != nil {
              panic(_err)
          }
      
          if *result.StatusCode != http.StatusOK {
              fmt.Printf("リクエストに失敗しました。ステータス:%d\n", *result.StatusCode)
              return
          }
          body := result.Body
          fmt.Printf("リクエストは成功しました。RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message)
          if *body.Code != http.StatusOK {
              fmt.Printf("動画審査タスクのキャンセルに失敗しました。コード:%d\n", *body.Code)
          }
      }

ローカル動画の検出

シナリオ

審査したい動画がローカルマシン上にあり、パブリック URL を持たない場合、Content Moderation が提供する Object Storage Service (OSS) バケットに動画をアップロードできます。Video Moderation 2.0 は OSS に直接アクセスし、動画コンテンツを取得して審査を実行できます。

  1. 以下のコマンドを実行して依存関係を追加します。

    go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2

    OSS SDK をインストールします:

    go get github.com/aliyun/aliyun-oss-go-sdk/oss
  2. Go SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/v3/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "github.com/aliyun/aliyun-oss-go-sdk/oss"
          "github.com/google/uuid"
          "net/http"
          "os"
          "strings"
          "time"
      )
      //ファイルアップロード用のトークン。
      var TokenMap =make(map[string]*green20220302.DescribeUploadTokenResponseBodyData)
      //ファイルアップロード用のクライアント。
      var Bucket *oss.Bucket
      //サービスが VPC にデプロイされているかどうかを指定します。
      var isVPC = false
      //リクエストクライアントを作成します。
      func createClient(accessKeyId string, accessKeySecret string, endpoint string) (*green20220302.Client, error) {
          config := &openapi.Config{
              AccessKeyId: tea.String(accessKeyId),
              AccessKeySecret: tea.String(accessKeySecret),
              // HTTP プロキシを設定します。
              // HttpProxy: tea.String("http://10.10.xx.xx:xxxx"),
              // HTTPS プロキシを設定します。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              Endpoint: tea.String(endpoint),
          }
          //注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
          return green20220302.NewClient(config);
      }
      
      //ファイルアップロードクライアントを作成します。
      func createOssClient(tokenData *green20220302.DescribeUploadTokenResponseBodyData) {
          if isVPC{
              ossClient, err := oss.New(tea.StringValue(tokenData.OssInternalEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken)))
              if err != nil {
                  fmt.Println("Error:", err)
                  os.Exit(-1)
              }
              Bucket, _ =ossClient.Bucket(tea.StringValue(tokenData.BucketName));
          }else {
              ossClient, err := oss.New(tea.StringValue(tokenData.OssInternetEndPoint), tea.StringValue(tokenData.AccessKeyId), tea.StringValue(tokenData.AccessKeySecret), oss.SecurityToken(tea.StringValue(tokenData.SecurityToken)))
              if err != nil {
                  fmt.Println("Error:", err)
                  os.Exit(-1)
              }
              Bucket, _ =ossClient.Bucket(tea.StringValue(tokenData.BucketName));
          }
      }
      
      //ファイルをアップロードします。
      func uploadFile(filePath string,tokenData *green20220302.DescribeUploadTokenResponseBodyData) (string,error) {
          createOssClient(tokenData)
          objectName := tea.StringValue(tokenData.FileNamePrefix) + uuid.New().String() + "." + strings.Split(filePath, ".")[1]
              //ファイルをアップロードします。
              _err := Bucket.PutObjectFromFile(objectName, filePath)
              if _err != nil {
                  fmt.Println("Error:", _err)
                  os.Exit(-1)
              }
          return objectName,_err
      }
      
      func invoke(accessKeyId string, accessKeySecret string, endpoint string) (_result *green20220302.VideoModerationResponse, _err error) {
          //注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
          client, _err := createClient(accessKeyId, accessKeySecret, endpoint)
          if _err != nil {
              return nil,_err
          }
          //ランタイムパラメーターを設定します。この RuntimeOptions インスタンスを使用するリクエストにのみ設定が有効になります。
          runtime := &util.RuntimeOptions{}
          //ローカルファイルの完全なパス。例:D:\localPath\exampleFile.mp4。
          var filePath = "D:\\localPath\\exampleFile.mp4"
          //ファイルアップロード用の一時トークンを取得します。
              tokenData,ok:=TokenMap[endpoint];
              if !ok || tea.Int32Value(tokenData.Expiration) <= int32(time.Now().Unix()) {
                  //ファイルアップロード用の一時トークンを取得します。
                  uploadTokenResponse, _err := client.DescribeUploadToken()
                  if _err != nil {
                      return nil,_err
                  }
                  tokenData = uploadTokenResponse.Body.Data
                  TokenMap[endpoint] = tokenData
              }
               var objectName, _ = uploadFile(filePath,TokenMap[endpoint])
      
          //審査リクエストを構築します。
              serviceParameters, _ := json.Marshal(
                  map[string]interface{}{
                      "ossBucketName": tea.StringValue(TokenMap[endpoint].BucketName),
                      "ossObjectName": objectName,
                      "dataId":   uuid.New().String(),
                  },
              )
              videoModerationRequest := &green20220302.VideoModerationRequest{
                  //例:videoDetection_global
            Service:           tea.String("videoDetection_global"),
                  ServiceParameters: tea.String(string(serviceParameters)),
              }
      
          return client.VideoModerationWithOptions(videoModerationRequest, runtime)
      
      }
      
      func main() {
          /**
           * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
           * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
           * 環境変数を取得する一般的な方法:
           * RAM ユーザーの AccessKey ID を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
           * RAM ユーザーの AccessKey Secret を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
           */
          var accessKeyId= "環境変数から RAM ユーザーの AccessKey ID を取得します。";
          var accessKeySecret= "環境変数から RAM ユーザーの AccessKey Secret を取得します。";
          //必要に応じてリージョンとエンドポイントを変更します。
          var endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
          response,_err := invoke(accessKeyId,accessKeySecret,endpoint)
          
          flag := false
          if _err != nil {
              var err = &tea.SDKError{}
              if _t, ok := _err.(*tea.SDKError); ok {
                  err = _t
                  if *err.StatusCode == 500 {
                      flag = true
                  }
              }
          }
          if response == nil || *response.StatusCode == 500 || *response.Body.Code == 500 {
              flag = true
          }
          //自動ルーティング。リージョンを中国 (北京) に切り替えます。
          if flag {
              endpoint = "green-cip.cn-beijing.aliyuncs.com";
              response, _err = invoke(accessKeyId,accessKeySecret,endpoint)
          }
      
          if response != nil {
              statusCode := tea.IntValue(tea.ToInt(response.StatusCode))
              body := response.Body
              videoModerationResponseData := body.Data
              fmt.Println("requestId:" + tea.StringValue(body.RequestId))
              if statusCode == http.StatusOK {
                  fmt.Println("リクエストは成功しました。レスポンス:" + body.String())
                  if tea.IntValue(tea.ToInt(body.Code)) == 200 {
                      result := videoModerationResponseData.Result
                      fmt.Println("response dataId:" + tea.StringValue(videoModerationResponseData.DataId))
                      for i := 0; i < len(result); i++ {
                          fmt.Println("response label:" + tea.StringValue(result[i].Label))
                          fmt.Println("response confidence:" + tea.ToString(tea.Float32Value(result[i].Confidence)))
                      }
                  } else {
                      fmt.Println("動画審査に失敗しました。ステータス:" + tea.ToString(body.Code))
                  }
              } else {
                  fmt.Print("リクエストに失敗しました。ステータス:" + tea.ToString(statusCode))
              }
          }
      }
    • 動画検出タスクの結果の取得

      package main
      
      import (
      	"encoding/json"
      	"fmt"
      	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      	green20220302 "github.com/alibabacloud-go/green-20220302/v3/client"
      	util "github.com/alibabacloud-go/tea-utils/v2/service"
      	"github.com/alibabacloud-go/tea/tea"
      	"net/http"
      )
      
      func main() {
      	// プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。Security Token Service (STS) などのより安全な方法を使用して API 操作を呼び出すことを推奨します。
          config := &openapi.Config{
              /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
               * 環境変数を取得する一般的な方法:
               * RAM ユーザーの AccessKey ID を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * RAM ユーザーの AccessKey Secret を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("環境変数から RAM ユーザーの AccessKey ID を取得します。"),
              AccessKeySecret: tea.String("環境変数から RAM ユーザーの AccessKey Secret を取得します。"),
              // HTTP プロキシを設定します。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // HTTPS プロキシを設定します。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * タイムアウト期間を設定します。サーバー側のエンドツーエンド処理のタイムアウトは 10 秒です。タイムアウト期間を適宜設定してください。
      		 * 設定した ReadTimeout 期間がサーバー側の処理時間より短い場合、ReadTimeout 例外が返されます。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
      	// RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
      	runtime := &util.RuntimeOptions{}
      	runtime.ReadTimeout = tea.Int(10000)
      	runtime.ConnectTimeout = tea.Int(10000)
      
      	serviceParameters, _ := json.Marshal(
      		map[string]interface{}{
      			"taskId": "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****",
      		},
      	)
      	request := green20220302.VideoModerationResultRequest{
      		Service:           tea.String("videoDetection_global"),
      		ServiceParameters: tea.String(string(serviceParameters)),
      	}
      
      	result, _err := client.VideoModerationResultWithOptions(&request, runtime)
      	if _err != nil {
      		panic(_err)
      	}
      
      	if *result.StatusCode != http.StatusOK {
      		fmt.Printf("リクエストに失敗しました。ステータス:%d\n", *result.StatusCode)
      		return
      	}
      	body := result.Body
      	fmt.Printf("リクエストは成功しました。RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message)
      	if *body.Code == 280 {
      		fmt.Printf("動画審査タスクは処理中です。コード:%d\n", *body.Code)
      		return
      	}
      	if *body.Code != http.StatusOK {
      		fmt.Printf("動画審査結果のクエリに失敗しました。コード:%d\n", *body.Code)
      		return
      	}
      
      	data := body.Data
          fmt.Printf("動画審査結果:%s\n", data)
      	fmt.Printf("動画審査音声結果:%s\n", data.AudioResult)
      	fmt.Printf("動画審査フレーム結果:%s\n", data.FrameResult)
      }
    • ライブストリーム審査タスクをキャンセルするためのサンプルコード

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/v3/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
      	// プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。Security Token Service (STS) などのより安全な方法を使用して API 操作を呼び出すことを推奨します。
          config := &openapi.Config{
              /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
               * 環境変数を取得する一般的な方法:
               * RAM ユーザーの AccessKey ID を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * RAM ユーザーの AccessKey Secret を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("環境変数から RAM ユーザーの AccessKey ID を取得します。"),
              AccessKeySecret: tea.String("環境変数から RAM ユーザーの AccessKey Secret を取得します。"),
              // HTTP プロキシを設定します。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // HTTPS プロキシを設定します。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * タイムアウト期間を設定します。サーバー側のエンドツーエンド処理のタイムアウトは 10 秒です。タイムアウト期間を適宜設定してください。
      		 * 設定した ReadTimeout 期間がサーバー側の処理時間より短い場合、ReadTimeout 例外が返されます。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
          // RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
          runtime := &util.RuntimeOptions{}
          runtime.ReadTimeout = tea.Int(10000)
          runtime.ConnectTimeout = tea.Int(10000)
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "taskId": "vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****",
              },
          )
          request := green20220302.VideoModerationCancelRequest{
              Service:           tea.String("liveStreamDetection_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
      
          result, _err := client.VideoModerationCancelWithOptions(&request, runtime)
          if _err != nil {
              panic(_err)
          }
      
          if *result.StatusCode != http.StatusOK {
              fmt.Printf("リクエストに失敗しました。ステータス:%d\n", *result.StatusCode)
              return
          }
          body := result.Body
          fmt.Printf("リクエストは成功しました。RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message)
          if *body.Code != http.StatusOK {
              fmt.Printf("動画審査タスクのキャンセルに失敗しました。コード:%d\n", *body.Code)
          }
      }

OSS 内の動画の審査

シナリオ

審査したい動画ファイルが既に Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation に OSS へのアクセス権限を付与できます。Video Moderation 2.0 は、サービスロールを通じて OSS からファイルを取得し、審査を実行できます。クラウドリソースアクセス承認ページに移動して、サービスロールを作成します。

  1. 以下のコマンドを実行して依存関係を追加します。

    go git clone --branch v2.2.11 github.com/alibabacloud-go/green-20220302/v2
  2. Go SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/v3/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
          // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。Security Token Service (STS) などのより安全な方法を使用して API 操作を呼び出すことを推奨します。
          config := &openapi.Config{
              /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
               * 環境変数を取得する一般的な方法:
               * RAM ユーザーの AccessKey ID を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * RAM ユーザーの AccessKey Secret を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("環境変数から RAM ユーザーの AccessKey ID を取得します。"),
              AccessKeySecret: tea.String("環境変数から RAM ユーザーの AccessKey Secret を取得します。"),
              // HTTP プロキシを設定します。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // HTTPS プロキシを設定します。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * タイムアウト期間を設定します。サーバー側のエンドツーエンド処理のタイムアウトは 10 秒です。タイムアウト期間を適宜設定してください。
      		 * 設定した ReadTimeout 期間がサーバー側の処理時間より短い場合、ReadTimeout 例外が返されます。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
          client, _err := green20220302.NewClient(config)
          if _err != nil {
              panic(_err)
          }
      
          // RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
          runtime := &util.RuntimeOptions{}
          runtime.ReadTimeout = tea.Int(10000)
          runtime.ConnectTimeout = tea.Int(10000)
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "ossBucketName": "bucket_01",
                  "ossObjectName": "conect/xxx.mp4",
                  "ossRegionId": "ap-southeast-1",
              },
          )
          request := green20220302.VideoModerationRequest{
              Service:           tea.String("videoDetection_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
      
          result, _err := client.VideoModerationWithOptions(&request, runtime)
          if _err != nil {
              panic(_err)
          }
      
          if *result.StatusCode != http.StatusOK {
              fmt.Printf("リクエストに失敗しました。ステータス:%d\n", *result.StatusCode)
              return
          }
          body := result.Body
          fmt.Printf("リクエストは成功しました。RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message)
          if *body.Code != http.StatusOK {
              fmt.Printf("動画審査に失敗しました。コード:%d\n", *body.Code)
              return
          }
          
          data := body.Data
          fmt.Printf("動画審査 taskId:%s\n", *data.TaskId)
      }
    • 動画検出タスクの結果を取得

      package main
      
      import (
      	"encoding/json"
      	"fmt"
      	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      	green20220302 "github.com/alibabacloud-go/green-20220302/v3/client"
      	util "github.com/alibabacloud-go/tea-utils/v2/service"
      	"github.com/alibabacloud-go/tea/tea"
      	"net/http"
      )
      
      func main() {
      	// プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。Security Token Service (STS) などのより安全な方法を使用して API 操作を呼び出すことを推奨します。
          config := &openapi.Config{
              /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
               * 環境変数を取得する一般的な方法:
               * RAM ユーザーの AccessKey ID を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * RAM ユーザーの AccessKey Secret を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("環境変数から RAM ユーザーの AccessKey ID を取得します。"),
              AccessKeySecret: tea.String("環境変数から RAM ユーザーの AccessKey Secret を取得します。"),
              // HTTP プロキシを設定します。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // HTTPS プロキシを設定します。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * タイムアウト期間を設定します。サーバー側のエンドツーエンド処理のタイムアウトは 10 秒です。タイムアウト期間を適宜設定してください。
      		 * 設定した ReadTimeout 期間がサーバー側の処理時間より短い場合、ReadTimeout 例外が返されます。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
      	// RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
      	runtime := &util.RuntimeOptions{}
      	runtime.ReadTimeout = tea.Int(10000)
      	runtime.ConnectTimeout = tea.Int(10000)
      
      	serviceParameters, _ := json.Marshal(
      		map[string]interface{}{
      			"taskId": "vi_f_O5z5iaIis3iI0X2oNYj7qa-1x****",
      		},
      	)
      	request := green20220302.VideoModerationResultRequest{
      		Service:           tea.String("videoDetection_global"),
      		ServiceParameters: tea.String(string(serviceParameters)),
      	}
      
      	result, _err := client.VideoModerationResultWithOptions(&request, runtime)
      	if _err != nil {
      		panic(_err)
      	}
      
      	if *result.StatusCode != http.StatusOK {
      		fmt.Printf("リクエストに失敗しました。ステータス:%d\n", *result.StatusCode)
      		return
      	}
      	body := result.Body
      	fmt.Printf("リクエストは成功しました。RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message)
      	if *body.Code == 280 {
      		fmt.Printf("動画審査タスクは処理中です。コード:%d\n", *body.Code)
      		return
      	}
      	if *body.Code != http.StatusOK {
      		fmt.Printf("動画審査結果のクエリに失敗しました。コード:%d\n", *body.Code)
      		return
      	}
      
      	data := body.Data
          fmt.Printf("動画審査結果:%s\n", data)
      	fmt.Printf("動画審査音声結果:%s\n", data.AudioResult)
      	fmt.Printf("動画審査フレーム結果:%s\n", data.FrameResult)
      }
    • ライブストリーム審査タスクをキャンセルするためのサンプルコード

      package main
      
      import (
          "encoding/json"
          "fmt"
          openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
          green20220302 "github.com/alibabacloud-go/green-20220302/v3/client"
          util "github.com/alibabacloud-go/tea-utils/v2/service"
          "github.com/alibabacloud-go/tea/tea"
          "net/http"
      )
      
      func main() {
      	// プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。Security Token Service (STS) などのより安全な方法を使用して API 操作を呼び出すことを推奨します。
          config := &openapi.Config{
              /**
               * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
               * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
               * 環境変数を取得する一般的な方法:
               * RAM ユーザーの AccessKey ID を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
               * RAM ユーザーの AccessKey Secret を取得する:os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
               */
              AccessKeyId: tea.String("環境変数から RAM ユーザーの AccessKey ID を取得します。"),
              AccessKeySecret: tea.String("環境変数から RAM ユーザーの AccessKey Secret を取得します。"),
              // HTTP プロキシを設定します。
              // HttpProxy: tea.String("http://xx.xx.xx.xx:xxxx"),
              // HTTPS プロキシを設定します。
              // HttpsProxy: tea.String("https://username:password@xxx.xxx.xxx.xxx:9999"),
              RegionId: tea.String("ap-southeast-1"),
              Endpoint: tea.String("green-cip.ap-southeast-1.aliyuncs.com"),
              /**
      		 * タイムアウト期間を設定します。サーバー側のエンドツーエンド処理のタイムアウトは 10 秒です。タイムアウト期間を適宜設定してください。
      		 * 設定した ReadTimeout 期間がサーバー側の処理時間より短い場合、ReadTimeout 例外が返されます。
      		 */
              ConnectTimeout: tea.Int(3000),
              ReadTimeout:    tea.Int(6000),
          }
      	client, _err := green20220302.NewClient(config)
      	if _err != nil {
      		panic(_err)
      	}
      
          // RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
          runtime := &util.RuntimeOptions{}
          runtime.ReadTimeout = tea.Int(10000)
          runtime.ConnectTimeout = tea.Int(10000)
      
          serviceParameters, _ := json.Marshal(
              map[string]interface{}{
                  "taskId": "vi_s_lyxBXzWhSsxuJjiNHcpQ0N-*****",
              },
          )
          request := green20220302.VideoModerationCancelRequest{
              Service:           tea.String("liveStreamDetection_global"),
              ServiceParameters: tea.String(string(serviceParameters)),
          }
      
          result, _err := client.VideoModerationCancelWithOptions(&request, runtime)
          if _err != nil {
              panic(_err)
          }
      
          if *result.StatusCode != http.StatusOK {
              fmt.Printf("リクエストに失敗しました。ステータス:%d\n", *result.StatusCode)
              return
          }
          body := result.Body
          fmt.Printf("リクエストは成功しました。RequestId:%s, Code:%d, Message:%s\n", *body.RequestId, *body.Code, *body.Message)
          if *body.Code != http.StatusOK {
              fmt.Printf("動画審査タスクのキャンセルに失敗しました。コード:%d\n", *body.Code)
          }
      }

C# SDK

ソースコードについては、「C# SDK ソースコード」をご参照ください。

以下の 3 種類の動画審査がサポートされています。

パブリックインターネット経由でアクセス可能な動画の審査

シナリオ

審査したい動画がインターネット経由でアクセス可能な場合、Video Moderation 2.0 は URL を使用してファイルを取得し、審査を実行できます。

  1. 以下のコマンドを実行して依存関係を追加します。

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10
  2. C# SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * AccessKey ペアを使用してクライアントを初期化します。
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // サービスのエンドポイント。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。Security Token Service (STS) などのより安全な方法を使用して API 操作を呼び出すことを推奨します。
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
                  * 環境変数を取得する一般的な方法:
                  * RAM ユーザーの AccessKey ID を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * RAM ユーザーの AccessKey Secret を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得します。",
                  string accessKeySecret = '環境変数から RAM ユーザーの AccessKey Secret を取得します。',
                  // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // 審査リクエストを構築します。
                  AlibabaCloud.SDK.Green20220302.Models.VideoModerationRequest videoModerationRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationRequest();
                  // 審査サービス。
                  videoModerationRequest.Service="videoDetection_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // 審査対象の動画の URL。URL はパブリックインターネット経由でアクセス可能である必要があります。
                  task.Add("url","https://xxxx/xxx/sample.mp4");
                  videoModerationRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // 審査タスクを送信します。
                    AlibabaCloud.SDK.Green20220302.Models.VideoModerationResponse response= client.VideoModerationWithOptions(videoModerationRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }
    • 動画審査タスクの結果をクエリするためのサンプルコード

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * AccessKey ペアを使用してクライアントを初期化します。
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // サービスのエンドポイント。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。Security Token Service (STS) などのより安全な方法を使用して API 操作を呼び出すことを推奨します。
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
                  * 環境変数を取得する一般的な方法:
                  * RAM ユーザーの AccessKey ID を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * RAM ユーザーの AccessKey Secret を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得します。",
                  string accessKeySecret = '環境変数から RAM ユーザーの AccessKey Secret を取得します。',
                  // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // 審査リクエストを構築します。
                  AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest videoModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest();
                  // 審査サービス。
                  videoModerationResultRequest.Service="videoDetection_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // 結果をクエリしたいタスクの ID。
                  task.Add("taskId","<結果をクエリしたいタスクの ID>");
                  videoModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // 審査タスクを送信します。
                    AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultResponse response= client.VideoModerationResultWithOptions(videoModerationResultRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                              Console.WriteLine("liveId : " + response.Body.Data.LiveId);
                              Console.WriteLine("riskLevel : " + response.Body.Data.RiskLevel);
                              Console.WriteLine("url : " + response.Body.Data.Url);
                              Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails));
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }

ローカル動画の検出

シナリオ

審査したい動画がローカルマシン上にあり、パブリック URL を持たない場合、Content Moderation が提供する Object Storage Service (OSS) バケットに動画をアップロードできます。Video Moderation 2.0 は OSS に直接アクセスし、動画コンテンツを取得して審査を実行できます。

  1. 以下のコマンドを実行して依存関係を追加します。

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10

    OSS SDK をインストールします:

    NuGet を使用してインストール 
    1. Visual Studio に NuGet がインストールされていない場合は、まず NuGet をインストールします。
    2. Visual Studio で、プロジェクトを作成するか、既存のプロジェクトを開きます。次に、[ツール] > [NuGet パッケージ マネージャー] > [ソリューションの NuGet パッケージの管理] を選択します。
    3. aliyun.oss.sdk を検索し、結果から Aliyun.OSS.SDK (.NET Framework 用) または Aliyun.OSS.SDK.NetCore を見つけます。
  2. C# SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      // このファイルは自動生成されたものであり、編集しないでください。ありがとうございます。
      
      using System;
      using Newtonsoft.Json;
      using Aliyun.OSS;
      
      namespace AlibabaCloud.SDK.Green20220302
      {
          public class VideoModerationAutoRoute
          {
              //ファイルアップロード用のトークン。
              public static Dictionary<String, Models.DescribeUploadTokenResponse> tokenDic =
                  new Dictionary<String, Models.DescribeUploadTokenResponse>();
      
              //ファイルアップロード用のクライアント。
              public static OssClient ossClient = null;
      
              //サービスが VPC にデプロイされているかどうかを指定します。
              public static Boolean isVPC = false;
      
              public static void Main(string[] args)
              {
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
                  * 環境変数を取得する一般的な方法:
                  * RAM ユーザーの AccessKey ID を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * RAM ユーザーの AccessKey Secret を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  String accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得します。";
                  String accessKeySecret = "環境変数から RAM ユーザーの AccessKey Secret を取得します。";
                  // 必要に応じてリージョンとエンドポイントを変更します。
                  String endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  Models.VideoModerationResponse response = invoke(
                      accessKeyId,
                      accessKeySecret,
                      endpoint
                  );
      
                  Console.WriteLine(response.Body.RequestId);
                  Console.WriteLine(JsonConvert.SerializeObject(response.Body));
              }
      
              //リクエストクライアントを作成します。
              public static Client createClient(
                  String accessKeyId,
                  String accessKeySecret,
                  String endpoint
              )
              {
                  AlibabaCloud.OpenApiClient.Models.Config config =
                      new AlibabaCloud.OpenApiClient.Models.Config
                      {
                          AccessKeyId = accessKeyId,
                          AccessKeySecret = accessKeySecret,
                          //HTTP プロキシを設定します。
                          //HttpProxy = "http://10.10.xx.xx:xxxx",
                          //HTTPS プロキシを設定します。
                          //HttpsProxy = "https://username:password@xxx.xxx.xxx.xxx:9999",
                          //サービスのエンドポイント。
                          Endpoint = endpoint,
                      };
                  return new Client(config);
              }
      
              //ファイルアップロードクライアントを作成します。
              private static OssClient getOssClient(
                  Models.DescribeUploadTokenResponse tokenResponse,
                  Boolean isVPC
              )
              {
                  var tokenData = tokenResponse.Body.Data;
                  if (isVPC)
                  {
                      return new OssClient(
                          tokenData.OssInternalEndPoint,
                          tokenData.AccessKeyId,
                          tokenData.AccessKeySecret,
                          tokenData.SecurityToken
                      );
                  }
                  else
                  {
                      return new OssClient(
                          tokenData.OssInternetEndPoint,
                          tokenData.AccessKeyId,
                          tokenData.AccessKeySecret,
                          tokenData.SecurityToken
                      );
                  }
              }
      
              //ファイルをアップロードします。
              public static String uploadFile(
                  String filePath,
                  Models.DescribeUploadTokenResponse tokenResponse
              )
              {
                  // OssClient インスタンスを作成します。
                  ossClient = getOssClient(tokenResponse, isVPC);
                  var tokenData = tokenResponse.Body.Data;
      
                  String objectName =
                      tokenData.FileNamePrefix
                      + Guid.NewGuid().ToString()
                      + "."
                      + filePath.Split(".").GetValue(1);
                  //ファイルをアップロードします。
                  ossClient.PutObject(tokenData.BucketName, objectName, filePath);
                  return objectName;
              }
      
              //審査リクエストを送信します。
              public static Models.VideoModerationResponse invoke(
                  String accessKeyId,
                  String accessKeySecret,
                  String endpoint
              )
              {
                  //注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
                  Client client = createClient(accessKeyId, accessKeySecret, endpoint);
      
                  //ランタイムパラメーターを設定します。この RuntimeOptions インスタンスを使用するリクエストにのみ設定が有効になります。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtimeOptions =
                      new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
      
                  //ローカルファイルの完全なパス。例:D:\localPath\exampleFile.mp4。
                  String filePath = "D:\localPath\exampleFile.mp4";
                  try
                  {
                      //ファイルアップロード用の一時トークンを取得します。
                      if (
                          !tokenDic.ContainsKey(endpoint)
                          || tokenDic[endpoint].Body.Data.Expiration
                              <= DateTimeOffset.Now.ToUnixTimeSeconds()
                      )
                      {
                          var tokenResponse = client.DescribeUploadToken();
                          tokenDic[endpoint] = tokenResponse;
                      }
                      //ファイルをアップロードします。
                      String objectName = uploadFile(filePath, tokenDic[endpoint]);
                      //審査リクエストを構築します。
                      Models.VideoModerationRequest videoModerationRequest =
                          new Models.VideoModerationRequest();
                      //service example: videoDetection_global
                        videoModerationRequest.Service = "videoDetection_global";
                      Dictionary<string, object> task = new Dictionary<string, object>();
                      //審査対象のファイルの情報。
                      task.Add("ossBucketName", tokenDic[endpoint].Body.Data.BucketName);
                      task.Add("ossObjectName", objectName);
                      //審査対象のデータ ID。
                      task.Add("dataId", Guid.NewGuid().ToString());
                      videoModerationRequest.ServiceParameters = JsonConvert.SerializeObject(task);
                      //API 操作を呼び出して審査結果を取得します。
                      Models.VideoModerationResponse response = client.VideoModerationWithOptions(
                          videoModerationRequest,
                          runtimeOptions
                      );
                      return response;
                  }
                  catch (Exception _err)
                  {
                      Console.WriteLine(_err);
                      return null;
                  }
              }
          }
      }
    • 動画審査タスクの結果をクエリするためのサンプルコード

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * AccessKey ペアを使用してクライアントを初期化します。
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // サービスのエンドポイント。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。Security Token Service (STS) などのより安全な方法を使用して API 操作を呼び出すことを推奨します。
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
                  * 環境変数を取得する一般的な方法:
                  * RAM ユーザーの AccessKey ID を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * RAM ユーザーの AccessKey Secret を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得します。",
                  string accessKeySecret = '環境変数から RAM ユーザーの AccessKey Secret を取得します。',
                  // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // 審査リクエストを構築します。
                  AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest videoModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest();
                  // 審査サービス。
                  videoModerationResultRequest.Service="videoDetection_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // 結果をクエリしたいタスクの ID。
                  task.Add("taskId","<結果をクエリしたいタスクの ID>");
                  videoModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // 審査タスクを送信します。
                    AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultResponse response= client.VideoModerationResultWithOptions(videoModerationResultRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                              Console.WriteLine("liveId : " + response.Body.Data.LiveId);
                              Console.WriteLine("riskLevel : " + response.Body.Data.RiskLevel);
                              Console.WriteLine("url : " + response.Body.Data.Url);
                              Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails));
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }

OSS 内の動画の審査

シナリオ

審査したい動画ファイルが既に Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation に OSS へのアクセス権限を付与できます。Video Moderation 2.0 は、サービスロールを通じて OSS からファイルを取得し、審査を実行できます。クラウドリソースアクセス承認ページに移動して、サービスロールを作成します。

  1. 以下のコマンドを実行して依存関係を追加します。

    dotnet add package AlibabaCloud.SDK.Green20220302 --version 2.2.10
  2. C# SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * AccessKey ペアを使用してクライアントを初期化します。
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // サービスのエンドポイント。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。Security Token Service (STS) などのより安全な方法を使用して API 操作を呼び出すことを推奨します。
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
                  * 環境変数を取得する一般的な方法:
                  * RAM ユーザーの AccessKey ID を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * RAM ユーザーの AccessKey Secret を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得します。",
                  string accessKeySecret = '環境変数から RAM ユーザーの AccessKey Secret を取得します。',
                  // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // 審査リクエストを構築します。
                  AlibabaCloud.SDK.Green20220302.Models.VideoModerationRequest videoModerationRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationRequest();
                  // 審査サービス。
                  videoModerationRequest.Service="videoDetection_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // サンプル OSS ファイルパラメーター。
                  task.Add("ossBucketName","bucket_01");
                  task.Add("ossObjectName","test/sample.wav");
                  task.Add("ossRegionId","ap-southeast-1");
                  videoModerationRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // 審査タスクを送信します。
                    AlibabaCloud.SDK.Green20220302.Models.VideoModerationResponse response= client.VideoModerationWithOptions(videoModerationRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }
    • 動画審査タスクの結果をクエリするためのサンプルコード

      using Newtonsoft.Json;
      using Tea;
      
      namespace AlibabaCloud.SDK.Sample
      {
          public class Sample
          {
      
              /**
               * AccessKey ペアを使用してクライアントを初期化します。
               * @param accessKeyId
               * @param accessKeySecret
               * @return Client
               * @throws Exception
               */
              public static AlibabaCloud.SDK.Green20220302.Client CreateClient(string accessKeyId, string accessKeySecret)
              {
                  AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
                  {
                      AccessKeyId = accessKeyId,
                      AccessKeySecret = accessKeySecret,
                  };
                  // サービスのエンドポイント。
                  config.Endpoint = "green-cip.ap-southeast-1.aliyuncs.com";
                  return new AlibabaCloud.SDK.Green20220302.Client(config);
              }
      
              public static void Main(string[] args)
              {
                  // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。Security Token Service (STS) などのより安全な方法を使用して API 操作を呼び出すことを推奨します。
                  /**
                  * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
                  * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
                  * 環境変数を取得する一般的な方法:
                  * RAM ユーザーの AccessKey ID を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID")
                  * RAM ユーザーの AccessKey Secret を取得する:Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
                  */
                  string accessKeyId = "環境変数から RAM ユーザーの AccessKey ID を取得します。",
                  string accessKeySecret = '環境変数から RAM ユーザーの AccessKey Secret を取得します。',
                  // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
                  AlibabaCloud.SDK.Green20220302.Client client = CreateClient(accessKeyId, accessKeySecret);
                  // 審査リクエストを構築します。
                  AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest videoModerationResultRequest = new AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultRequest();
                  // 審査サービス。
                  videoModerationResultRequest.Service="videoDetection_global";
                  Dictionary<String,Object> task=new Dictionary<string, object>();
                  // 結果をクエリしたいタスクの ID。
                  task.Add("taskId","<結果をクエリしたいタスクの ID>");
                  videoModerationResultRequest.ServiceParameters=JsonConvert.SerializeObject(task);
                  // RuntimeObject インスタンスを作成し、ランタイムパラメーターを設定します。
                  AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                  runtime.ReadTimeout = 10000;
                  runtime.ConnectTimeout = 10000;
                  try
                  {
                      // 審査タスクを送信します。
                    AlibabaCloud.SDK.Green20220302.Models.VideoModerationResultResponse response= client.VideoModerationResultWithOptions(videoModerationResultRequest, runtime);
                  if(response is not null){
                      Console.WriteLine("response statusCode : "+response.StatusCode);
                      if (response.Body is not null){
                      Console.WriteLine("requestId : " + response.Body.RequestId);
                      Console.WriteLine("code : " + response.Body.Code);
                      Console.WriteLine("message : " + response.Body.Message);
                          if(response.Body.Data is not null){
                              Console.WriteLine("taskId : " + response.Body.Data.TaskId);
                              Console.WriteLine("liveId : " + response.Body.Data.LiveId);
                              Console.WriteLine("riskLevel : " + response.Body.Data.RiskLevel);
                              Console.WriteLine("url : " + response.Body.Data.Url);
                              Console.WriteLine("sliceDetails : " + JsonConvert.SerializeObject(response.Body.Data.SliceDetails));
                          }
                      }
                  }
                  }
                  catch (TeaException error)
                  {
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
                  catch (Exception _error)
                  {
                      TeaException error = new TeaException(new Dictionary<string, object>
                      {
                          { "message", _error.Message }
                      });
                      // 必要に応じてエラーを出力します。
                      AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
                      Console.WriteLine("error : " + error);
                  }
              }
          }
      }

Node.js SDK

ソースコードについては、「Node.js SDK ソースコード」をご参照ください。

以下の 3 種類の動画審査がサポートされています。

パブリックインターネット経由でアクセス可能な動画の審査

シナリオ

審査したい動画がインターネット経由でアクセス可能な場合、Video Moderation 2.0 は URL を使用してファイルを取得し、審査を実行できます。

  1. 以下のコマンドを実行して依存関係を追加します。

    npm install @alicloud/green20220302@2.2.10

  2. Node.js SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
      // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // リクエストオブジェクトを作成します。
              const videoModerationRequest = new Green20220302.VideoModerationRequest({
                  // 動画審査サービス。
                  "service": "videoDetection_global",
                  // 審査対象の動画の URL。
                  "serviceParameters": JSON.stringify({"url":"http://aliyundoc.com/test.flv"})
              });
              // ランタイム設定オブジェクトを作成します。
              const runtime = new Util.RuntimeOptions();
              try {
                  // リクエストを送信し、レスポンスを取得します。
                  const response = await client.videoModerationWithOptions(videoModerationRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // ビジネスコードで例外を慎重に処理し、無視しないことを推奨します。この例では、エラーメッセージのみが出力されます。
                  // エラーメッセージ。
                  console.log('エラーが発生しました:', error.message);
              }
          }
      }
      
      Client.main();
    • 動画審査タスクの結果をクエリするためのサンプルコード

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
      // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // リクエストオブジェクトを作成します。
              const videoModerationResultRequest = new Green20220302.VideoModerationResultRequest({
                  // 動画審査サービス。
                  "service": "videoDetection_global",
                  "serviceParameters": JSON.stringify({"taskId":"<結果をクエリしたい動画審査タスクの ID>"})
              });
              // ランタイム設定オブジェクトを作成します。
              const runtime = new Util.RuntimeOptions();
              try {
                  // リクエストを送信し、レスポンスを取得します。
                  const response = await client.videoModerationResultWithOptions(videoModerationResultRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // ビジネスコードで例外を慎重に処理し、無視しないことを推奨します。この例では、エラーメッセージのみが出力されます。
                  // エラーメッセージ。
                  console.log('エラーが発生しました:', error.message);
              }
          }
      }
      
      Client.main();

ローカル動画の検出

シナリオ

審査したい動画がローカルマシン上にあり、パブリック URL を持たない場合、Content Moderation が提供する Object Storage Service (OSS) バケットに動画をアップロードできます。Video Moderation 2.0 は OSS に直接アクセスし、動画コンテンツを取得して審査を実行できます。

  1. 以下のコマンドを実行して依存関係を追加します。

    npm install @alicloud/green20220302@2.2.10

  2. Node.js SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      const RPCClient = require("@alicloud/pop-core");
      const OSS = require('ali-oss');
      const { v4: uuidv4 } = require('uuid');
      const path = require("path");
      
      //サービスが VPC にデプロイされているかどうかを指定します。
      var isVPC = false;
      //ファイルアップロード用のトークン。
      var tokenDic = new Array();
      //ファイルアップロード用のクライアント。
      var ossClient;
      
      //ファイルアップロードクライアントを作成します。
      function createClient(accessKeyId, accessKeySecret, endpoint) {
          return new RPCClient({
              accessKeyId: accessKeyId,
              accessKeySecret: accessKeySecret,
              endpoint: endpoint,
              apiVersion: '2022-03-02',
              //HTTP プロキシを設定します。
              //httpProxy: "http://xx.xx.xx.xx:xxxx",
              //HTTPS プロキシを設定します。
              //httpsProxy: "https://username:password@xxx.xxx.xxx.xxx:9999",
          });
      }
      
      //ファイルアップロードクライアントを作成します。
      function getOssClient(tokenData, isVPC) {
          if (isVPC) {
              ossClient = new OSS({
                  accessKeyId: tokenData['AccessKeyId'],
                  accessKeySecret: tokenData['AccessKeySecret'],
                  stsToken: tokenData['SecurityToken'],
                  endpoint: tokenData['OssInternalEndPoint'],
                  bucket: tokenData['BucketName'],
              });
          } else {
              ossClient = new OSS({
                  accessKeyId: tokenData['AccessKeyId'],
                  accessKeySecret: tokenData['AccessKeySecret'],
                  stsToken: tokenData['SecurityToken'],
                  endpoint: tokenData['OssInternetEndPoint'],
                  bucket: tokenData['BucketName'],
              });
          }
      }
      
      //審査タスクを送信します。
      async function invoke(accessKeyId, accessKeySecret, endpoint) {
          //注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
          var client = createClient(accessKeyId, accessKeySecret, endpoint);
          var requestOption = {
              method: 'POST',
              formatParams: false,
          };
          //ローカルファイルの完全なパス。例:D:\\localPath\\exampleFile.mp4。
          var filePath = 'D:\\localPath\\exampleFile.mp4';
      
          //ファイルアップロード用のトークンを取得します。
          if (tokenDic[endpoint] == null || tokenDic[endpoint]['Expiration'] <= Date.parse(new Date() / 1000)) {
              var tokenResponse = await client.request('DescribeUploadToken', '', requestOption)
              tokenDic[endpoint] = tokenResponse.Data;
          }
      
          //ファイルアップロードクライアントを取得します。
          getOssClient(tokenDic[endpoint], isVPC)
          var split = filePath.split(".");
          var objectName;
          if (split.length > 1) {
              objectName = tokenDic[endpoint].FileNamePrefix + uuidv4() + "." + split[split.length - 1];
          } else {
              objectName = tokenDic[endpoint].FileNamePrefix + uuidv4();
          }
          //ファイルをアップロードします。
          const result = await ossClient.put(objectName, path.normalize(filePath));
      
          //以下のコードを使用して API リクエストを作成し、パラメーターを設定します。
          var params = {
              //動画審査サービスの例:videoDetection_global
              "Service": "videoDetection_global",
              //アップロードされたローカル動画の情報。
              "ServiceParameters": JSON.stringify({
                  "ossBucketName": tokenDic[endpoint].BucketName,
                  "ossObjectName": objectName
              })
          }
          //API 操作を呼び出して審査結果を取得します。
          return await client.request('VideoModeration', params, requestOption);
      }
      
      
      
      function main() {
          /**
          * Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。RAM ユーザーを使用して API 操作を呼び出すか、日常の O&M を実行することを推奨します。
          * プロジェクトコードに AccessKey ID と AccessKey Secret をハードコーディングしないでください。そうしないと、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。
          * 環境変数を取得する一般的な方法:
          * RAM ユーザーの AccessKey ID を取得する:process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']
          * RAM ユーザーの AccessKey Secret を取得する:process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
          */
          const accessKeyId: '環境変数から RAM ユーザーの AccessKey ID を取得します。'
          const accessKeySecret: '環境変数から RAM ユーザーの AccessKey Secret を取得します。'
          //必要に応じてリージョンとエンドポイントを変更します。
          var endpoint = "https://green-cip.ap-southeast-1.aliyuncs.com"
      
          try {
              var response;
              //API 操作を呼び出して審査結果を取得します。
              invoke(accessKeyId, accessKeySecret, endpoint).then(function (response) {
                  console.log(JSON.stringify(response))
              })
          } catch (err) {
              console.log(err);
          }
      }
      
      main();
    • 動画審査タスクの結果をクエリするためのサンプルコード

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
      // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // リクエストオブジェクトを作成します。
              const videoModerationResultRequest = new Green20220302.VideoModerationResultRequest({
                  // 動画審査サービス。
                  "service": "videoDetection_global",
                  "serviceParameters": JSON.stringify({"taskId":"<結果をクエリしたい動画審査タスクの ID>"})
              });
              // ランタイム設定オブジェクトを作成します。
              const runtime = new Util.RuntimeOptions();
              try {
                  // リクエストを送信し、レスポンスを取得します。
                  const response = await client.videoModerationResultWithOptions(videoModerationResultRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // ビジネスコードで例外を慎重に処理し、無視しないことを推奨します。この例では、エラーメッセージのみが出力されます。
                  // エラーメッセージ。
                  console.log('エラーが発生しました:', error.message);
              }
          }
      }
      
      Client.main();

OSS 内の動画の審査

シナリオ

審査したい動画ファイルが既に Object Storage Service (OSS) に保存されている場合、サービスロールを作成して Content Moderation に OSS へのアクセス権限を付与できます。Video Moderation 2.0 は、サービスロールを通じて OSS からファイルを取得し、審査を実行できます。クラウドリソースアクセス承認ページに移動して、サービスロールを作成します。

  1. 以下のコマンドを実行して依存関係を追加します。

    npm install @alicloud/green20220302@2.2.10

  2. Node.js SDK と統合します。

    • 動画審査タスクを送信するためのサンプルコード

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
      // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // リクエストオブジェクトを作成します。
              const videoModerationRequest = new Green20220302.VideoModerationRequest({
                  // 動画審査サービス。
                  "service": "videoDetection_global",
                  // 審査対象の動画の URL。
                  "serviceParameters": JSON.stringify({
                  // バケットが配置されているリージョン。例:cn-shanghai
                  "ossRegionId": "cn-shanghai",
                  // バケットの名前。例:bucket001
                  "ossBucketName": "bucket001",
                  // 審査対象のファイル。例:video/001.mp4
                  "ossObjectName": "video/001.mp4",})
              });
              // ランタイム設定オブジェクトを作成します。
              const runtime = new Util.RuntimeOptions();
              try {
                  // リクエストを送信し、レスポンスを取得します。
                  const response = await client.videoModerationWithOptions(videoModerationRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // ビジネスコードで例外を慎重に処理し、無視しないことを推奨します。この例では、エラーメッセージのみが出力されます。
                  // エラーメッセージ。
                  console.log('エラーが発生しました:', error.message);
              }
          }
      }
      
      Client.main();
    • 動画審査タスクの結果をクエリするためのサンプルコード

      const Green20220302 = require('@alicloud/green20220302');
      const OpenApi = require('@alicloud/openapi-client');
      const Util = require('@alicloud/tea-util');
      // 注意:インスタンス化されたクライアントを再利用して、接続の繰り返し確立を避け、審査パフォーマンスを向上させることを推奨します。
      // プロジェクトコードが漏洩した場合、AccessKey ペアが漏洩し、すべてのリソースのセキュリティが損なわれる可能性があります。以下のサンプルコードは参考用です。
      class Client {
          static createClient() {
              const config = new OpenApi.Config({
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                  accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
                  // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                  accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'],
                  endpoint: `green-cip.ap-southeast-1.aliyuncs.com`,
              });
              return new Green20220302.default(config);
          }
      
          static async main() {
              const client = Client.createClient();
              // リクエストオブジェクトを作成します。
              const videoModerationResultRequest = new Green20220302.VideoModerationResultRequest({
                  // 動画審査サービス。
                  "service": "videoDetection_global",
                  "serviceParameters": JSON.stringify({"taskId":"<結果をクエリしたい動画審査タスクの ID>"})
              });
              // ランタイム設定オブジェクトを作成します。
              const runtime = new Util.RuntimeOptions();
              try {
                  // リクエストを送信し、レスポンスを取得します。
                  const response = await client.videoModerationResultWithOptions(videoModerationResultRequest, runtime);
                  console.log(JSON.stringify(response.body));
              } catch (error) {
                  // ビジネスコードで例外を慎重に処理し、無視しないことを推奨します。この例では、エラーメッセージのみが出力されます。
                  // エラーメッセージ。
                  console.log('エラーが発生しました:', error.message);
              }
          }
      }
      
      Client.main();

ネイティブ HTTPS 呼び出し

  • 呼び出しメソッド

    サービスリクエスト URL: https://green-cip.{region}.aliyuncs.com

    プロトコル: HTTPS

    メソッド: POST

  • 共通リクエストパラメーター

    Video Moderation 2.0 API 操作には、共通リクエストパラメーターと操作固有のリクエストパラメーターの両方が必要です。共通リクエストパラメーターは、すべての API 操作で必須であり、以下の表に記載されています。

    名前

    タイプ

    必須

    説明

    Format

    String

    はい

    レスポンスのフォーマット。有効な値:

    • JSON (デフォルト)

    • XML

    Version

    String

    はい

    API のバージョン番号。YYYY-MM-DD 形式を使用します。現在のバージョンは 2022-03-02 です。

    AccessKeyId

    String

    はい

    Alibaba Cloud がサービスへのアクセス用に提供する AccessKey ID。

    Signature

    String

    はい

    リクエストの署名文字列。署名の計算方法については、以下の「署名メソッド」セクションをご参照ください。

    SignatureMethod

    String

    はい

    署名メソッド。HMAC-SHA1 がサポートされています。

    Timestamp

    String

    はい

    リクエストのタイムスタンプ。日付形式は ISO 8601 標準に従い、協定世界時 (UTC) である必要があります。

    形式は yyyy-MM-ddTHH:mm:ssZ です。

    例えば、2022年12月12日 09:13:14 (UTC+8) は 2022-12-12T01:13:14Z と表されます。

    SignatureVersion

    String

    はい

    署名アルゴリズムのバージョン。値を 1.0 に設定します。

    SignatureNonce

    String

    はい

    リプレイ攻撃を防ぐために使用される一意の乱数。各リクエストには異なる乱数を使用してください。

    Action

    String

    はい

    有効な値:

    • VideoModeration

    • VideoModerationResult

  • 共通レスポンスパラメーター

    送信する各 API リクエストに対して、システムは呼び出しが成功したかどうかに関わらず、一意の RequestId を返します。他のレスポンスパラメーターは、呼び出すサービスによって異なります。

    {
        "RequestId":"20B935A9-XXXXXXXX-XXXXXXXX0C2",
        "Message":"SUCCESS",
        "Data":{
            "TaskId":"vi_f_O5xxxxxxxxxxxxxxqa-1****"
        },
        "Code":200
    }
  • サンプルコード

    以下のサンプルレスポンスは、読みやすさのためにフォーマットされています。実際のレスポンスは、改行やインデントなしでフォーマットされます。

    • 審査タスクのサンプルコード

      リクエストのサンプル

      http://green-cip.ap-southeast-1.aliyuncs.com/
      ?Format=JSON
      &Version=2022-03-02
      &Signature=vpEEL0zFHfxXYzSFV0n7%2FZiFL9o%3D
      &SignatureMethod=Hmac-SHA1
      &SignatureNonce=15215528852396
      &SignatureVersion=1.0
      &Action=VideoModeration
      &AccessKeyId=123****cip
      &Timestamp=2023-02-03T12:00:00Z
      &Service=videoDetection_global
      &ServiceParameters={"url": "https://xxxxxx.aliyuncs.com/sample/****.mp4"}

      成功レスポンスのサンプル

      {
          "RequestId":"20B935A9-XXXXXXXX-XXXXXXXX0C2",
          "Message":"SUCCESS",
          "Data":{
              "TaskId":"vi_f_O5xxxxxxxxxxxxxxqa-1x****"
          },
          "Code":200
      }
    • クエリタスクのサンプルコード

      リクエストのサンプル

      http://green-cip.ap-southeast-1.aliyuncs.com/
      ?Format=JSON
      &Version=2022-03-02
      &Signature=vpEEL0zFHfxXYzSFV0n7%2FZiFL9o%3D
      &SignatureMethod=Hmac-SHA1
      &SignatureNonce=15215528852396
      &SignatureVersion=1.0
      &Action=VideoModerationResult
      &AccessKeyId=123****cip
      &Timestamp=2023-02-03T12:00:00Z
      &Service=videoDetection_global
      &ServiceParameters={"taskId": "vi_f_O5zxxxxxxxxxxxxxxxx-1x****"}

      成功レスポンスのサンプル

      {
          "Code": 200,
          "RequestId": "25106421-XXXX-XXXX-XXXX-15DA5AAAC546",
          "Message": "success finished",
          "Data": {
              "DataId": "ABCDEF-TESTDATAID",
              "TaskId": "vi_f_VnI6BO74NXFIZm7XXXXXXXXXXXXXX",
              "RiskLevel": "medium",
              "FrameResult": {
                  "FrameNum": 2,
                  "FrameSummarys": [
                      {
                          "Label": "violent_explosion",
                          "Description": "花火関連のコンテンツの疑い",
                          "LabelSum": 8
                      },
                      {
                          "Label": "sexual_cleavage",
                          "Description": "ヌードまたは性的なニュアンスを含むコンテンツの疑い",
                          "LabelSum": 8
                      }
                  ],
                  "RiskLevel": "medium",
                  "Frames": [
                      {
                          "Offset": 1,
                          "RiskLevel": "none",
                          "Results": [
                              {
                                  "Result": [
                                      {
                                          "Label": "nonLabel",
                                          "Description": "リスクは検出されませんでした"
                                      }
                                  ],
                                  "Service": "baselineCheck"
                              },
                              {
                                  "Result": [
                                      {
                                          "Label": "nonLabel"
                                      }
                                  ],
                                  "Service": "baselineCheck_pro"
                              }
                          ],
                          "TempUrl": "http://abc.oss-cn-shanghai.aliyuncs.com/test1.jpg"
                      },
                      {
                          "Offset": 2,
                          "RiskLevel": "medium",
                          "Results": [
                              {
                                  "Result": [
                                      {
                                          "Confidence": 74.1,
                                          "Label": "violent_explosion",
                                          "Description": "花火関連のコンテンツの疑い"
                                      }
                                  ],
                                  "Service": "baselineCheck"
                              },
                              {
                                  "Result": [
                                      {
                                          "Confidence": 1,
                                          "Label": "sexual_cleavage",
                                          "Description": "ヌードまたは性的なニュアンスを含むコンテンツの疑い"
                                      }
                                  ],
                                  "Service": "baselineCheck_pro"
                              }
                          ],
                          "TempUrl": "http://abc.oss-cn-shanghai.aliyuncs.com/test2.jpg"
                      }
                  ]
              }
          }
      }
  • 署名メソッド

    Voice Moderation-Enhanced サービスは、すべてのリクエストを認証します。したがって、各リクエストに署名を含める必要があります。このサービスは、AccessKey ID と AccessKey Secret を使用した対称暗号化を使用して、リクエスト送信者の ID を検証します。

    AccessKey ペアは Alibaba Cloud によって発行されます。Alibaba Cloud のウェブサイトで申請および管理できます。AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。AccessKey ID はユーザーの ID を検証するために使用され、AccessKey Secret は署名文字列を暗号化および検証するために使用されます。AccessKey Secret は機密情報として保持する必要があります。

    リクエストに署名するには、以下の手順を実行します:

    1. 正規化されたクエリ文字列を作成します。

      1. すべてのリクエストパラメーターをパラメーター名のアルファベット順にソートします。これらのパラメーターには、共通リクエストパラメーターと操作固有のパラメーターが含まれますが、Signature パラメーター自体は含まれません。

      2. リクエストパラメーターの名前と値をエンコードします。URL エンコーディングには UTF-8 文字セットを使用します。

        説明

        Java の java.net.URLEncoder など、URL エンコーディングをサポートするほとんどのライブラリは、application/x-www-form-urlencoded の Multipurpose Internet Mail Extensions (MIME) エンコーディングルールに従います。このエンコーディングメソッドを直接使用できます。プラス記号 (+) を %20 に、アスタリスク (*) を %2A に、%7E をチルダ (~) に置き換えます。これにより、前述のルールに従ったエンコード済み文字列が得られます。

        URL エンコーディングのルールは以下の通りです:

        • 大文字、小文字、数字、およびハイフン (-)、アンダースコア (_)、ピリオド (.)、チルダ (~) などの特殊文字はエンコードしません。

        • 他の文字は %XY 形式でエンコードします。XY は文字の ASCII コードの 16 進値を表します。例えば、二重引用符 (") は %22 としてエンコードされます。

        • 拡張 UTF-8 文字は %XY%ZA… 形式でエンコードします。

        • スペースはプラス記号 (+) ではなく、%20 としてエンコードする必要があります。

      3. エンコードされたパラメーター名と値を等号 (=) で接続します。

      4. 結果の文字列をパラメーター名のアルファベット順にソートし、アンパサンド (&) で接続して、正規化されたクエリ文字列を作成します。

    2. ステップ a.i の正規化された文字列を使用して、以下のルールに従って署名計算用の文字列を構築します:

      StringToSign=
      HTTPMethod + "&" +
      percentEncode("/") + "&" +
      percentEncode(CanonicalizedQueryString)
      説明

      HTTPMethod は、POST などのリクエストに使用される HTTP メソッドです。percentEncode("/") は、ステップ 1.b の URL エンコーディングルールに従ったスラッシュ (/) のエンコード値で、%2F です。percentEncode(CanonicalizedQueryString) は、ステップ 1.a の正規化されたクエリ文字列のエンコード済み文字列で、これもステップ 1.b のルールに従います。

    3. RFC 2104 で定義されているように、署名する文字列の HMAC 値を計算します。

      説明

      HMAC 計算のキーは、ご利用の AccessKey Secret にアンパサンド (&) (ASCII: 38) を追加したものです。使用されるハッシュアルゴリズムは SHA1 です。

    4. HMAC 値を Base64 でエンコードして、署名文字列 (Signature) を作成します。

    5. 署名値を Signature パラメーターとしてリクエストに追加し、署名プロセスを完了します。

      説明

      署名値を最終的なリクエストパラメーターとして Content Moderation サーバーに送信する際、RFC 3986 のルールに従って、他のパラメーターと同様に URL エンコードする必要があります。