smartcat/smartcat-api

SmartCAT API 的 PHP 客户端 https://smartcat.ai/api/methods/

3.0.0 2024-06-25 12:07 UTC

README

Latest Version Software License Total Downloads

PHP 客户端 SmartCAT API

如何使用

  1. 安装 composer
  2. composer require smartcat/smartcat-api
  3. composer install

用例

use SmartCat\Client\SmartCat;

$sc=new SmartCat($login, $password);

账户

获取账户详情
GET /api/integration/v1/account

$sc->getAccountManager()->accountGetAccountInfo();

获取账户可用的机器翻译引擎
GET /api/integration/v1/account/mtengines

$sc->getAccountManager()->accountGetMTEnginesForAccount();

获取账户可用的语言服务提供商(LSP)服务](https://smartcat.com/api/methods/#!/Account/Account_GetLSPServicesForAccount)
GET /api/integration/v1/account/lsp/services

$sc->getAccountManager()->accountGetLSPServicesForAccount();

获取可分配的任务执行者(我的团队自由职业者或内部账户用户)
GET /api/integration/v1/account/assignableExecutives

$sc->getAccountManager()->accountGetAssignableExecutives();

回调

重置通知接收配置 DELETE /api/integration/v1/callback

$sc->getCallbackManager()->callbackDelete()

读取账户通知接收配置 GET /api/integration/v1/callback

$sc->getCallbackManager()->callbackGet()

创建和更新通知接收配置 POST /api/integration/v1/callback

$callback=new CallbackPropertyModel();
$callback->setUrl('https://smartcat.ai');
$res=$sc->getCallbackManager()->callbackUpdate($callback);

读取最后的发送错误(最多 100 个) GET /api/integration/v1/callback/lastErrors

$sc->getCallbackManager()->callbackGetLastErrors(['limit'=>$limit])

客户端

创建一个指定名称的客户端并返回 ID
如果客户端已存在,则仅返回 ID。
POST /api/integration/v1/client/create

$clientId = $sc->getClientManager()->clientCreateClient('Test client');

获取账户中指定客户端的详细信息
GET /api/integration/v1/client/{clientId}

$client = $sc->getClientManager()->clientGetClient($clientId);

为指定客户设置指定的网络费率模型
PUT /api/integration/v1/client/{clientId}/set

$client = $sc->getClientManager()->clientSetClientNetRate($clientId, ['netRateId' => $netRateId]);

目录

接收指定目录 GET /api/integration/v1/directory

$sc->getDirectoriesManager()->directoriesGet(['type'=>'projectStatus'])

获取账户支持的解析格式
GET /api/integration/v1/directory/formats

$sc->getDirectoriesManager()->directoriesGetSupportedFormatsForAccount();

文档

删除一个或多个文档 DELETE /api/integration/v1/document

$sc->getDocumentManager()->documentDelete(['documentIds'=>['id1','id2']])

接收文档模型 GET /api/integration/v1/document

$sc->getDocumentManager()->documentGet(['documentId'=>$docId])

更新分配的文档 PUT /api/integration/v1/document/update

$bilingualFileImportSettings = new BilingualFileImportSettingsModel();
$bilingualFileImportSettings
    ->setConfirmMode('none')
    ->setLockMode('none')
    ->setTargetSubstitutionMode('all');
$updateDocumentModel = new UploadDocumentPropertiesModel();
$updateDocumentModel->setBilingualFileImportSettings($bilingualFileImportSettings);
$res = $sc->getDocumentManager()->documentUpdate([
    'documentId' => $docId,
    'updateDocumentModel' => $updateDocumentModel,
    'uploadedFile' => [
        'fileContent' => fopen(__DIR__ . '\Resources\File2_EN.docx', 'r'),
        'fileName' => 'File2_EN.docx'
    ]
]);

重命名分配的文档 PUT /api/integration/v1/document/rename

$sc->getDocumentManager()->documentRename(['documentId'=>$docId,'name'=>'New file name'])

使用翻译文件翻译指定的文档 PUT /api/integration/v1/document/translate

$sc->getDocumentManager()->documentTranslate([
   'documentId'=>$docId,
   'translationFile'=>[
       'filePath'=>'file path',
       'fileName'=>'file name'
   ]
])

导入包含文档翻译的 xliff 文件
PUT /api/integration/v1/document/translateWithXliff

$sc->getDocumentManager()->documentTranslateWithXliff([
    'documentId' => $docId,
    'confirmTranslation' => true,
    'overwriteUpdatedSegments' => true,
    'translationFile' => [
        'filePath' => 'file path',
        'fileName' => 'file.xliff'
    ]
]);

接收添加文档翻译的状态 GET /api/integration/v1/document/translate/status

$sc->getDocumentManager()->documentGetTranslationStatus(['documentId'=>$docId])

获取翻译导入结果的详细报告
GET /api/integration/v1/document/translate/result

$sc->getDocumentManager()->documentGetTranslationsImportResult(['documentId' => $docsId]);

获取统计数据
GET /api/integration/v1/document/statistics

$sc->getDocumentManager()->documentGetStatistics(['documentId' => $docsId]);

根据单词数量将文档分割成相等的部分,并将每个部分分配给一位自由职业者 POST /api/integration/v1/document/assignFreelancers

$sc->getDocumentManager()->documentAssignFreelancersToDocument(
 ['Abbyyaolid1','Abbyyaolid2'], 
 [
   'documentId' => $documentId, 
   'stageNumber' => $stageNumber
 ]
)

文档导出

请求文档导出(-s) POST /api/integration/v1/document/export

$sc->getDocumentExportManager()->documentExportRequestExport(['documentIds'=>['documenId1','documentId2'])

下载导出结果 GET /api/integration/v1/document/export/{taskId}

$sc->getDocumentExportManager()->documentExportDownloadExportResult($taskId);

术语表

获取术语表集
GET /api/integration/v1/glossaries

$res = $sc->getGlossaryManager()->glossaryGetGlossaries();

发票

为自由职业者创建可支付项
POST /api/integration/v1/invoice/job

$importJobModel = new ImportJobModel();
$importJobModel->setFreelancerId($freelanceId)
    ->setServiceType('translation')
    ->setJobDescription('Test invoice')
    ->setUnitsType('Any text')
    ->setUnitsAmount(10)
    ->setPricePerUnit(1)
    ->setCurrency('usd');
$res=$sc->getInvoiceManager()->invoiceImportJob($importJobModel);

占位符格式API

获取当前账户中所有可用的占位符格式
GET /api/integration/v1/placeholders

$res = $sc->getPlaceholderFormatApiManager()->placeholderFormatApiGetPlaceholderFormats();

为当前账户保存一组占位符格式
PUT /api/integration/v1/placeholders

$placeHolder1 = new PlaceholderFormatModel();
$placeHolder1->setRegex($regEx1);
$placeHolder2 = new PlaceholderFormatModel();
$placeHolder2->setRegex($regEx2);
$res = $sc->getPlaceholderFormatApiManager()->placeholderFormatApiUpdatePlaceholderFormats([$placeHolder1, $placeHolder2]);

验证指定的占位符格式
GET /api/integration/v1/placeholders/validate

$res = $this->sc->getPlaceholderFormatApiManager()->placeholderFormatApiValidatePlaceholderFormat(['format' => 'Stable\:(\s+)(.+)[\r|]\n']);

项目

删除项目 DELETE /api/integration/v1/project/{projectId}

$sc->getProjectManager()->projectDelete($projectId)

获取项目模型 GET /api/integration/v1/project/{projectId}

sc->getProjectManager()->projectGet($projectId)

使用ID更新项目
PUT /api/integration/v1/project/{projectId}

获取账户中所有项目的列表 GET /api/integration/v1/project/list

$sc->getProjectManager()->projectGetAll()

获取账户中所有项目的列表(v2,带偏移量)

GET /api/integration/v2/project/list

$sc->getProjectManager()->projectsGetWithOffset($offset = 0, $limit = 100)

获取统计信息和项目价值
GET /api/integration/v2/project/{projectId}/statistics

$sc->getProjectManager()->projectGetProjectStatistics($projectId);
do {
   sleep(5);
   $res = $sc->getProjectManager()->projectGetProjectStatistics($projectId);
} while(!is_array($res));

获取项目完成部分的统计信息
GET /api/integration/v1/project/{projectId}/completedWorkStatistics

$res = $sc->getProjectManager()->projectGetCompletedWorkStatistics($projectId);

获取项目中连接的翻译记忆库的列表
GET /api/integration/v1/project/{projectId}/translationmemories

$res = $sc->getProjectManager()->projectGetProjectTranslationMemories($projectId);

重写连接的翻译记忆库——所有目标语言使用相同的翻译记忆库集
POST /api/integration/v1/project/{projectId}/translationmemories

$translationMemoryForProjectModel = new TranslationMemoryForProjectModel();
$translationMemoryForProjectModel->setId($tmId);
$translationMemoryForProjectModel->setIsWritable(true);
$translationMemoryForProjectModel->setMatchThreshold(100);
$res = $sc->getProjectManager()->projectSetTranslationMemoriesForWholeProject($projectId, [$translationMemoryForProjectModel]);

获取为项目启用的术语表集
GET /api/integration/v1/project/{projectId}/glossaries

$res = $sc->getProjectManager()->projectGetGlossaries($projectId);

为项目启用一组术语表
PUT /api/integration/v1/project/{projectId}/glossaries

$res = $this->sc->getProjectManager()->projectSetGlossaries($projectId, [$glossaryId1, $glossaryId2]);

开始为项目生成统计信息
POST /api/integration/v1/project/{projectId}/statistics/build

$sc->getProjectManager()->projectBuildStatistics($this->prj->getId());

重写连接的翻译记忆库——每个目标语言都有其自己的翻译记忆库集
POST /api/integration/v1/project/{projectId}/translationmemories/bylanguages

$translationMemoryForProjectModel = new TranslationMemoryForProjectModel();
$translationMemoryForProjectModel->setId($tmId);
$translationMemoryForProjectModel->setIsWritable(true);
$translationMemoryForProjectModel->setMatchThreshold(100);
$tm = new TranslationMemoriesForLanguageModel();
$tm->setLanguage('en');
$tm->setTranslationMemories([$translationMemoryForProjectModel]);
$res = $sc->getProjectManager()->projectSetProjectTranslationMemoriesByLanguages($projectId, [$tm]);

创建项目 POST /api/integration/v1/project/create

$prjCreate = new CreateProjectWithFilesModel();
$prjCreate->setName('Test project');
$prjCreate->setDescription('Test project');
$prjCreate->setSourceLanguage('ru');
$prjCreate->setTargetLanguages(['en']);
$prjCreate->setAssignToVendor(false);
$prjCreate->setUseMT(false);
$prjCreate->setPretranslate(false);
$prjCreate->setAutoPropagateRepetitions(false);
$prjCreate->setIsForTesting(true);
$prjCreate->setWorkflowStages(['translation']);
$prjCreate->attacheFile(fopen(__DIR__.'\Resources\File1_EN.docx'),'File1_EN.docx');
$sc->getProjectManager()->projectCreateProjectWithFiles($prjCreate);

向项目中添加新文档 POST /api/integration/v1/project/document

$bilingualFileImportSettings = new BilingualFileImportSettingsModel();
$bilingualFileImportSettings
    ->setConfirmMode('none')
    ->setLockMode('none')
    ->setTargetSubstitutionMode('all');
$documentModel = new CreateDocumentPropertyWithFilesModel();
$documentModel->setBilingualFileImportSettings($bilingualFileImportSettings);
$documentModel->attachFile(fopen(__DIR__ . '\Resources\File2_EN.docx'), 'File2_EN.docx');
$res = $sc->getProjectManager()->projectAddDocument([
    'documentModel' => [$documentModel],
    'projectId' => $projectId
]);

如果您想设置拆分设置,则应设置拆分算法。例如

$bilingualFileImportSettings = new BilingualFileImportSettingsModel();
$bilingualFileImportSettings
    ->setConfirmMode('none')
    ->setLockMode('none')
    ->setTargetSubstitutionMode('all');

$disassembleSettings = (new DisassembleSettingsModel())
     ->setTranslatableAttributes(['img'=>['data-caption']]);

$documentModel = new CreateDocumentPropertyWithFilesModel();
$documentModel->setDisassembleAlgorithmName('html');
$documentModel->setDisassembleSettings($disassembleSettings);
$documentModel->setBilingualFileImportSettings($bilingualFileImportSettings);
$documentModel->attachFile(fopen(__DIR__ . '\Resources\File2_EN.docx'), 'File2_EN.docx');
$res = $sc->getProjectManager()->projectAddDocument([
    'documentModel' => [$documentModel],
    'projectId' => $projectId
]);

已弃用

$sc->getProjectManager()->projectAddDocument([
    'projectId'=>$projectId, 
    'file' => [
       'filePath'=>'path to file',
       'fileName'=>'File name'
    ]
]);

向项目中添加新目标语言 POST /api/integration/v1/project/language

$sc->getProjectManager()->projectAddLanguage(['projectId'=>$projectId,'targetLanguage'=>'ja']);

为项目中文档的特定阶段分配翻译者组 PUT /api/integration/v1/project/{projectId}/assignGroupToWorkflowStage

$sc->getProjectManager()->projectAssignGroupToWorkflowStage($projectId,['groupName'=>'Administrators','workflowStage'=>'translation'])

取消项目 POST /api/integration/v1/project/cancel

$sc->getProjectManager()->projectCancelProject(['projectId'=>$projectId])

恢复项目 POST /api/integration/v1/project/restore

$sc->getProjectManager()->projectRestoreProject(['projectId'=>$projectId])

完成所有项目文档的工作流程。项目状态将变为已完成。
POST /api/integration/v1/project/restore

$sc->getProjectManager()->projectCompleteProject(['projectId' => $this->prj->getId()]);

翻译记忆

删除TM
DELETE /api/integration/v1/translationmemory/{tmId}

$sc->getTranslationMemoriesManager()->translationMemoriesRemoveTranslationMemory($tmId)

获取TM详细信息
GET /api/integration/v1/translationmemory/{tmId}

$sc->getTranslationMemoriesManager()->translationMemoriesGetMetaInfo($tmId);

将TMX文件导入TM
POST /api/integration/v1/translationmemory/{tmId}

$sc->getTranslationMemoriesManager()->translationMemoriesImport(
   $tmId,
   [
       'replaceAllContent' => 'true',
       'tmxFile' => [
           'filePath' => __DIR__ . '\Resources\Space.tmx'
       ]
   ]
);

获取帐户可用的TM集合
GET /api/integration/v1/translationmemory

$thirstRes = $sc->getTranslationMemoriesManager()->translationMemoriesGetTranslationMemoriesBatch([
   'lastProcessedId' => '',
   'batchSize' => 10
]);
$last = array_pop($thirstRes);
$secondRes = $sc->getTranslationMemoriesManager()->translationMemoriesGetTranslationMemoriesBatch([
   'lastProcessedId' => $last->getId(),
   'batchSize' => $count
]);

创建一个空的TM
POST /api/integration/v1/translationmemory

$tm = new CreateTranslationMemoryModel();
$name = 'PHP Unit ' . date('U');
$tm->setName($name);
$tm->setSourceLanguage('ru');
$tm->setTargetLanguages(['en']);
$tm->setDescription("Description: $name");

$tmId = $sc->getTranslationMemoriesManager()->translationMemoriesCreateEmptyTM($tm);

获取TMX导入的任务集合
GET /api/integration/v1/translationmemory/task

$sc->getTranslationMemoriesManager()->translationMemoriesGetPendingTasks();

设置TM所需的目标语言数组
PUT /api/integration/v1/translationmemory/{tmId}/target

$sc->getTranslationMemoriesManager()->translationMemoriesSetTMTargetLanguages($tmId, ["en", "es"]);

从TM导出TMX文件
GET /api/integration/v1/translationmemory/{tmId}/file

$sc->getTranslationMemoriesManager()->translationMemoriesExportFile($tmId, ['withTags' => true])

从给定的TM获取匹配项
POST /api/integration/v1/translationmemory/matches

$tmMatch = new TmMatchesRequest();
$tmMatch->setSourceLanguage('en');
$tmMatch->setTargetLanguage('ru');
$segmentModel = new SegmentModel();
$segmentModel->setText('Test text message');
$segmentModel->setPrevContext('');
$segmentModel->setNextContext('');
$segmentModel->setTags([]);
$tmMatch->setSegmentModel($segmentModel);

$sc->getTranslationMemoriesManager()->translationMemoriesGetTMTranslations($tmMatch, ['tmId' => $tmId]);

删除给定的导入任务
DELETE /api/integration/v1/translationmemory/task/{taskId}

$sc->getTranslationMemoriesManager()->translationMemoriesRemoveSpecificImportTask($last->getId())

用户

使用指定参数创建新用户
POST /api/integration/v1/user

$user = new CreateUserRequest();
$user->setEmail('test@test.com')
    ->setFirstName('FirstName')
    ->setLastName('LastName')
    ->setExternalId('my-external-id')
    ->setRightsGroup('executive');
$res = $sc->getUserManager()->userCreate($user);

删除用户
DELETE /api/integration/v1/user/{accountUserId}

$sc->getUserManager()->userDelete($smartcatAccountUserId);

获取用户模型
GET /api/integration/v1/user/{accountUserId}

$res = $sc->getUserManager()->userGet($smartcatAccountUserId);

更新用户数据
PUT /api/integration/v1/user/{accountUserId}

$updateModel = new UpdateUserRequest();
$updateModel->setFirstName($newName);
$sc->getUserManager()->userUpdate($smartcatAccountUserId, $updateModel);

通过其外部ID获取用户
GET /api/integration/v1/user/external

$res = $sc->getUserManager()->userGetExternal(['id' => $externalId]);