/**
  * @param array $fields
  * @param array $params
  * @return Cursor
  */
 public function getAdVideos(array $fields = array(), array $params = array())
 {
     return $this->getManyByConnection(AdVideo::className(), $fields, $params);
 }
if (is_null($data) || !is_array($data['data']) || count($data['data']) === 0) {
    throw new \RuntimeException("no promotable posts available for page " . $page_id);
}
$post_id = $data['data'][0]['id'];
// create Ad Image
$zip_path = $config->testZippedImagesPath;
$images = AdImage::createFromZip($zip_path, $ad_account_id);
$image_1_hash = $images[0]->{AdImageFields::HASH};
$image_2_hash = $images[1]->{AdImageFields::HASH};
$image_3_hash = $images[1]->{AdImageFields::HASH};
// create Ad Video
$retry_delay = 3;
$max_retry = 4;
$video_name = $config->testRunId;
$video_path = $config->testVideoPath;
$video = new AdVideo(null, $ad_account_id);
$video->setData(array(AdVideoFields::NAME => $video_name, AdVideoFields::SOURCE => $video_path));
$video->create();
$video_id = $video->{AdVideoFields::ID};
$video_thumbnails = null;
while (--$max_retry >= 0) {
    sleep($retry_delay);
    $video_thumbnails = $video->getApi()->call('/' . $video_id . '/thumbnails', RequestInterface::METHOD_GET)->getContent();
    if ($video_thumbnails && count($video_thumbnails['data']) > 0) {
        break;
    }
}
if (is_null($video_thumbnails) || !is_array($video_thumbnails['data']) || count($video_thumbnails['data']) === 0) {
    throw new \RuntimeException("no thumbnails available for video " . $video_id . ", please try again");
}
$video_image_url = $video_thumbnails['data'][0]['uri'];