Как получить все записи в Kaltura за пределами отметки 10 тыс.? - PullRequest
0 голосов
/ 18 мая 2018

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

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

}

1 Ответ

0 голосов
/ 17 июля 2018

Вы выполняете итерацию на первой странице каждого ответа, может быть больше одной страницы.У 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);
...