c0dex/acoustid

acoustid.org 音频指纹搜索服务的 PHP 封装

dev-master 2020-04-05 16:49 UTC

This package is auto-updated.

Last update: 2024-09-06 05:07:25 UTC


README

Build Status

此项目是围绕 Acoustid.org Web 服务 API 的 PHP 封装。

安装

您可以通过克隆此存储库。

git clone https://github.com/psilocyberunner/acoustid-php.git

但最简单的方法是要求从 Composer 仓库中的 Composer 仓库中的

composer require c0dex/acoustid

用法

库支持 AcoustId API 的以下功能

  • 通过音频指纹查找
  • 通过曲目 ID 查找
  • 提交音频指纹
  • 获取数据提交状态
  • 按 MBID(MusicBrainz ID)列出 AcoustID

用法

安装后,您应初始化库。这里我使用 Dotenv 包来避免在 PHP 文件中存储凭据。我还使用异常处理器 - Whoops,您可以使用您偏好的任何一种。

<?php
#bootstrap.php

# I use Dotenv package for config management (optional)
$dotenv = Dotenv\Dotenv::create(__DIR__ . '/../');
$dotenv->load();
$dotenv->required(['API_APPLICATION_TOKEN', 'API_USER_TOKEN'])->notEmpty();

# Set exception handler (optional)
$whoops = new \Whoops\Run;
$whoops->prependHandler(new \Whoops\Handler\PrettyPageHandler);
$whoops->register();

通过指纹查找

这里您应传递两个必需的参数 - 持续时间和指纹。这两者都可以从 fpcalc 实用程序中获取。

fpcalc 的用法

fpcalc -json ./mp3/some-track.mp3

您将得到类似以下内容

{"duration": 255, "fingerprint": "AQADtF8SZUkSRZjyzEMo.....long string"}

在 PHP 中解码数据并准备创建 API 调用。

<?php

require_once '../vendor/autoload.php'; # Composer autoloader
require_once 'bootstrap.php'; # See contents of bootstrap at the beginning 

# Here you can change getenv('API_APPLICATION_TOKEN') to your API token without getenv()
$lookUp = new \AcoustId\LookUp\FingerPrint(getenv('API_APPLICATION_TOKEN'));
$result = $lookUp->setJSONResponseType() # I want JSON response here (JSON is default)
    ->setMetaData([ # Choose what meta data you want. See API details for info
        \AcoustId\LookUp::META_RECORDINGS,
        \AcoustId\LookUp::META_RELEASES,
        \AcoustId\LookUp::META_USERMETA,
        \AcoustId\LookUp::META_RECORDINGIDS,
    ])->lookUp(255, 'AQADtF8SZUkSRZjyzEMo...'); # Data from fpcalc for certain media track

# View the response (all examples should have the same lines at the end)
echo $result->getBody()->getContents();

示例响应

{  
   results:[  
      {  
         id:"5dfed459-fd8f-40d7-9d93-...",
         recordings:[  
            {},
            {}
         ],
         score:0.926028
      }
   ],
   status:"ok"
}

通过 TrackId 查找

这里您应传递作为主要参数的 track id(UUID)。

<?php

require_once '../vendor/autoload.php';
require_once 'bootstrap.php';

$trackId = new \AcoustId\LookUp\TrackId(getenv('API_APPLICATION_TOKEN'));

# Optional response type JSONP and callback
//$lookUp->setFormat('jsonp')->setJsonCallBack('testCallback');

$trackId->setMetaData([
    \AcoustId\LookUp::META_RECORDINGS,
    \AcoustId\LookUp::META_RECORDINGIDS,
]);

$result = $trackId->lookUp('5dfed459-fd8f-40d7-9d93-...');

示例响应

{  
   results:[  
      {  
         id:"5dfed459-fd8f-40d7-9d93-...",
         recordings:[  
            {  
               id:"180a17dd-f456-4ff2-be39-..."
            },
            {...},
            {  
               id:"c6b6ea6b-52a7-46b3-9821-..."
            }
         ],
         score:1
      }
   ],
   status:"ok"
}

提交音频指纹

如果您希望使用自己的数据支持 AcoustId 数据库 - 您还需要用户 API 令牌(第二个,仅用于数据提交请求)。在此代码示例中,我使用 getId3 library 从 mp3 文件中提取 ID3 标签。

<?php

