Rackspace - фильтры php-opencloud - Документация для действительных фильтров ObjectList?
Кто-нибудь знает, если / где есть документация для действительных массивов фильтра ObjectList?
У записи проекта на github есть крошечная реклама, которая направляет меня к документации API, но в ней также нет полного списка, и поиск по "фильтрам" говорит только о контейнерах, а не о самом объекте.
У меня есть список видео, каждый в четырех разных форматах, названных одинаково (без типа файла). Используя php-opencloud API, я хочу получить только один из этих форматов видео (чтобы получить уникальное имя файла, а не все его разные форматы).
Я полагал, что использование фильтра - это путь, но я не могу найти надежную документацию.
Кто-то должен был сделать это раньше. Выручить новичка?
3 ответа
Как отметил Глен, в данный момент не поддерживается служба для применения фильтров к объектам. Единственное, что вас может заинтересовать - это предоставление префикса, который позволяет уточнить возвращаемые объекты в зависимости от того, как начинаются имена файлов. Таким образом, если вы отправите "bobcatscuddling" в качестве префикса, вы вернете все связанные форматы видео для этой одной записи.
Кажется, ваш единственный вариант - вернуть все объекты и перебрать коллекцию:
use OpenCloud\Rackspace;
$connection = new Rackspace(RACKSPACE_US, array(
'username' => 'foo',
'apiKey' => 'bar'
));
$service = $connection->objectStore('cloudFiles', 'DFW', 'publicURL');
$container = $service->container('CONTAINER_NAME');
$processedObjects = array();
$marker = '';
while ($marker !== null) {
$objects = $container->objectList('marker' => $marker);
$total = $objects->count();
$count = 0;
while ($object = $objects->next()) {
// Extract the filename
$filename = pathinfo($object->name, PATHINFO_FILENAME);
// Make sure you only deal with the filename once (i.e. to ignore different extensions)
if (!in_array($processedObjects, $filename)) {
// You can do your DB check here...
// Stock the array
$processedObjects[] = $filename;
}
$count++;
$marker = ($count == $total) ? $object->name : null;
}
}
Что вы заметите, так это то, что вы увеличиваете маркер и делаете новый запрос для каждых 10000 объектов. Я не проверял это, но это, вероятно, приведет вас в правильном направлении.
Большинство ссылок на этой странице сейчас мертвы. Вот текущая ссылка на документацию php-opencloud, которая включает пример использования префикса для фильтрации результатов objectList:
http://docs.php-opencloud.com/en/latest/services/object-store/objects.html
Я не нашел документации по этому вопросу, но, очевидно, когда в документации Rackspace Cloud Files упоминаются аргументы в строке запроса, они преобразуются в аргументы в вызове метода objectList следующим образом:
GET /v1/MossoCloudFS_0672d7fa-9f85-4a81-a3ab-adb66a880123/AppleType?limit=2&marker=grannysmith
равняется
$container->objectList(array('limit'=>'2', 'marker'=>'grannysmith'));
К сожалению, базовый API не поддерживает фильтрацию объектов в контейнерах Swift/Cloud Files (см. http://docs.rackspace.com/files/api/v1/cf-devguide/content/List_Objects-d1e1284.html). $filter
Параметр поддерживается как часть общего кода, но на самом деле он ничего не делает с облачными файлами здесь.
Я посмотрю, смогу ли я обновить документы, чтобы отразить это.