2014-09-29 2 views
1

Когда я публикую фотографию к моей стенеПубликация пост с изображением на странице facebook с restFb

FacebookType publish = fc.publish("me/photos", FacebookType.class, 
         BinaryAttachment.with(attachmentName, temporaryStream), 
         Parameter.with("message", "my myssage")); 

пост создается как ожидается. Я вижу сообщение и опубликованное изображение под сообщением.

, но когда я хочу сделать то же самое, но на некоторых страницах стены вместо стены пользователя.

FacebookType publish = fc.publish(pageId + "/photos", FacebookType.class, 
         BinaryAttachment.with(attachmentName, temporaryStream), 
         Parameter.with("message", "my myssage")); 

Публикация публикуется, но я могу видеть только текст. Не картина. Изображение можно увидеть только тогда, когда я нажимаю на дату публикации. Я также могу добраться до этой фотографии, нажав на фотографии в верхней части страницы, а затем на вкладке «Название страницы».

Есть ли способ увидеть фотографию как часть сообщения, когда я размещаю ее на странице?

ответ

3

Я, наконец, нашел решение. Чтобы опубликовать сообщение с фотографией в раздел с обычными «текстовыми» сообщениями, вам нужно опубликовать фотографию на стене (стена пользователя не стену страницы), затем получить ее ссылку и, наконец, создать канал на странице с помощью ссылка на изображение.

вот пример кода:

FacebookType photo = fc.publish(pageid + "/photos" , FacebookType.class, 
      BinaryAttachment.with(photoName, photoInputStream)); 
Link photoLink = fc.fetchObject(photo.getId(), Link.class); 
FacebookType post = fc.publish(pageid + "/feed", FacebookType.class, 
      Parameter.with("message", "your message"),Parameter.with("type", "photo"), 
      Parameter.with("link", photoLink.getLink())); 

редактировать: Я забыл об одном. Когда вы удаляете сообщение позже, вы не удаляете его. Для этого вам нужно сделать это вручную.

3

Ваш ответ работал лакомство и помог мне невыразимое количество, однако я нашел с моим решением, мне не нужно

FacebookType post = fc.publish(pageid + "/feed", FacebookType.class, 
     Parameter.with("message", "your message"),Parameter.with("type", "photo"), 
     Parameter.with("link", photoLink.getLink())); 

, как я бы Получать ошибку (что я должен копироваться, чтобы показать вам), но photoLink.getLink() возвращенный null в моем случае.

поэтому мое обновленное решение в конечном итоге быть

 FacebookType photo = client.publish(groupId + "/photos", 
      FacebookType.class, 
      BinaryAttachment.with(imageName), 
        imageAsBytes, 
        "image/png"), 
      Parameter.with("message", 
        message)); 

Просто мой 2 цента, Еще раз спасибо за вашу помощь!

EDIT

Также во время игры вокруг, я заметил, что в решении я пришел в Я создавал FacebookType photo объект и этот объект не получает использовать в любом месте, ваш просто вызвать метод публикации клиента, что это созданный в вашей программе.

мой конечный класс ниже, (мое приложение принимает изображение от компьютера и создает на стене групп)

public void createImagePostInGroup(String message, String groupId, String imageFilePath){ 

    byte[] imageAsBytes = fetchBytesFromImage(imageFilePath); 

    DefaultFacebookClient client = 
     new DefaultFacebookClient(accessToken, Version.LATEST); 

    client.publish(groupId + "/photos", 
      FacebookType.class, 
      BinaryAttachment.with(imageFilePath.substring(imageFilePath.length()-34), 
        imageAsBytes, 
        "image/png"), 
      Parameter.with("message", 
        message)); 
} 

И мое изображение преобразуется в массив байтов в этом методе

private byte[] fetchBytesFromImage(String imageFile) { 

    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    byte fileContent[] = null; 

    try{ 

     BufferedImage image = ImageIO.read(new File(imageFile)); 

     ImageIO.write(image, "png", baos); 
     baos.flush(); 
     fileContent = baos.toByteArray(); 

    }catch (Exception e){ 
     e.printStackTrace(); 
    } 
    return fileContent; 

} 

Еще раз спасибо за помощь.