All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.sprucehill.facebook.service.FacebookOpenGraphService Maven / Gradle / Ivy

The newest version!
package io.sprucehill.facebook.service;

import io.sprucehill.facebook.data.AbstractOpenGraphObject;
import io.sprucehill.facebook.protocol.data.IdResponse;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author Michael Duergner 
 */
public class FacebookOpenGraphService extends AbstractFacebookGraphService implements IFacebookOpenGraphService {

    @Override
    public String publish(String accessToken, AbstractOpenGraphObject openGraphObject) {
        try {
            HttpPost request = new HttpPost(buildRequestUrl(new String[] {"me",openGraphObject.namespace()+":"+openGraphObject.name()},null));
            List data = new ArrayList();
            data.add(new BasicNameValuePair("access_token",accessToken));
            if (openGraphObject.explicitlyShared()) {
                data.add(new BasicNameValuePair("fb:explicitly_shared","true"));
            }
            if (null != openGraphObject.message()) {
                data.add(new BasicNameValuePair("message",openGraphObject.message()));
            }
            if (null != openGraphObject.ref()) {
                data.add(new BasicNameValuePair("ref",openGraphObject.ref()));
            }
            if (0 < openGraphObject.tags().length) {
                StringBuilder tags = null;
                for (String tag : openGraphObject.tags()) {
                    if (null == tags) {
                        tags = new StringBuilder();
                    }
                    else {
                        tags.append(",");
                    }
                    tags.append(tag);
                }
                data.add(new BasicNameValuePair("tags",tags.toString()));
            }
            if (0 < openGraphObject.images().length) {
                boolean userGenerated = false;
                for (int i=0; i< openGraphObject.images().length; i++) {
                    data.add(new BasicNameValuePair("image["+i+"][url]",openGraphObject.images()[i].url()));
                    data.add(new BasicNameValuePair("image[\"+i+\"][user_generated]",openGraphObject.images()[i].userGenerated() ? "true" : "false"));
                    userGenerated |= openGraphObject.images()[i].userGenerated();
                }
                if (userGenerated) {
                    data.add(new BasicNameValuePair("user_generated","true"));
                }
            }
            for (Map.Entry entry : openGraphObject.getPostParameters().entrySet()) {
                data.add(new BasicNameValuePair(entry.getKey(),entry.getValue()));
            }
            HttpEntity entity = new UrlEncodedFormEntity(data,"UTF-8");
            request.setEntity(entity);

            HttpResponse response = httpClient.execute(request);
            if (200 == response.getStatusLine().getStatusCode()) {
                IdResponse idResponse = objectMapper.readValue(response.getEntity().getContent(),IdResponse.class);
                if (null != idResponse) {
                    return idResponse.getId();
                }
            }
            else {
                logger.warn("Got unexpected response code {} with status line {} for request with url {}", new Object[] {response.getStatusLine().getStatusCode(),response.getStatusLine(),request.getURI().toString()});
                logger.warn(EntityUtils.toString(response.getEntity()));
            }
        }
        catch (Throwable t) {
            logger.error(t.getMessage(),t);
        }
        return null;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy