Как получить все записи СМИ в Kaltura, за пределами отметки 10k?

Я использую php5.3 SDK: https://github.com/kaltura/KalturaGeneratedAPIClientsPHP53
У нас есть 90 000 записей в СМИ, но я могу получить только 20 000 записей. Следующий код прост. Кто-нибудь может мне помочь?

// Main entry point
public function mywrite(Route $route, Console $console)
{
// Max records is 500, the range cannot be too big.
$range = 3600 * 24;
$this->__mywrite($route, $console, $range);
}

// Count how many objects we can get
// $veryStartDate == 1446173087, sep 2015
// $maxDate == 1526469375, may 2018
public function __mywrite($route, $console, $range) {
$configObj = $this->readMyWriteHistoryConfigFile();
$lastProcessObj = $this->readMyWriteLastProcessFile();

//
$veryStartDate = $configObj->veryStartDate;
$maxDate = $configObj->maxDate;

// Set start Date
$startDate = $veryStartDate;
$endDate = $startDate + $range;

//
$totalCount = 0;
while($startDate <= $maxDate) {
$objs = $this->listMediaByLastPlay($startDate, $endDate);

$totalCount += count($objs);

echo "\n$startDate - $endDate:\n";
echo "\n". count($objs). "\n";

$startDate = $endDate + 1;
$endDate = $endDate + $range;
} // end while loop

// we get like 25k records, but we have 90k records....
echo "\ncount: $totalCount\n";
}


// we call the client and get records by start last play date and end last play date
public  function listMediaByLastPlay($startDate, $endDate) {
// Page size
$pageSize = 1000;
// Client with admin
$client = $this->getClient(\KalturaSessionType::ADMIN);
// media
$mediaObj = $client->media;

// Set a range to pull, order by last played at
$filter = new \KalturaMediaEntryFilter();
$filter->lastPlayedAtGreaterThanOrEqual = $startDate;
$filter->lastPlayedAtLessThanOrEqual = $endDate;
$filter->orderBy = '+lastPlayedAt';

// We still want more records
$pager = new \KalturaFilterPager();
$pager->pageSize = $pageSize;

// now list.....
$arr = $mediaObj->listAction($filter, $pager)->objects;
$buf = array();

foreach($arr as $k => $v) {
$t = array();

$t['dataUrl'] = $v->dataUrl;
$t['flavorParamsIds'] = $v->flavorParamsIds;

$t['plays'] = $v->plays;
$t['views'] = $v->views;
$t['lastPlayedAt'] = $v->lastPlayedAt;

$buf[] = $t;
}

return $buf;

}

0

Решение

Вы повторяете на первой странице каждого ответа, может быть больше, чем одна страница.
У kaltura ListResponse есть свойство totalCount.
поэтому ваш код должен выглядеть примерно так:

$pager = new \KalturaFilterPager();
$pageIndex = 1;
$entriesGot = 0;
$buf = array();

do
{
$pager->pageSize = $pageSize;
$pager->pageIndex = $pageIndex++;

// now list.....
$response = $mediaObj->listAction($filter, $pager);
$arr = $response->objects;
$entriesGot += count($arr);

foreach($arr as $k => $v) {
$t = array();

$t['dataUrl'] = $v->dataUrl;
$t['flavorParamsIds'] = $v->flavorParamsIds;

$t['plays'] = $v->plays;
$t['views'] = $v->views;
$t['lastPlayedAt'] = $v->lastPlayedAt;

$buf[] = $t;
}
}while($entriesGot < $response->totalCount);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]