emis/php-api-client

EMIS PHP API 客户端库

1.3.11 2019-09-16 14:52 UTC

README

EMIS 拥有来自成千上万的知名本地和全球来源的丰富新闻和报告内容。EMIS 文档 API 允许您通过自己的集成数据库访问我们拥有的新闻和报告。我们以 XML 格式提供数据,您可以批量下载(订阅源)或通过按需搜索(API)下载。EMIS API PHP SDK 以面向对象的方式提供了一种简单的方法,以最少的 API 知识快速访问所需信息。

composer.json

创建一个新项目并添加 EMIS API composer 依赖

composer require emis/php-api-client

自动加载

在您的脚本中,初始化 composer 的自动加载器

require('vendor/autoload.php');

初始化和登录/注销

至少,您的脚本应该登录到 EMIS API 并注销

use Emis\Http\Client;

$client = new Client();
$client->setApi(Client::DOCUMENTS_API);
$client->login('username', 'password');

$client->logout();

重用会话

如果您的脚本处理的是永久性会话,而不是在每个请求上登录/注销,则更好。您应该存储由登录会话生成的令牌,然后在下一个请求中重用它。在这种情况下不应执行注销,因为这将销毁当前会话,并且您无法重用令牌。令牌每天到期。以下示例展示了如何在文件系统中存储当前会话

$token = file_get_contents('token');
$client = new Client();
$client->setApi(Client::DOCUMENTS_API);

if (!$token) {
    $client->login('username', 'password');
    file_put_contents('token', $client->getToken());
} else {
    $client->setToken($token);
}

发送 API 请求

API 请求通过在 Emis\Document\Api\Proxy 命名空间下找到的一系列代理类进行。一个简单的示例是获取国家代码 'HU' 的文档标题

use Emis\Document\Api\Proxy\Search;

...

$search = new Search($client);
$result = $search->query('HU');

foreach ($result->getDocuments() as $document) {
    echo $document->getTitle() . "\n";
}

其他示例

使用 searchQuery 方法轻松传递所需的查询参数

use Emis\Entity\Api\Document\Search as SearchRequest;

...

$search = new Search($client);
$searchRequest = new SearchRequest();
$searchRequest->setCountries(array('RU'));
$searchRequest->setLanguages(array('en', 'ru'));
$result = $search->searchQuery($searchRequest);

$counter = array('en' => 0, 'ru' => 0);

foreach ($result->getDocuments() as $document) {
    $counter[$document->getLanguage()->getCode()]++;
}

printf("Total of %s en documents found.\n", $counter['en']);
printf("Total of %s ru documents found.\n", $counter['ru']);

将 Search::getDocuments 作为子请求逐个获取文档

$search = new Search($client);
$result = $search->query('HU');

foreach ($result->getDocuments() as $document) {
    $subResult = $search->getDocuments($document->getId());

    foreach ($subResult->getDocuments() as $subDocument) {
        echo $subDocument->getTitle() . "\n";
    }
}

获取词典实体列表(国家)

示例代码打印国家代码和国家名称,可以轻松修改以返回任何其他词典方法的结果。

use Emis\Document\Api\Proxy\Dictionary;

...

$dictionary = new Dictionary($client);

foreach ($dictionary->getCountries() as $country) {
    echo $country->getCode() . " : " . $country->getName() . "\n";
}

单份文档的使用跟踪

use Emis\Document\Api\Proxy\Search;
use Emis\Document\Api\Proxy\Usage;

...

$search = new Search($client);
$result = $search->query('HU');
$documents = $result->getDocuments();

$usage = new Usage($client);
$usage->report($documents[0]->getId(), new \DateTime());

多份文档的使用跟踪

use Emis\Document\Api\Proxy\Search;
use Emis\Document\Api\Proxy\Usage;
use Emis\Entity\Api\UsageReport\Document as ReportDocument;
use Emis\Entity\Api\UsageReport\Request as UsageRequest;

... 

$search = new Search($client);
$result = $search->query('HU');

$usage = new Usage($client);
$request = new UsageRequest();

foreach ($result->getDocuments() as $document) {
    $reportDocument = new ReportDocument();
    $reportDocument->setDocumentId($document->getId());
    $reportDocument->setAccessTime(new \DateTime());
    $request->addDocument($reportDocument);
}

$usage->reportMultiple($request);