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 Параметр поддерживается как часть общего кода, но на самом деле он ничего не делает с облачными файлами здесь.

Я посмотрю, смогу ли я обновить документы, чтобы отразить это.

Другие вопросы по тегам