在 Java 中使用 REST API 提取 MP3 文件的元數據

您可以通過編程方式添加、編輯、刪除或提取以元數據形式存儲的音頻文件的各種屬性。您可以通過編程方式輕鬆地從雲端的音頻文件中提取元數據屬性,例如標題、藝術家和流派。在本文中,您將學習如何使用 Java 中的 REST API 提取 MP3 音頻文件的元數據。

本文討論/涵蓋以下主題:

MP3 元數據提取 REST API 和 Java SDK

我將使用 GroupDocs.Metadata Cloud 的 Java SDK API 來提取 MP3 音頻文件的元數據。它允許您從 60 多種類型的文檔、圖像和多媒體文件格式中添加、編輯、檢索和刪除元數據屬性。您只需定義搜索條件,API 就會在 支持的文件格式 中處理指定的元數據操作。該 API 適用於最著名的元數據標準,例如內置、XMP、EXIF、IPTC、圖像資源塊、ID3 和自定義元數據屬性。它還為 Cloud API 提供 .NET SDK 作為其 文檔元數據操作家族成員

通過添加以下 pom.xml 配置,您可以在基於 Maven 的 Java 應用程序中輕鬆使用 GroupDocs.Metadata Cloud。

<repository>
    <id>groupdocs-artifact-repository</id>
    <name>GroupDocs Artifact Repository</name>
    <url>http://repository.groupdocs.cloud/repo</url>
</repository>
<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-metadata-cloud</artifactId>
    <version>20.4</version>
    <scope>compile</scope>
</dependency>

在執行上述步驟之前,請從 dashboard 獲取您的 Client ID 和 Secret。獲得 ID 和密碼後,添加如下所示的代碼:

String clientId = "da0c487d-c1c0-45ae-b7bf-43eaf53c5ad5";
String clientSecret = "479db2b01dcb93a3d4d20efb16dea971";
String myStorage = "";

Configuration configuration = new Configuration(clientId, clientSecret);

在 Java 中使用 REST API 提取 MP3 文件的元數據

您可以按照下面給出的簡單步驟輕鬆提取 MP3 音頻文件的元數據:

  1. 上傳MP3文件至雲端
  2. 使用 Java 提取 MP3 音頻文件的元數據

上傳文件

首先,使用下面給出的代碼示例將 MP3 音頻文件上傳到雲端:

// 接口初始化
FileApi apiInstance = new FileApi(clientId, clientSecret);

// 輸入文件
File fileStream = new File("C:\\Files\\sample.mp3");

// 創建文件上傳請求
UploadFileRequest request = new UploadFileRequest("sample.mp3", fileStream, myStorage);

// 上傳文件
FilesUploadResult response = apiInstance.uploadFile(request);

因此,上傳的 MP3 文件將在雲端儀表板的 文件部分 中可用。

使用 Java 提取 MP3 音頻文件的元數據

您可以按照以下步驟以編程方式提取 MP3 音頻文件的所有元數據屬性。

  • 創建 MetadataApi 的實例
  • 創建 FileInfo 的實例
  • 設置MP3文件路徑
  • 創建 ExtractOptions 的實例
  • 將 FileInfo 分配給 ExtractOptions
  • 創建提取請求
  • 調用MetadataApi.extract()方法並得到結果

以下代碼示例展示瞭如何使用 REST API 提取 MP3 文件的元數據。

// 初始化接口
MetadataApi apiInstance = new MetadataApi(configuration);

// 定義提取選項
ExtractOptions options = new ExtractOptions();
FileInfo fileInfo = new FileInfo();
fileInfo.setFilePath("sample.mp3");
options.setFileInfo(fileInfo);

// 創建提取請求
ExtractRequest request = new ExtractRequest(options);
ExtractResult response = apiInstance.extract(request);

// 顯示結果
for (MetadataPackage metaPackage : response.getMetadataTree().getInnerPackages()) {
  for(MetadataProperty entry : metaPackage.getPackageProperties()) {
    System.out.println(entry.getName() + ": " + entry.getValue());
    if (entry.getTags() == null)
      continue;
   for (Tag tagItem : entry.getTags()) {
      System.out.println(
          "Tag for property: name - " + tagItem.getName() + ", category - " + tagItem.getCategory());
    }
  }
}
FileFormat: 21
Tag for property: name - FileFormat, category - Content
MimeType: audio/mpeg
Tag for property: name - FileFormat, category - Content
HeaderPosition: 2402
MpegAudioVersion: 3
Layer: 3
HasCrc: True
Bitrate: 224
Frequency: 32000
PaddingBit: 0
PrivateBit: False
Channel: 0
ModeExtensionBits: 0
Copyright: False
Original: True
Emphasis: 0
Version: ID3v1.1
Genre: 255
Album: YouTube Audio Library
Artist: Kevin MacLeod
Comment: This is sample comment.
Tag for property: name - Comment, category - Content
Title: Impact Moderato
Tag for property: name - Title, category - Content
Year: 2021
Tag for property: name - IntellectualContentCreated, category - Time
TrackNumber: 1
Version: ID3v2.3.0
TagSize: 2402
TALB: null
TPE1: null
TPE2: null
COMM: null
Tag for property: name - Comment, category - Content
TCOM: null
TPOS: null
TCON: null
TIT2: null
Tag for property: name - Title, category - Content
TRCK: null
TYER: null
Tag for property: name - IntellectualContentCreated, category - Time
title: Impact Moderato
Tag for property: name - Title, category - Content
artist: Kevin MacLeod
album: YouTube Audio Library
year: 2021
track: 1
genre: Cinematic
Tag for property: name - Type, category - Content
comment: This is sample comment.
Tag for property: name - Comment, category - Content
albumartist: MacLeod Kevin
composer: Kevin
discnumber: 101 

