FlickrKit 是一个由 David Casserly 编写的用于访问 Flickr API 的 iOS Objective-C 库。它被用于 galleryr pro iPad 应用程序。
当我们已经有 ObjectiveFlickr 的时候,还需要 FlickrKit 做什么?为什么不要呢?我使用 ObjectiveFlickr 很久了,这个库中的一些方法就源于 ObjectiveFlickr。然而,有时调试 ObjectiveFlickr 会遇到问题,因为其网络代码是定制的,对我来说不熟悉。此外,我在 FlickrKit 上走了更远的路,并提供了比 ObjectiveFlickr 更多的功能...继续阅读...
我不支持 Mac OS X(因为我从未与之合作..抱歉! - 欢迎提供端口!)。我不支持旧的认证方法或迁移 - 它仅使用 OAuth - 而 Flickr 现在 OAuth 也已经几乎一年了。它只支持单个用户认证 - 因此不支持多个 Flickr 账户
FlickrKit 需要iOS 6.0及以上版本,使用ARC。可能与旧操作系统兼容,但尚未测试。
如果您在非ARC项目中使用FlickrKit,您需要在所有FlickrKit源文件上设置-fobjc-arc
编译器标志。
要在Xcode中设置编译器标志,请转到您的活动目标并选择“构建阶段”选项卡。现在选择所有FlickrKit源文件,按Enter键,输入-fobjc-arc
然后点击“完成”以启用FlickrKit的ARC。
将此行添加到您的Podfile
目标中
pod 'FlickrKit'
运行pod install
,一切就绪!
源文件中包含一个示例项目,展示如何开始。它有一些示例用法。UI可能不吸引人! - 但重要的是代码中API的使用。
您可以从Flickr账户中获取API密钥和密钥。您需要这些才能使用API。
FlickrKit.sharedFlickrKit().initializeWithAPIKey(apiKey, sharedSecret: secret)
[[FlickrKit sharedFlickrKit] initializeWithAPIKey:@"YOUR_KEY" sharedSecret:@"YOUR_SECRET"];
此示例演示了使用生成的Flickr API模型类。
let flickrInteresting = FKFlickrInterestingnessGetList()
flickrInteresting.per_page = "15"
FlickrKit.sharedFlickrKit().call(flickrInteresting) { (response, error) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
if (response != nil) {
// Pull out the photo urls from the results
let topPhotos = response["photos"] as! [NSObject: AnyObject]
let photoArray = topPhotos["photo"] as! [[NSObject: AnyObject]]
for photoDictionary in photoArray {
let photoURL = FlickrKit.sharedFlickrKit().photoURLForSize(FKPhotoSizeSmall240, fromPhotoDictionary: photoDictionary)
self.photoURLs.append(photoURL)
}
}
})
}
FlickrKit *fk = [FlickrKit sharedFlickrKit];
FKFlickrInterestingnessGetList *interesting = [[FKFlickrInterestingnessGetList alloc] init];
[fk call:interesting completion:^(NSDictionary *response, NSError *error) {
// Note this is not the main thread!
if (response) {
NSMutableArray *photoURLs = [NSMutableArray array];
for (NSDictionary *photoData in [response valueForKeyPath:@"photos.photo"]) {
NSURL *url = [fk photoURLForSize:FKPhotoSizeSmall240 fromPhotoDictionary:photoData];
[photoURLs addObject:url];
}
dispatch_async(dispatch_get_main_queue(), ^{
// Any GUI related operations here
});
}
}];
此示例使用调用FlickrKit的字符串/字典方法,这是使用模型类之外的另一个选择。它还演示了传递一个一小时的缓存时间,这意味着如果在一小时内再次调用它,则会命中缓存而不是网络。快!
[[FlickrKit sharedFlickrKit] call:@"flickr.photos.search" args:@{@"user_id": self.userID, @"per_page": @"15"} maxCacheAge:FKDUMaxAgeOneHour completion:^(NSDictionary *response, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (response) {
// extract images from the response dictionary
} else {
// show the error
}
});
}];
上传一张照片并观察其进度。imagePicked来自UIImagePickerControllerDelegate,但可以是任何UIImage。
self.uploadOp = [[FlickrKit sharedFlickrKit] uploadImage:imagePicked args:uploadArgs completion:^(NSString *imageID, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (error) {
// oops!
} else {
// Image is now in flickr!
}
});
}];
[self.uploadOp addObserver:self forKeyPath:@"uploadProgress" options:NSKeyValueObservingOptionNew context:NULL];
有一些单元测试,但您应该运行覆盖API的一些方面的演示项目,这些项目既用了Swift也用了Objective-C。对测试不足表示歉意!
代码许可包含在项目中;基本上是一个带有归属的BSD许可。
您可以在商业、封闭源代码、开源、免费软件或任何其他类型的软件中使用它,前提是您适当地为我提供信用。
FlickrKit代码不提供任何类型的保修。我希望它对您有用(它对我肯定是有用的),但我对其功能或其他方面不作保证。
我不能回答有关如何使用代码的问题,但欢迎使用电子邮件告诉我您正在使用它,或者只是表示感谢。
如果您创建了一个使用此代码的应用程序,我也希望知道。您可以在以下列表中找到我的联系细节。
同样,如果您想提交功能请求或错误报告,请随时与我联系。更好的方法是,您可以从代码中分叉,自行实现功能/修复,然后提交拉取请求。
尽情享受吧!
谢谢,
我: http://www.davidjc.com
我的工作: http://www.devedup.com
推特: http://twitter.com/devedup
雇佣我: http://linkedin.davidjc.com