RedditKit 1.3.0

RedditKit 1.3.0

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布上次发布2014年12月

Sam Symons 维护。



 
依赖
AFNetworking~> 2.3
Mantle~> 1.5
 

RedditKit 1.3.0

RedditKit 是一个 Reddit API 包装器,使用 Objective-C 编写。

文档

RedditKit 的文档在 CocoaDocs 上提供。

安装

子模块

添加 RedditKit

  1. 将 RedditKit 添加为您的项目的 git 子模块: git submodule add https://github.com/samsymons/RedditKit.git
  2. 使用 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 实体。

需要帮助?

打开 问题报告,或在 Twitter 上联系我。

许可

版权所有 (c) 2013 Sam Symons (http://samsymons.com/)

兹特别授予任何获得本软件及相关文档副本(以下简称为“软件”)的人士,免费使用本软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,以及允许接受本软件的人士进行上述行为的权利,前提是遵守以下条件:

上列版权声明和本许可声明应当包含在本软件的副本或主要部分中。

上述软件按“现状”提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、特定目的的适用性和非侵权性的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论是基于合同、侵权或任何其他原因,由software产生、引起或与 software 使用或其它方式使用相关。