2015-06-02 4 views
0

Мне нужно перечислить все аудиофайлы из Dropbox пользователя. Я уже настроил приложение на консоли разработчика, чтобы иметь соответствующие разрешения. Теперь, когда я уже аутентифицировал пользователя, я могу получить все каталоги, но мне нужен метод, который входит в каждую папку и список аудиофайлов, которые он может найти. В настоящее время мой метод делает это, но у меня есть три проблемы.Получить аудиофайлы из Dropbox API ядра iOS

  1. Метод вид медленно (рекурсивный)
  2. Я получаю эти две случайные ошибки (вероятно, из-за многократного запроса в секунду)

    Листинг случайную папку.

    2015-06-02 12:44:52.634 Podbox[9038:2918749] Error loading metadata: Error  
    Domain=dropbox.com Code=503 "The operation couldn’t be completed. 
    (dropbox.com error 503.)" UserInfo=0x170270780 {path=/ios 
    dev/passbook/signpass/signpass.xcodeproj/xcuserdata/gsteele.xcuserdatad, 
    error=Rate limiting oauth_accesses_per_access_token} 
    

    Доступ Музыка

    2015-06-02 12:44:32.665 Podbox[9038:2918749] Error loading metadata: Error 
    Domain=NSURLErrorDomain Code=-1001 "The operation couldn’t be completed. 
    (NSURLErrorDomain error -1001.)" 
    UserInfo=0x17047cf00 {path=/music/Blink 182/Unknown Album} 
    
  3. Я знаю, что им просто получать файлы MP3. Есть ли способ получить все медиафайлы, не проверяя все их PathExtensions?

В настоящее время я пытаюсь что-то вроде этого:

- (void)restClient:(DBRestClient *)client loadedMetadata:(DBMetadata *)metadata { 

    if (metadata.isDirectory) { 

    for (DBMetadata *file in metadata.contents) { 

      if (file.isDirectory) { 

       [self.restClient loadMetadata:file.path]; 

      } else if ([file.path.pathExtension isEqualToString:@"mp3"]){ 

       NSLog(@" %@", file.filename); 

      } 

     } 
    } 
} 

Вы удивительные.

ответ

0

Метод метаданных, безусловно, будет неэффективным при использовании рекурсивно, как это, так что вместо этого, вы будете хотеть использовать loadDelta метод:

/* Loads a list of files (represented as DBDeltaEntry objects) that have changed since the cursor was generated */ 
- (void)loadDelta:(NSString *)cursor; 

- (void)restClient:(DBRestClient*)client loadedDeltaEntries:(NSArray *)entries reset:(BOOL)shouldReset cursor:(NSString *)cursor hasMore:(BOOL)hasMore; 
- (void)restClient:(DBRestClient*)client loadDeltaFailedWithError:(NSError *)error; 

Там в блоге здесь (хотя для Python), который охватывает Основная идея о том, как использовать это:

https://blogs.dropbox.com/developers/2013/12/efficiently-enumerating-dropbox-with-delta/

Это должно быть более эффективным способом в вашем случае, решая свои первые два вопроса.

Он не предлагает способ фильтрации определенных типов файлов на сервере, поэтому вам нужно будет сделать это на стороне клиента.

Смежные вопросы