使用Objective-C获取每日必应壁纸设置为桌面

来源:互联网 发布:淘宝订单险坑卖家 编辑:程序博客网 时间:2024/06/04 20:00

初学objective-c,发现有c/c++基础入门太容易了,于是写了个设置必应壁纸桌面来练手

////  main.m//  OCTest////  Created by ddc on 16/1/3.//  Copyright © 2016年 ddc. All rights reserved.//@import AppKit;@interface BingImage : NSObject{}@property NSString* api_;+ (id) initWithApiUrl:(NSString*)apiUrl;- (nullable NSString*) getImageUrl:(int)dayIndex dateStr:(NSString**)date;- (bool) downloadImage:(NSString**)filename date:(int)dayIndex;@end@implementation BingImage+ (id) initWithApiUrl:(NSString *)apiUrl {    BingImage* image = [[BingImage alloc] init];    image.api_ = apiUrl;    return image;}- (nullable NSString*) getImageUrl:(int)dayIndex dateStr:(NSString**)dateStr {    NSURL* url = [NSURL URLWithString:self.api_];    NSData* data = [NSData dataWithContentsOfURL:url];    if(data) {        id json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];        if(json) {            id day = [[json objectForKey:@"images"] objectAtIndex:dayIndex];            if(dateStr) {                *dateStr=[day objectForKey:@"enddate"];            }            return [day objectForKey:@"url"];        }    }    return nil;}- (bool) downloadImage:(NSString**)filename date:(int)dayIndex {    NSString* dateStr = nil;    NSURL* url = [NSURL URLWithString:[self getImageUrl:dayIndex dateStr:&dateStr]];    NSData* data = [NSData dataWithContentsOfURL:url];    if(data){        if(filename) {            *filename = [NSString stringWithFormat:@"/tmp/bing_wallpaper_%@.jpg", dateStr];        }        [data writeToFile:*filename atomically:YES];        return YES;    }    return NO;}@endvoid setDesktopImage(NSString* filename){    NSError *err = nil;    NSWorkspace* space = [NSWorkspace sharedWorkspace];    bool ret = [space setDesktopImageURL:[NSURL fileURLWithPath:filename] forScreen:[NSScreen mainScreen] options: nil error: &err];    if(ret) {        NSLog(@"setDesktopImage succeeded");    } else{        NSLog(@"setDesktopImage failed: %@", err);    }}int main(int argc, const char * argv[]) {    @autoreleasepool {        @try {            NSString *filename = nil;            BingImage* bing = [BingImage initWithApiUrl:@"http://www.bing.com/HPImageArchive.aspx?format=js&idx=0&n=8&mkt=en-US"];            if(![bing downloadImage:&filename date:0]) {                @throw [[NSException alloc] initWithName:@"" reason:@"download file error" userInfo: nil];            }            setDesktopImage(filename);        }        @catch (NSException *exception) {            NSLog(@"excepted: %@", exception);            return 1;        }    }    return 0;}


0 0