使用 Java 通過匹配精確短語提取元數據

您可以按照以下步驟提取與確切短語匹配的 MP3 文件的元數據屬性:

  • 創建 MetadataApi 實例
  • 創建 MatchOptions 的實例並將 ExactPhrase 設置為 true
  • 初始化 NameOptions 的實例
  • 提供匹配值並設置 MatchOptions
  • 創建 SearchCriteria 的實例並設置 NameOptions
  • 創建 FileInfo 的實例
  • 設置MP3文件路徑
  • 創建 ExtractOptions 的實例
  • 將定義的 SearchCriteria 和 FileInfo 分配給 ExtractOptions
  • 創建提取請求
  • 調用MetadataApi.extract()方法並得到結果

以下代碼示例展示瞭如何使用 REST API 通過匹配精確短語來提取元數據。

// 初始化接口
MetadataApi apiInstance = new MetadataApi(configuration);

// 創建匹配選項
MatchOptions matchOptions = new MatchOptions();
matchOptions.setExactPhrase(true);

// 創建名稱選項
NameOptions nameOptions = new NameOptions();
nameOptions.setValue("MimeType");
nameOptions.setMatchOptions(matchOptions);

// 定義搜索條件
SearchCriteria searchCriteria = new SearchCriteria();
searchCriteria.setNameOptions(nameOptions);

// 定義提取選項
ExtractOptions options = new ExtractOptions();
options.setSearchCriteria(searchCriteria);

// 提供輸入文件
FileInfo fileInfo = new FileInfo();
fileInfo.setFilePath("sample.mp3");
options.setFileInfo(fileInfo);

// 創建提取請求
ExtractRequest request = new ExtractRequest(options);
ExtractResult response = apiInstance.extract(request);

// 顯示結果
for (MetadataProperty entry : response.getProperties()) {
  System.out.println(entry.getName() + ": " + entry.getValue());
  if (entry.getTags() == null)
    continue;
 for (Tag tagItem : entry.getTags()) {
    System.out.println(
        "Tag for property: name - " + tagItem.getName() + ", category - " + tagItem.getCategory());
  }
}
MimeType: audio/mpeg
Tag for property: name - FileFormat, category - Content

使用 Java 通過正則表達式提取元數據

您可以按照以下步驟使用正則表達式定義搜索條件以提取 MP3 文件的元數據:

  • 創建 MetadataApi 的實例
  • 初始化 MatchOptions 的實例並將 IsRegex 設置為 true
  • 創建 NameOptions 的實例
  • 提供正則表達式並設置 MatchOptions
  • 創建 SearchCriteria 的實例並設置 NameOptions
  • 創建 FileInfo 的實例
  • 設置MP3文件路徑
  • 創建 ExtractOptions 的實例
  • 將定義的 SearchCriteria 和 FileInfo 分配給 ExtractOptions
  • 創建提取請求
  • 調用MetadataApi.extract()方法並得到結果

以下代碼示例展示瞭如何使用 REST API 通過正則表達式搜索提取元數據。

// 初始化接口
MetadataApi apiInstance = new MetadataApi(configuration);

// 創建匹配選項
MatchOptions matchOptions = new MatchOptions();
matchOptions.setIsRegex(true);

// 創建名稱選項
NameOptions nameOptions = new NameOptions();
nameOptions.setValue("^Co.*");
nameOptions.setMatchOptions(matchOptions);

// 定義搜索條件
SearchCriteria searchCriteria = new SearchCriteria();
searchCriteria.setNameOptions(nameOptions);

// 定義提取選項
ExtractOptions options = new ExtractOptions();
options.setSearchCriteria(searchCriteria);

// 提供輸入文件
FileInfo fileInfo = new FileInfo();
fileInfo.setFilePath("sample.mp3");
options.setFileInfo(fileInfo);

// 創建提取請求
ExtractRequest request = new ExtractRequest(options);
ExtractResult response = apiInstance.extract(request);

