private func fetchImageFromUnsplash() {
guard !unsplashApiKey.isEmpty, let url = URL(string: "https://api.unsplash.com/photos/random?client_id=\(unsplashApiKey)") else {
print("Error: Unsplash API Key is missing or invalid URL.")
fetchRandomLocalImage()
return
}
URLSession.shared.dataTask(with: url) { data, response, error in
defer { isLoading = false }
if let error = error {
print("Error fetching image: \(error.localizedDescription)")
DispatchQueue.main.async {
self.fetchRandomLocalImage()
}
return
}
guard let data = data else {
print("Error: No data received.")
DispatchQueue.main.async {
self.fetchRandomLocalImage()
}
return
}
do {
if let json = try JSONSerialization.jsonObject(with: data) as? [String: Any],
let urls = json["urls"] as? [String: String],
let imageUrlString = urls["regular"],
let imageUrl = URL(string: imageUrlString),
let user = json["user"] as? [String: Any],
let authorName = user["name"] as? String,
let profileImageUrls = user["profile_image"] as? [String: String],
let profileImageUrlString = profileImageUrls["small"],
let profileImageUrl = URL(string: profileImageUrlString),
let description = json["description"] as? String {
self.imageTitle = description
self.authorName = authorName
self.isUnsplashImage = true // Unsplash 이미지임을 설정
DispatchQueue.main.async {
self.downloadImage(from: imageUrl)
self.downloadAuthorProfileImage(from: profileImageUrl)
}
} else {
print("Error: Could not parse JSON.")
DispatchQueue.main.async {
self.fetchRandomLocalImage()
}
}
} catch {
print("Error parsing JSON: \(error.localizedDescription)")
DispatchQueue.main.async {
self.fetchRandomLocalImage()
}
}
}.resume()
}
private func downloadImage(from url: URL) {
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data, let nsImage = NSImage(data: data) else {
if let error = error {
print("Error downloading image: \(error.localizedDescription)")
} else {
print("Error: Unable to create image from data.")
}
DispatchQueue.main.async {
self.fetchRandomLocalImage()
}
return
}
DispatchQueue.main.async {
self.image = nsImage
self.fetchRandomQuote() // 이미지가 로드된 후에 명언을 가져옴
}
}.resume()
}
private func downloadAuthorProfileImage(from url: URL) {
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data, let nsImage = NSImage(data: data) else {
print("Error downloading author profile image: \(error?.localizedDescription ?? "Unknown error")")
return
}
DispatchQueue.main.async {
self.authorProfileImage = nsImage
}
}.resume()
}