从Dropbox iOS Core API获取音频文件

时间:2015-06-02 17:50:38

标签: ios audio dropbox-api

我需要列出用户Dropbox中的所有音频文件。我已经在开发者控制台上配置了我的应用程序以获得相应的权限。既然我已经对用户进行了身份验证,我可以检索所有目录,但我想要一个进入每个文件夹的方法并列出它可以找到的AudioFiles。目前我的方法做到了,但我有三个问题。

  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的情况下获取所有媒体文件?

  4. 目前我正在尝试这样的事情:

    - (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);
    
                }
    
            }
        }
    }
    

    你太棒了。

1 个答案:

答案 0 :(得分: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/

这应该是一种更有效的方法,解决您的前两个问题。

它没有提供过滤到服务器上特定文件类型的方法,所以你需要做那个客户端。