从 Dropbox iOS Core API 获取音频文件

Posted

技术标签:

【中文标题】从 Dropbox iOS Core API 获取音频文件【英文标题】:Get Audio Files From Dropbox iOS Core API 【发布时间】:2015-06-02 17:50:38 【问题描述】:

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

    方法有点慢(递归)

    我收到这两个随机错误(可能是由于每秒多次请求)

    列出一个随机文件夹。

    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
    

    我知道我只是获取 MP3 文件。有没有办法在不检查所有路径扩展的情况下获取所有媒体文件?

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

- (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】:

元数据方法在像这样递归使用时肯定会效率低下,因此,您需要使用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/

在您的情况下,这应该是一种更有效的方法,可以解决您的前两个问题。

但它不提供过滤服务器上特定文件类型的方法,因此您需要在客户端执行该操作。

【讨论】:

以上是关于从 Dropbox iOS Core API 获取音频文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Dropbox python API 获取文件的共享 URL?

如何使用传入的图像 URL 将图像从 iOS 上传到 DropBox?

Dropbox Api,获取用户历史记录

使用适用于 iOS 的 Dropbox API 计算文件大小

Dropbox 核心 API 和同步 API

Dropbox 迁移(API v1 已停用)iOS 目标 c(备份、恢复)