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

本文介绍了作者作为Objective-C初学者,利用自身C/C++基础,编写了一个小项目,该项目能够获取必应每日壁纸并将其设置为桌面背景,以此提升编程技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初学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;
}

@end

void 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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值