require_once '../vendor/autoload.php';
require_once './bootstrap.php';

$dir  = __DIR__ . '/..';
$x    = exec(escapeshellcmd('fpcalc -json ./../mp3/some-track.mp3'), $output, $return);
$data = json_decode($output[0]);

$id3   = new getID3();
$file1 = $id3->analyze('./../mp3/some-track.mp3');

$submission = new \AcoustId\Submission(getenv('API_APPLICATION_TOKEN'));
$result     = $submission->setJSONResponseType()
    ->setWait(1) # How long to wait for request to be processed
    ->setDuration($data->duration)
    ->setUserToken(getenv('API_USER_TOKEN')) # User's API token
    ->setFingerPrint($data->fingerprint)
    ->setAlbumArtist($file1['id3v2']['comments']['artist'][0]) # Array structure for 
    ->setTrackTitle($file1['id3v2']['comments']['title'][0])   # your track may differ
    ->setTrackNo(20)
    ->send();

示例响应

{  
   status:"ok",
   submissions:[  
      {  
         id:1234567890,
         result:{  
            id:"5dfed459-fd8f-40d7-9d93-..."
         },
         status:"imported"
      }
   ]
}

如果提交处于挂起状态

{  
   "status":"ok",
   "submissions":[  
      {  
         "id":123456789,
         "status":"pending"
      }
   ]
}

批量提交指纹

您可以将多个指纹同时传递

<?php

require_once '../vendor/autoload.php';
require_once './bootstrap.php';

$batch = new \AcoustId\Submission\Batch(getenv('API_APPLICATION_TOKEN'));
$batch->setUserToken(getenv('API_USER_TOKEN'));
$batch->setWait(5);

$batch->setBatch([
    (new AcoustId\Submission($batch->getClientAPIToken()))
        ->setFingerPrint('BDQGOCRIIpDoYgA...')
        ->setDuration(256),
    (new AcoustId\Submission($batch->getClientAPIToken()))
        ->setFingerPrint('AQADtEmiKEnCREl...')
        ->setDuration(238),
]);

$result = $batch->sendBatch();

示例响应

{  
   status:"ok",
   submissions:[  
      {  
         id:1234567890,
         index:"0",
         result:{  
            id:"5dfed459-fd8f-40d7-9d93-..."
         },
         status:"imported"
      },
      {  
         id:1234567890,
         index:"1",
         result:{  
            id:"f786e327-453d-49b6-b313-..."
         },
         status:"imported"
      }
   ]
}

获取提交状态

在将数据提交给 AcoustId 后,您可能需要检查提交状态,尤其是在提交不能立即导入时(“挂起”状态)。因此,获取您的提交 ID 并运行

<?php

require_once '../vendor/autoload.php';
require_once 'bootstrap.php';

$status = new \AcoustId\Submission\Status(getenv('API_APPLICATION_TOKEN'));
$result = $status->setSubmissionId(123456789)->find();
//or
$result = $status->find(123456789);

示例响应

{  
   status:"ok",
   submissions:[  
      {  
         id:123456789,
         result:{  
            id:"e13393ef-7b4f-4a35-ae86-..."
         },
         status:"imported"
      }
   ]
}

通过 MBID 列出 AcoustID

您需要 MusicBrainz 录音 ID 才能进行此类请求。

<?php

require_once '../vendor/autoload.php';
require_once './bootstrap.php';

$list   = new \AcoustId\ListByMBId(getenv('API_APPLICATION_TOKEN'));
$list->setJSONResponseType();
$result = $list->search('4e0d8649-1f89-44f3-91af-...');

示例响应

{  
   status:"ok",
   tracks:[  
      {  
         id:"8dbf2f94-3e91-4501-bb47-..."
      },
      {...},
      {  
         id:"12123b04-1bd6-4f55-9afa-..."
      }
   ]
}

有关更多详细信息,请参阅 /examples 文件夹中的示例。

有关 AcoustId.org Web 服务的信息,请访问 此处

许可证

MIT 许可证(MIT)

在此,特此授予任何获得此软件及其相关文档文件(“软件”)副本的任何人(“个人”)免费处理该软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许提供软件的个人这样做,但受以下条件约束

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

本软件按照“现状”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、适用于特定目的和版权无侵权性的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论这些责任是由于合同、侵权或其他原因引起的,这些责任与软件或软件的使用或其他方面有关。