测试已测试 | ✓ |
Lang语言 | Obj-CObjective C |
许可证 | MIT |
发布上次发布 | 2014年12月 |
由 Sam Symons 维护。
依赖 | |
AFNetworking | ~> 2.3 |
Mantle | ~> 1.5 |
RedditKit 是一个 Reddit API 包装器,使用 Objective-C 编写。
RedditKit 的文档在 CocoaDocs 上提供。
添加 RedditKit
git submodule add https://github.com/samsymons/RedditKit.git
git submodule update --init --recursive
获取其依赖项添加 AFNetworking
在新建的 RedditKit
目录中,有一个 External
目录包含其依赖项,它会由 git submodule update
命令填充。将 AFNetworking 的 Classes
目录拖入您的项目中。
添加 Mantle
按照 Mantle 的安装指南 操作。
设置好所有内容后,您可能需要重新启动 Xcode 以使其获取您的更改。
RedditKit 围绕 RKClient
类构建。此类管理单个 Reddit 账户的认证,并代表用户执行 HTTP 请求。可以使用 sharedClient
类方法将其作为单例使用,或作为独立的对象。
[[RKClient sharedClient] signInWithUsername:@"name" password:@"password" completion:^(NSError *error) {
if (!error)
{
NSLog(@"Successfully signed in!");
}
}];
一旦登录,RKClient
将跟踪任何必要的认证状态。然后您可以调用需要认证的方法,例如获取您订阅的子版块。
注意: RedditKit 不会自己保存您的认证凭据;您需要手动通过 Keychain 完成,并在您的应用启动时调用 signInWithUsername:password:completion:
。
[[RKClient sharedClient] subscribedSubredditsWithCompletion:^(NSArray *subreddits, NSError *error) {
NSLog(@"Subreddits: %@", subreddits);
}];
检索子版块中的当前热门链接很简单。
RKSubreddit *subreddit = [[self subreddits] firstObject];
[[RKClient sharedClient] linksInSubreddit:subreddit pagination:nil completion:^(NSArray *links, RKPagination *pagination, NSError *error) {
NSLog(@"Links: %@", links);
}];
然后您可以对该链接进行点赞。
RKLink *link = [[self links] firstObject];
[[RKClient sharedClient] upvote:link completion:^(NSError *error) {
NSLog(@"Upvoted the link!");
}];
RedditKit 没有内置的速率限制。Reddit 的 API 规则要求您每分钟最多进行 30 次请求,并且尽量每 30 秒 不要请求同一页面。您可以在他们的维基页面上了解 API 规则 (GitHub)。
获取链接的热门评论
RKLink *link = [[self links] firstObject];
[[RKClient sharedClient] commentsForLink:link completion:^(NSArray *comments, NSError *error) {
if (comments)
{
NSLog(@"Comments: %@", comments);
}
}];
获取用户的账户
[[RKClient sharedClient] userWithUsername:@"name" completion:^(RKUser *account, NSError *error) {
if (account)
{
NSLog(@"%@", account);
}
}];
发送私信
[[RKClient sharedClient] sendMessage:@"Hello!" subject:nil recipient:@"samsymons" completion:nil];
取消请求
RedditKit 的每个方法都返回一个 NSURLSessionDataTask
,可以用来在完成前取消请求。
NSURLSessionDataTask *task = [[RKClient sharedClient] frontPageLinksWithCompletion:nil];
[task cancel];
可以进行分页的方法可以接受 RKPagination
对象。
RKPagination
允许您更改返回对象的排序。例如,当获取子版块中最前面的25个链接时,设置 subredditCategory
属性可以更改是否获得现在的最前25个链接还是总体上的最高链接。
除了允许您更改请求的分页外,RedditKit 还提供了对任何请求的分页信息的支持。查找子版块中链接的请求,将分页对象作为其完成块的参数。
示例项目实现了在表格视图控制器中的分页,当用户滚动到页面底部时会加载新的链接。
RKClient
管理一个唯一的 Reddit 账户。当支持多个账户时,您只需从使用 sharedClient
方法切换到为每个账户使用一个 RKClient
实例。
例如,此代码
[[RKClient sharedClient] signInWithUsername:@"username" password:@"password" completion:nil];
[[RKClient sharedClient] upvote:someLink completion:nil];
变为如下
RKClient *client = [[RKClient alloc] init];
[client signInWithUsername:@"username" password:@"password" completion:nil];
[client upvote:someLink completion:nil];
如何管理各种 RKClient
实例取决于您。可能需要一个 NSDictionary
,并使用 Reddit 用户名作为键。
您可以为 RedditKit 的各项操作配置各种方面,包括其默认 API 端点和用户代理。请参阅 RKClient
标题文件以获取更多信息。
您应该将用户代理设置为您应用程序的名称和版本,以及您的 Reddit 用户名。这样,如果您的应用程序中存在有缺陷的版本在野外,Reddit 管理员将知道该联系谁。
如果您没有手动设置,用户代理将由 AFNetworking 提供。
RedditKit 需要 iOS 7.0+ 或 Mac OS X 10.9+。要运行其测试套件,需要 Xcode 5。
需要 ARC。对于不使用 ARC 的项目,您可以在 RedditKit 源文件上设置 -fobjc-arc
编译器标志。
SAMCategories 由 Sam Soffes 编写,用于在 Reddit 链接标题中解转义 HTML 实体。
版权所有 (c) 2013 Sam Symons (http://samsymons.com/)
兹特别授予任何获得本软件及相关文档副本(以下简称为“软件”)的人士,免费使用本软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,以及允许接受本软件的人士进行上述行为的权利,前提是遵守以下条件:
上列版权声明和本许可声明应当包含在本软件的副本或主要部分中。
上述软件按“现状”提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、特定目的的适用性和非侵权性的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论是基于合同、侵权或任何其他原因,由software产生、引起或与 software 使用或其它方式使用相关。