Forecastr 0.2.3

Forecastr 0.2.3

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布上次发布2015 年 9 月

Rob Phillips 维护。



Forecastr 0.2.3

  • Rob Phillips

通过 Gratipay 支持此项目

一个简单的 Objective-C 包装器,用于向 Forecast.io API 版本 2 发起异步请求

注意:您需要在首次实例化 Forecastr 时请求一个 API 密钥并设置该密钥,否则将抛出异常。

更新以匹配 Forecast.io API(截至 2014 年 10 月 21 日)

快速示例

代码库中包含两个示例

  • 示例应用:一个简单的示例,展示如何使用通过 API 请求获得的所有不同选项
  • 详细示例应用:一个示例应用,使用 CoreLocation 获取用户当前的位置,然后使用该位置发起一个基本的天气预报请求

以下是一个非常基本的示例:

#import "FCViewController.h"
#import "Forecastr.h"

@interface FCViewController ()
{
    Forecastr *forecastr;
}
@end

@implementation FCViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Get a reference to the Forecastr singleton
    forecastr = [Forecastr sharedManager];
    forecastr.apiKey = @""; // You will need to set the API key here (only set it once in the entire app)

    [forecastr getForecastForLatitude:45.5081 longitude:-73.5550 time:nil exclusions:nil extend:nil language:nil success:^(id JSON) {
        NSLog(@"JSON Response was: %@", JSON);
    } failure:^(NSError *error, id response) {
        NSLog(@"Error while retrieving forecast: %@", [forecastr messageForError:error withResponse:response]);
    }];
}

@end

  • 支持
  • 基于请求使用的 URL 对请求进行基本的异步缓存。这样做是为了防止不必要的数据处理和使用 Forecast.io 的往返
  • 指定 USSIUKCA 单位
  • 指定天气描述语言为 bs(波斯尼亚语)、de(德语)、en(英语,默认值)、es(西班牙语)、fr(法语)、it(意大利语)、nl(荷兰语)、pl(波兰语)、pt(葡萄牙语)、tet(达语)或 x-pig-latin(猪拉丁语)
  • 指定 JSONP 回调方法名称(例如 someJavascriptMethodName({jsonResponseGoesHere})
  • 在响应中进行指定排除(例如省略 currentlyminutelyhourlydailyalertsflags
  • 使用 [forecastr cancelAllForecastRequests]; 取消任何现有预报请求
  • 指定 extend 小时选项,以返回未来七天的小时数据,而不是未来两天

自 iOS 7 起支持,因为它需要 AFNetworking 2.0。如果您需要 iOS 5 或 6 的支持(所有版本都有标签),请使用之前的某个版本。

  • 选项

如果您想使用 CLLocation 对象而不是纯纬度和经度,请导入 Forecastr+CLLocation.h 而不是 Forecastr.h

  • 缓存
  • 缓存已默认启用,因此您无需进行任何操作即可使用它
  • 您可以通过设置 forecastr.cacheExpirationInMinutes = 10; 或其他整数值来更改缓存过期时间
  • 如果您想提前刷新缓存中的旧项,可以移除它(请参考基本示例应用)
  • 您可以使用 [forecastr flushCache]; 将缓存中所有项清空(每次应用程序启动时这样做可能是个好主意)

附加功能

包装器包含一些附加功能,请查看它包含的所有源文件,以避免重复之前的工作。例如,为 API 中的所有常量值创建了常量,如数据块/点字典键名、天气图标名称、单位类型等。

此外,还有一些辅助方法被编写来帮助 UI 显示 JSON 数据

  • descriptionForPrecipIntensity 将基于降水强度的浮点值返回一个可读的描述
  • imageNameForWeatherIconType 将根据在预测响应中指定的天气图标类型返回一个图像名
  • messageForError:withResponse: 将尝试根据响应找到最易读的错误描述,如果没有找到,则回到错误的本地化描述

API 错误

只有两种错误响应类型:400 错误(您提供了无效输入,例如不可能的纬度或经度)或 500 错误(在 Forecast.io 服务器上发生意外情况)。这两种情况都会返回一个包含字符串“错误”属性的 JSON 对象,用于确定错误的原因。在其他所有情况下,均返回 HTTP 200,但数据可能缺失(即使是在正常操作的情况下)。因此,在检索和hte之前,您应该始终检查您打算使用的属性是否实际上存在,并在它们缺失的情况下,您可以根据自己的意愿视为错误。

检查字典键是否存在的一个简单方法是

id temperature = [forecast objectForKey:kFCTemperature];
self.temperatureLabel.text = temperature ? [NSString stringWithFormat:@"%d°", [temperature intValue]] : @"N/A";

在这个例子中,我们简单地检查对象是否为 nil,并在是的情况下返回 N/A,否则返回一个格式化的温度值。

许可证

基本上,此代码可以免费用于商业和非商业项目,无需署名。

请参阅 LICENSE 文件以获取更多详细信息。

感谢

非常感谢以下人员帮助我改进和维护 Forecastr

如果您想帮忙,请提交包含测试代码的 pull request,并且也更新可能影响您代码的任何示例。