Package org.encuestame.core.util

Source Code of org.encuestame.core.util.SocialUtils

/*
************************************************************************************
* Copyright (C) 2001-2011 encuestame: system online surveys Copyright (C) 2011
* encuestame Development Team.
* Licensed under the Apache Software License version 2.0
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to  in writing,  software  distributed
* under the License is distributed  on  an  "AS IS"  BASIS,  WITHOUT  WARRANTIES  OR
* CONDITIONS OF ANY KIND, either  express  or  implied.  See  the  License  for  the
* specific language governing permissions and limitations under the License.
************************************************************************************
*/
package org.encuestame.core.util;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;
import javax.validation.Path.Node;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathFactory;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpClientParams;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import javax.xml.xpath.XPath;

import org.encuestame.core.config.EnMePlaceHolderConfigurer;
import org.encuestame.core.filter.RequestSessionMap;
import org.encuestame.persistence.exception.EnMeExpcetion;
import org.encuestame.persistence.exception.EnmeFailOperation;
import org.encuestame.utils.social.SocialProvider;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import org.springframework.util.Assert;
import org.w3c.dom.Document;

/**
* Social Util Helpers.
* @author Picado, Juan juanATencuestame.org
* @since Feb 11, 2011 9:54:24 PM
*/
public class SocialUtils {

    /** Log. **/
    private static Logger log = Logger.getLogger(SocialUtils.class);

    /**
     * TinyUrl rest url.
     */
    public static final String TINY_URL = "http://tinyurl.com/api-create.php";

    /**
     * Google Url short url.
     */
    public static final String GOOGLE_SHORT_URL = "https://www.googleapis.com/urlshortener/v1/url";

    /**
     * Google url stats.
     */
    public static final String GOOGLE_SHORT_URL_STATS = "https://www.googleapis.com/urlshortener/v1/url?shortUrl=$1&projection=FULL";

    /**
     * Bity short url api.
     */
    public static final String BITLY_SHORT_URL = "http://api.bit.ly/shorten";

    /**
     * Facebook scopes.
     */
    public static final String FACEBOOK_SCOPE = "email,read_stream,publish_stream,user_status,user_location,offline_access";

    /**
     * Twitter limit.
     */
    public static final Integer TWITTER_LIMIT = 140;

    /**
     * Twitter authentictation error.
     * TODO: move to {@link SocialUtils}.
     */
    public static final int TWITTER_AUTH_ERROR = 401;

    /**
     * Get Google Stats from google short url.
     * @param googleShortUrl
     * @return
     * @throws IOException
     */
    public static String getGoGlStats(final String googleShortUrl) throws IOException {
        HttpClient httpclient = new HttpClient();
        String completeUrl = StringUtils.replace(SocialUtils.GOOGLE_SHORT_URL_STATS, "$1", googleShortUrl);
        HttpMethod method = new GetMethod(completeUrl);
        httpclient.executeMethod(method);
        String tinyUrl = method.getResponseBodyAsString();
        method.releaseConnection();
        return tinyUrl;
    }

    /**
     * Get Google Short Url.
     * @return
     * @throws EnmeFailOperation
     */
    public static String getGoGl(final String urlPath, String key) {
        log.debug("getGoGl url "+urlPath);
        log.debug("getGoGl key "+key);
        String shortUrl = null;
        URL simpleURL = null;
        HttpsURLConnection url = null;
        BufferedInputStream bStream = null;
        StringBuffer resultString = new StringBuffer("");
        String inputString = "{\"longUrl\":\"" + urlPath + "\"}";
        log.debug("getGoGl inputString "+inputString);
        try {
            simpleURL = new URL(
                    "https://www.googleapis.com/urlshortener/v1/url?key=" + key);
            url = (HttpsURLConnection) simpleURL.openConnection();
            url.setDoOutput(true);
            url.setRequestProperty("content-type", "application/json");
            PrintWriter pw = new PrintWriter(url.getOutputStream());
            pw.print(inputString);
            pw.close();
        } catch (Exception ex) {
            log.error(ex);
            shortUrl = urlPath;
        }
        try {
            bStream = new BufferedInputStream(url.getInputStream());
            int i;
            while ((i = bStream.read()) >= 0) {
                resultString.append((char) i);
            }
          //  final Object jsonObject = JSONValue.parse(resultString.toString());
         //   final JSONObject o = (JSONObject) jsonObject;
         //   shortUrl = (String) o.get("id");
        } catch (Exception ex) {
            SocialUtils.log.error(ex);
            shortUrl = urlPath;
        }
        return shortUrl;
    }
   