for (MetadataProperty entry : response.getProperties()) {
  System.out.println(entry.getName() + ": " + entry.getValue());
  if (entry.getTags() == null)
    continue;
 for (Tag tagItem : entry.getTags()) {
    System.out.println(
        "Tag for property: name - " + tagItem.getName() + ", category - " + tagItem.getCategory());
  }
}
Copyright: False
Comment: This is sample comment.
Tag for property: name - Comment, category - Content
COMM: GroupDocs.Metadata.Formats.Audio.ID3V2CommentFrame
Tag for property: name - Comment, category - Content
CommEncoding: 1
CommLanguage: eng
CommShortContentDescription: 
CommText: This is sample comment.
comment: This is sample comment.
Tag for property: name - Comment, category - Content
composer: Kevin 

使用 Java 按屬性名稱提取元數據

您可以按照以下步驟定義搜索條件以提取特定屬性的 MP3 文件的元數據:

  • 創建 MetadataApi 的實例
  • 初始化 NameOptions 的實例並設置值
  • 創建 SearchCriteria 的實例並設置 NameOptions
  • 創建 FileInfo 的實例
  • 設置MP3文件路徑
  • 創建 ExtractOptions 的實例
  • 將定義的 SearchCriteria 和 FileInfo 分配給 ExtractOptions
  • 創建提取請求
  • 調用MetadataApi.extract()方法並得到結果

以下代碼示例展示瞭如何使用 REST API 搜索屬性名稱來提取元數據。

// 初始化接口
MetadataApi apiInstance = new MetadataApi(configuration);

// 創建名稱選項
NameOptions nameOptions = new NameOptions();
nameOptions.setValue("Artist");

// 定義搜索條件
SearchCriteria searchCriteria = new SearchCriteria();
searchCriteria.setNameOptions(nameOptions);

// 提供輸入文件
FileInfo fileInfo = new FileInfo();
fileInfo.setFilePath("sample.mp3");

// 定義提取選項
ExtractOptions options = new ExtractOptions();
options.setSearchCriteria(searchCriteria);
options.setFileInfo(fileInfo);

// 創建提取請求
ExtractRequest request = new ExtractRequest(options);
ExtractResult response = apiInstance.extract(request);

for (MetadataProperty entry : response.getProperties()) {
  System.out.println(entry.getName() + ": " + entry.getValue());
  if (entry.getTags() == null)
    continue;
 for (Tag tagItem : entry.getTags()) {
    System.out.println(
        "Tag for property: name - " + tagItem.getName() + ", category - " + tagItem.getCategory());
  }
}
Artist: Kevin MacLeod
artist: Kevin MacLeod
albumartist: MacLeod Kevin

使用 Java 按屬性值提取元數據

您可以按照以下步驟定義搜索條件以提取與屬性值匹配的 MP3 文件的元數據:

  • 創建 MetadataApi 的實例
  • 創建 ValueOptions 的實例
  • 提供要搜索的值及其類型
  • 創建 SearchCriteria 的實例並設置 ValueOptions
  • 創建 FileInfo 的實例
  • 設置MP3文件路徑
  • 創建 ExtractOptions 的實例
  • 將定義的 SearchCriteria 和 FileInfo 分配給 ExtractOptions
  • 創建提取請求
  • 調用MetadataApi.extract()方法並得到結果

以下代碼片段顯示瞭如何使用 REST API 通過搜索屬性值來提取元數據。

// 初始化接口
MetadataApi apiInstance = new MetadataApi(configuration);

// 創造價值的選擇
ValueOptions valueOptions = new ValueOptions();
valueOptions.setValue("Impact Moderato");
valueOptions.setType("string");

// 定義搜索條件
SearchCriteria searchCriteria = new SearchCriteria();
searchCriteria.setValueOptions(valueOptions);

// 提供輸入文件
FileInfo fileInfo = new FileInfo();
fileInfo.setFilePath("sample.mp3");

// 定義提取選項
ExtractOptions options = new ExtractOptions();
options.setSearchCriteria(searchCriteria);
options.setFileInfo(fileInfo);

// 創建提取請求
ExtractRequest request = new ExtractRequest(options);
ExtractResult response = apiInstance.extract(request);

for (MetadataProperty entry : response.getProperties()) {
  System.out.println(entry.getName() + ": " + entry.getValue());
  if (entry.getTags() == null)
    continue;
 for (Tag tagItem : entry.getTags()) {
    System.out.println(
        "Tag for property: name - " + tagItem.getName() + ", category - " + tagItem.getCategory());
  }
}
Title: Impact Moderato
Tag for property: name - Title, category - Content
TextValue: Impact Moderato

在線試用

請試用以下免費的在線 MP3 元數據提取工具,它是使用上述 API 開發的。 https://products.groupdocs.app/metadata/total

結論

在本文中,您學習瞭如何提取雲端 MP3 音頻文件的元數據。您還學習瞭如何通過定義搜索條件(例如匹配精確短語、使用正則表達式以及按屬性名稱或值)來提取元數據。本文還介紹瞭如何以編程方式將 MP3 音頻文件上傳到雲端。您可以使用 文檔 了解有關 GroupDocs.Metadata 提取 Cloud API 的更多信息。我們還提供了一個 API 參考 部分,讓您可以直接通過瀏覽器可視化我們的 API 並與之交互。如有任何歧義,請隨時在論壇上與我們聯繫。

也可以看看