通过 Gratipay 支持此项目
一个简单的 Objective-C 包装器,用于向 Forecast.io API 版本 2 发起异步请求
注意:您需要在首次实例化 Forecastr 时请求一个 API 密钥并设置该密钥,否则将抛出异常。
更新以匹配 Forecast.io API(截至 2014 年 10 月 21 日)
代码库中包含两个示例
以下是一个非常基本的示例:
#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
US
、SI
、UK
或 CA
单位bs
(波斯尼亚语)、de
(德语)、en
(英语,默认值)、es
(西班牙语)、fr
(法语)、it
(意大利语)、nl
(荷兰语)、pl
(波兰语)、pt
(葡萄牙语)、tet
(达语)或 x-pig-latin
(猪拉丁语)someJavascriptMethodName({jsonResponseGoesHere})
)currently
、minutely
、hourly
、daily
、alerts
或 flags
)[forecastr cancelAllForecastRequests];
取消任何现有预报请求extend
小时选项,以返回未来七天的小时数据,而不是未来两天CLLocation
对象而不是纯纬度和经度,请导入 Forecastr+CLLocation.h
而不是 Forecastr.h
forecastr.cacheExpirationInMinutes = 10;
或其他整数值来更改缓存过期时间[forecastr flushCache];
将缓存中所有项清空(每次应用程序启动时这样做可能是个好主意)包装器包含一些附加功能,请查看它包含的所有源文件,以避免重复之前的工作。例如,为 API 中的所有常量值创建了常量,如数据块/点字典键名、天气图标名称、单位类型等。
此外,还有一些辅助方法被编写来帮助 UI 显示 JSON 数据
descriptionForPrecipIntensity
将基于降水强度的浮点值返回一个可读的描述imageNameForWeatherIconType
将根据在预测响应中指定的天气图标类型返回一个图像名messageForError:withResponse:
将尝试根据响应找到最易读的错误描述,如果没有找到,则回到错误的本地化描述只有两种错误响应类型: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,并且也更新可能影响您代码的任何示例。