    /**
     * Get TinyUrl.
     * @param string
     * @return
     * @throws HttpException
     * @throws IOException
     */
    public static String getYourls(final String string) {
        String yourlsShortUrl = string;
        HttpClientParams params = new HttpClientParams();
        params.setConnectionManagerTimeout(EnMePlaceHolderConfigurer.getIntegerProperty("application.timeout"));
        params.setSoTimeout(EnMePlaceHolderConfigurer.getIntegerProperty("application.timeout"));
        HttpClient httpclient = new HttpClient(params); //TODO: time out??
        HttpMethod method = new GetMethod(EnMePlaceHolderConfigurer.getProperty("short.yourls.path"));
        method.setQueryString(new NameValuePair[] {
            new NameValuePair("url", string),
            new NameValuePair("action", "shorturl"),
            new NameValuePair("format", "json"),
            new NameValuePair("signature", EnMePlaceHolderConfigurer.getProperty("short.yourls.key"))
        });
        try {
            httpclient.executeMethod(method);
            final Object jsonObject = JSONValue.parse(method.getResponseBodyAsString());
            final JSONObject o = (JSONObject) jsonObject;
            //{"message":"Please log in","errorCode":403}"
            String errorCode = (String) o.get("errorCode");
            if (errorCode != null) {
               throw new EnMeExpcetion("Yourls error: " + errorCode);
            }
            yourlsShortUrl = (String) o.get("shorturl");
        } catch (HttpException e) {
            log.error("HttpException "+ e);
            yourlsShortUrl = string;
        } catch (IOException e) {
            log.error("IOException"+ e);
            yourlsShortUrl = string;
        } catch (Exception e) {
      e.printStackTrace();
      log.error("IOException"+ e);
            yourlsShortUrl = string;
    } finally {
            RequestSessionMap.setErrorMessage("short url is not well configured");
            method.releaseConnection();
        }
        return yourlsShortUrl;
    }
   

    /**
     * Get TinyUrl.
     *
     * @param string
     * @return
     * @throws HttpException
     * @throws IOException
     */
    public static String getTinyUrl(String string){
        String tinyUrl = string;
        HttpClientParams params = new HttpClientParams();
        params.setConnectionManagerTimeout(EnMePlaceHolderConfigurer.getIntegerProperty("application.timeout"));
        params.setSoTimeout(EnMePlaceHolderConfigurer.getIntegerProperty("application.timeout"));
        HttpClient httpclient = new HttpClient(params); //TODO: time out??
        //httpclient.setConnectionTimeout(EnMePlaceHolderConfigurer.getIntegerProperty("application.timeout"));
        log.debug("tiny url timeout "+EnMePlaceHolderConfigurer.getIntegerProperty("application.timeout"));
        //httpclient.setParams(params);
        HttpMethod method = new GetMethod(SocialUtils.TINY_URL);
        method.setQueryString(new NameValuePair[] { new NameValuePair("url",
                string) });
        try {
            log.debug("tiny url execute: "+string);
            httpclient.executeMethod(method);
            tinyUrl = method.getResponseBodyAsString();
        } catch (HttpException e) {
            log.error("HttpException "+ e);
            tinyUrl = string;
        } catch (IOException e) {
            log.error("IOException"+ e);
            tinyUrl = string;
        } finally{
            method.releaseConnection();
        }
        return tinyUrl;
    }

    /**
     * Short URL with bitly.com.
     * @param urlPath url
     * @param key bitly key
     * @param login bitly login
     * @return
     * @throws EnmeFailOperation
     */
    public static String getBitLy(final String urlPath, final String key, final String login){
        final HttpClient httpclient = new HttpClient();
        final HttpMethod method = new GetMethod(SocialUtils.BITLY_SHORT_URL);
        method.setQueryString(
                new NameValuePair[]{
                        new NameValuePair("longUrl",urlPath),
                        new NameValuePair("version","2.0.1"),
                        new NameValuePair("login", login),
                        new NameValuePair("apiKey", key),
                        new NameValuePair("format","json"),
                        new NameValuePair("history","1")
                        }
                );
        String responseXml = null;
        try {
            httpclient.executeMethod(method);
            //{"errorCode": 0, "errorMessage": "",
            //"results": {"http://www.encuestame.org": {"userHash": "gmks0X", "shortKeywordUrl": "", "hash": "hMMQuX",
           // "shortCNAMEUrl": "http://bit.ly/gmks0X", "shortUrl": "http://bit.ly/gmks0X"}},
            //"statusCode": "OK"}
            final Object jsonObject = JSONValue.parse(method.getResponseBodyAsString());
            log.debug("getBitLy: "+jsonObject.toString());
            final JSONObject o = (JSONObject) jsonObject;
            final JSONObject results = (JSONObject) o.get("results");
            final JSONObject url = (JSONObject) results.get(urlPath);
             responseXml = (String) url.get("shortUrl");
        } catch (HttpException e1) {
            log.error(e1);
            responseXml = urlPath;
        } catch (IOException e1) {
            log.error(e1);
            responseXml = urlPath;
        } catch (Exception e) {
            log.error(e);
            responseXml = urlPath;
        }
        return responseXml;
    }

