.
This commit is contained in:
@@ -7,9 +7,7 @@ import kz.konturai.parser.exception.FacebookTokenExpiredException;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.core.io.buffer.DataBuffer;
|
import org.springframework.core.io.ByteArrayResource;
|
||||||
import org.springframework.core.io.buffer.DataBufferFactory;
|
|
||||||
import org.springframework.core.io.buffer.DefaultDataBufferFactory;
|
|
||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
|
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@@ -203,14 +201,20 @@ public class FacebookPostingService {
|
|||||||
throws JsonProcessingException {
|
throws JsonProcessingException {
|
||||||
try {
|
try {
|
||||||
// Создаем multipart form data для загрузки изображения
|
// Создаем multipart form data для загрузки изображения
|
||||||
DataBufferFactory bufferFactory = new DefaultDataBufferFactory();
|
ByteArrayResource imageResource = new ByteArrayResource(imageData) {
|
||||||
DataBuffer imageBuffer = bufferFactory.wrap(imageData);
|
@Override
|
||||||
|
public String getFilename() {
|
||||||
|
return "image.jpg";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
|
MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();
|
||||||
formData.add("message", message);
|
formData.add("message", message);
|
||||||
formData.add("source", imageBuffer);
|
formData.add("source", imageResource);
|
||||||
|
|
||||||
String response = webClient.post()
|
String response;
|
||||||
|
try {
|
||||||
|
response = webClient.post()
|
||||||
.uri(uriBuilder -> uriBuilder
|
.uri(uriBuilder -> uriBuilder
|
||||||
.path("/{pageId}/photos")
|
.path("/{pageId}/photos")
|
||||||
.queryParam("access_token", accessToken)
|
.queryParam("access_token", accessToken)
|
||||||
@@ -220,18 +224,27 @@ public class FacebookPostingService {
|
|||||||
.retrieve()
|
.retrieve()
|
||||||
.bodyToMono(String.class)
|
.bodyToMono(String.class)
|
||||||
.block(Duration.ofMillis(timeoutMs * 2)); // Увеличиваем таймаут для загрузки изображения
|
.block(Duration.ofMillis(timeoutMs * 2)); // Увеличиваем таймаут для загрузки изображения
|
||||||
|
} catch (WebClientResponseException e) {
|
||||||
|
String responseBody = e.getResponseBodyAsString();
|
||||||
|
logger.error("Facebook API error during image upload: Status {} - Response body: {}",
|
||||||
|
e.getStatusCode(), responseBody != null ? responseBody : "No response body");
|
||||||
|
if (isTokenExpiredError(e)) {
|
||||||
|
throw parseFacebookError(e);
|
||||||
|
}
|
||||||
|
throw new RuntimeException("Failed to publish post with image: " + e.getMessage(), e);
|
||||||
|
}
|
||||||
|
|
||||||
JsonNode jsonNode = objectMapper.readTree(response);
|
JsonNode jsonNode = objectMapper.readTree(response);
|
||||||
String photoId = jsonNode.get("id").asText();
|
String photoId = jsonNode.get("id").asText();
|
||||||
|
|
||||||
// Возвращаем ID фото, который также является ID поста
|
// Возвращаем ID фото, который также является ID поста
|
||||||
return photoId;
|
return photoId;
|
||||||
} catch (WebClientResponseException e) {
|
} catch (JsonProcessingException e) {
|
||||||
if (isTokenExpiredError(e)) {
|
logger.error("Failed to parse Facebook response", e);
|
||||||
throw parseFacebookError(e);
|
throw e;
|
||||||
}
|
} catch (Exception e) {
|
||||||
logger.error("Facebook API error: {} - {}", e.getStatusCode(), e.getResponseBodyAsString());
|
logger.error("Unexpected error publishing post with image", e);
|
||||||
throw new RuntimeException("Failed to publish post with image: " + e.getMessage(), e);
|
throw new RuntimeException("Failed to publish post with image", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user