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);