    /**
     * Build the original  url to tweet in the social network.
     * @param id id
     * @param username username (only for twitter)
     * @return the url.
     */
    public static String getSocialTweetPublishedUrl(
            final String id,
            final String username,
            final SocialProvider provider) {
        Assert.notNull(id);
        final StringBuilder builder = new StringBuilder();
        if(SocialProvider.TWITTER.equals(provider)){
            String twitterUrl = EnMePlaceHolderConfigurer.getProperty("social.twitter");
            twitterUrl = twitterUrl.replace("{username}", username); //FIXME: possible NULLPOINTEREXCEPTION
            twitterUrl = twitterUrl.replace("{id}", id);
            builder.append(twitterUrl);
        } else if(SocialProvider.FACEBOOK.equals(provider)){
            String facebookUrl = EnMePlaceHolderConfigurer.getProperty("social.facebook");
            String[] array = id.split("_");
            log.debug("Facebook Id array:{"+array.length);
            if (array.length >= 2) {
                facebookUrl = facebookUrl.replace("{B}", array[0]);
                facebookUrl = facebookUrl.replace("{A}", array[1]);
                builder.append(facebookUrl);
            }
        } else if(SocialProvider.PLURK.equals(provider)){
          String tumblrLink = EnMePlaceHolderConfigurer.getProperty("social.plurk");
          tumblrLink = tumblrLink.replace("{0}", username.toString());
          builder.append(tumblrLink);                  
        } else if(SocialProvider.TUMBLR.equals(provider)){
          String tumblrLink = EnMePlaceHolderConfigurer.getProperty("social.tubmlr");
          tumblrLink.replace("{username}", username);
          tumblrLink.replace("{id}", id);
          builder.append(tumblrLink);
        } else if(SocialProvider.LINKEDIN.equals(provider)){
            builder.append(EnMePlaceHolderConfigurer.getProperty("social.linkedin"));
        } else if(SocialProvider.IDENTICA.equals(provider)){
             String identicaUrl = EnMePlaceHolderConfigurer.getProperty("social.identica");
             identicaUrl = identicaUrl.replace("{id}", id);
             builder.append(identicaUrl);
        }
        //log.debug("getSocialTweetPublishedUrl "+builder.toString());
        return builder.toString();
    }

    /**
     * Build a real url profile based on id.
     * @param id social account id.
     * @param provider {@link SocialProvider}.
     * @return
     */
    public static String getSocialAccountProfileUrl(final String id,
            final SocialProvider provider){
        final StringBuilder builder = new StringBuilder();
        if(SocialProvider.TWITTER.equals(provider)){
            String twitterUrl = EnMePlaceHolderConfigurer.getProperty("social.profile.twitter");
            twitterUrl = twitterUrl.replace("{username}", id);
            builder.append(twitterUrl);
        } else if(SocialProvider.FACEBOOK.equals(provider)) {
             String twitterUrl = EnMePlaceHolderConfigurer.getProperty("social.profile.facebook");
             twitterUrl = twitterUrl.replace("{id}", id);
             builder.append(twitterUrl);
        } else if(SocialProvider.IDENTICA.equals(provider)) {
             String identicaUrl = EnMePlaceHolderConfigurer.getProperty("social.profile.identica");
             identicaUrl = identicaUrl.replace("{id}", id);
             builder.append(identicaUrl);
        }
        log.debug("getSocialTweetPublishedUrl "+builder.toString());
        return builder.toString();
    }
}
TOP

Related Classes of org.encuestame.core.util.SocialUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.