åæçåå¤å·¥ä½ï¼
ä¸ãç³è¯·APIï¼æ¿å¥½appidåprivate_keyï¼
äºã解读ãSmartWeatherAPI<Lite> WebAPIçæ¥å£ä½¿ç¨è¯´æ书ã
ä¸ãåå¤å¥½areaidãtypeãdateãappidãurlencode($key)ï¼æ³¨æï¼è¿éç»å å¯çkeyæ¯éè¦encodeurlä¹åçæè½æ为æ¥å£é¾æ¥çä¸é¨åï¼
好äºä¸é¢çç¼ç å¼å§ï¼
1ãä»é件ä¸çareaid_listä¸æ¾å°ä½ æ³è¦çå°æ¹çareaid,并ä¸éæ©è¦æ¥è¯¢å¤©æ°çç±»å
NSString *areaid = @"101010100";
NSString *type =
@"index_f";
/**
* å®æ¹ææ¡£æ´æ°çæ°æ®ç±»åå·
* ææ°:index_f(åºç¡æ¥å£)ï¼index_v(常è§æ¥å£)
3天é¢æ¥:forecast_f(åºç¡æ¥å£)ï¼forecast_v(常è§æ¥å£)
*
*/
2ãè·å¾å½å天æ°date
NSDate
*_date = [NSDate date];
NSDateFormatter *dateFormatter =
[[NSDateFormatter alloc] init];
[dateFormatter
setDateFormat:@"yyyyMMddHHmmss"];//注ææ¥æçæ ¼å¼
NSString *date =
[[dateFormatter stringFromDate:_date]
substringToIndex:12];//ç¨å°ç精确å°åï¼24å°æ¶å¶60åéå¶
3ãç³è¯·çappidï¼åprivate_key
NSString *appid =
@"15ds45s13a465s";//è¿éæ¯æ¥¼ä¸»é便è¾å
¥çï¼çç¼ç
NSString *private_key =
@"46s4ds_SmartWeatherAPI_45s44d6";//ä¹æ¯çç¼ç
4ãç®åºç»è¿urlencodeåçkeyï¼è¿æ¥æ¯è¾éè¦ï¼æ¥éª¤ä¹å¤ï¼è¯·èå¿çå®ã
å¨åæ¥ççåºç¡ä¸æ¯å¨PHPçç¯å¢ä¸ç®åºçï¼ä»£ç å¦ä¸ï¼å¯å¨â
http://writecodeonline.com/php/ âä¸è¿è¡ç®æ³çæ£éª
echo
urlencode(base64_encode(hash_hmac('sha1', "
http://open.weather.com.cn/data/?areaid=101010100&type=index_f&date=201409041509&appid=15ds45s13a465s",
"46s4ds_SmartWeatherAPI_45s44d6",
TRUE)));
é¦å
å®ä¹å¾å°public_keyåAPIçæ¹æ³ï¼è¿æå°±æ¯å¯¹keyè¿è¡encodeurlæä½çæ¹æ³
注æï¼è¿éçæ¹æ³é½æ¯è¢«æå®ä¹å¨getTimeçç±»éé¢ï¼åé¢æ¯å¨mainä¸å®ä¾ååºæ¥ç
//è·å¾publicky
- (NSString*)
getPublicKey:(NSString*)areaid :(NSString*)type :(NSString*)date
:(NSString*)appid {
NSString *Key = [[NSString alloc]
initWithFormat:@"
http://open.weather.com.cn/data/?areaid=%@&type=%@&date=%@&appid=%@",
areaid, type, [date substringToIndex:12], appid];
return
Key;
}
//è·å¾å®æ´çAPI
- (NSString*) getAPI:(NSString*)areaid
:(NSString*)type :(NSString*)date :(NSString*)appid :(NSString*)key
{
NSString *API = [[NSString alloc]
initWithFormat:@"
http://open.weather.com.cn/data/?areaid=%@&type=%@&date=%@&appid=%@&key=%@",
areaid, type, [date substringToIndex:12], [appid substringToIndex:6],
key];
//-------------è¿ééè¦ä¸»è¦çæ¯åªéè¦appidçå6ä½ï¼ï¼ï¼
return
API;
}
//å°è·å¾çkeyè¿æ§urlencodeæä½
- (NSString
*)stringByEncodingURLFormat:(NSString*)_key{
NSString *encodedString
= (__bridge NSString
*)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)_key,
nil, (CFStringRef) @"!$&'()*+,-./:;=?@_~%#[]",
kCFStringEncodingUTF8);
//ç±äºARCçåå¨ï¼è¿éç转æ¢éè¦æ·»å __bridgeï¼åå æä¸æãæ±å¤§ç¥è®²è§£
return
encodedString;
}
éç¹æ¥äºï¼å¨ocä¸çç®æ³å¦ä¸ï¼è®°å¾æé件çBase64.h
å è¿æ¥å¹¶å¼ç¨å°å·¥ç¨éé¢
//对publickeyåprivatekeyè¿è¡å å¯
- (NSString *)
hmacSha1:(NSString*)public_key :(NSString*)private_key{
NSData*
secretData = [private_key
dataUsingEncoding:NSUTF8StringEncoding];
NSData* stringData = [public_key
dataUsingEncoding:NSUTF8StringEncoding];
const void* keyBytes =
[secretData bytes];
const void* dataBytes = [stringData
bytes];
///#define CC_SHA1_DIGEST_LENGTH 20 /* digest
length in bytes */
void* outs =
malloc(CC_SHA1_DIGEST_LENGTH);
CCHmac(kCCHmacAlgSHA1, keyBytes,
[secretData length], dataBytes, [stringData length], outs);
//
Soluion 1
NSData* signatureData = [NSData dataWithBytesNoCopy:outs
length:CC_SHA1_DIGEST_LENGTH freeWhenDone:YES];
return
[signatureData
base64EncodedString];
}
è¿éåªæ¯åæ¥ç®åºæ¥çkeyï¼è¿æªencodeurlï¼é¾æ¥ä¸è½è¢«æµè§å¨è¯å«ï¼æ以ç°å¨ç»è¿ç®æ³å¾å°ç_keyè¿æä¸æ¥æä½æè½çå°çæ£çkeyã
NSString *_key = [getTime hmacSha1:[getTime
getPublicKey:areaid :type :date :appid] :private_key];
NSString *key =
[getTime
stringByEncodingURLFormat:_key];
æåä¸æ¥äºå§ï¼æ¼æ¥API
NSString *weatherAPI = [getTime getAPI:areaid :type :date
:appid
:key];
//OKï¼æ们çAPIå°±å¯ä»¥ç¨å¦ã
æåï¼éè¿APIè¿åçå¼æ¯JSONæ件ï¼éè¿è§£æï¼å°±è½å¾å°æ们æ³è¦çæ°æ®äºï¼ä¸é¢æ¿ä¸ä¸ªå¼åçæ¥å£ä¸¾ä¾
NSDictionary *weatherDic = [getTime
getWeatherDic:@"
http://www.weather.com.cn/data/cityinfo/101010100.html"];
// weatherDicåå
¸ä¸åæ¾çæ°æ®ä¹æ¯åå
¸åï¼ä»å®éé¢éè¿é®å¼åå¼
NSDictionary
*weatherInfo = [weatherDic
objectForKey:@"weatherinfo"];
NSLog(@"ä»å¤©æ¯ %@ %@ %@ ç天æ°ç¶åµæ¯:%@ %@ -
%@",[newDateOne substringWithRange:NSMakeRange(0, 4)],[newDateOne
substringWithRange:NSMakeRange(4, 2)] ,[newDateOne
substringWithRange:NSMakeRange(6, 2)],[weatherInfo
objectForKey:@"weather"],[weatherInfo objectForKey:@"temp1"],[weatherInfo
objectForKey:@"temp2"]);
è¾åºï¼2014-09-04 23:40:23.243
WeatherAPP[5688:201108] ä»å¤©æ¯ 2014-09-04 ç天æ°ç¶åµæ¯:æ´ 17â - 30â
weatherInfoåå
¸éé¢çå
容æ¯--->{"weatherinfo":{"city":"å京","cityid":"101010100","temp1":"17â","temp2":"30â","weather":"æ´","img1":"n0.gif","img2":"d0.gif","ptime":"18:00"}}