/*
* Copyright 2012 Javier Pérez Pacheco and Francisco Díaz Rodriguez
* TweetTopics 2.0
* javielinux@gmail.com
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* 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 com.javielinux.utils;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
import com.javielinux.infos.InfoLink;
import com.javielinux.tweettopics2.R;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.htmlcleaner.CleanerProperties;
import org.htmlcleaner.HtmlCleaner;
import org.htmlcleaner.TagNode;
import org.htmlcleaner.XPatherException;
import org.json.JSONException;
import org.json.JSONObject;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class LinksUtils {
static public ArrayList<String> pullLinksHTTP(String text) {
return pullLinksHTTP(text, null);
}
static public ArrayList<String> pullLinksHTTP(String text, ArrayList<Utils.URLContent> urls) {
ArrayList<String> links = new ArrayList<String>();
// enlaces
String regex = "\\(?\\b(http://|https://|www[.])[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(text);
while(m.find()) {
String urlStr = m.group();
if (urlStr.startsWith("(") && urlStr.endsWith(")")) {
urlStr = urlStr.substring(1, urlStr.length() - 1);
}
if (urls==null) {
links.add(urlStr);
} else {
Utils.URLContent u = Utils.searchContent(urls, urlStr);
if (u!=null) {
links.add(u.expanded);
} else {
links.add(urlStr);
}
}
}
return links;
}
static public ArrayList<String> pullLinksUsers(String text) {
ArrayList<String> links = new ArrayList<String>();
// usuarios twitter
String regex = "(@[\\w-]+)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(text);
while(m.find()) {
String urlStr = m.group();
if (urlStr.startsWith("(") && urlStr.endsWith(")")) {
urlStr = urlStr.substring(1, urlStr.length() - 1);
}
links.add(urlStr);
}
return links;
}
static public ArrayList<String> pullLinksHashTags(String text) {
ArrayList<String> links = new ArrayList<String>();
// hashtags
String regex = "(#[\\w-]+)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(text);
while(m.find()) {
String urlStr = m.group();
if (urlStr.startsWith("(") && urlStr.endsWith(")")) {
urlStr = urlStr.substring(1, urlStr.length() - 1);
}
links.add(urlStr);
}
return links;
}
static public ArrayList<String> pullLinks(String text) {
return pullLinks(text, null);
}
static public ArrayList<String> pullLinks(String text, ArrayList<Utils.URLContent> urls) {
ArrayList<String> links = pullLinksHTTP(text, urls);//= new ArrayList<String>();
// enlaces
/*
String regex = "\\(?\\b(http://|https://|www[.])[-A-Za-z0-9+&@#/%?=~_()|!:,.;]*[-A-Za-z0-9+&@#/%=~_()|]";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(text);
while(m.find()) {
String urlStr = m.group();
if (urlStr.startsWith("(") && urlStr.endsWith(")")) {
urlStr = urlStr.substring(1, urlStr.length() - 1);
}
links.add(urlStr);
}
*/
// hashtag
String regex = "(#[\\w-]+)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(text);
while(m.find()) {
String urlStr = m.group();
if (urlStr.startsWith("(") && urlStr.endsWith(")")) {
urlStr = urlStr.substring(1, urlStr.length() - 1);
}
links.add(urlStr);
}
// usuarios twitter
regex = "(@[\\w-]+)";
p = Pattern.compile(regex);
m = p.matcher(text);
while(m.find()) {
String urlStr = m.group();
if (urlStr.startsWith("(") && urlStr.endsWith(")")) {
urlStr = urlStr.substring(1, urlStr.length() - 1);
}
links.add(urlStr);
}
return links;
}
static public CharSequence[] splitLinks(String text) {
ArrayList<String> links = pullLinks(text);
CharSequence[] out = new CharSequence[links.size()];
for (int i=0; i<links.size(); i++) {
out[i] = links.get(i);
}
return out;
}
static public String shortURL(Context context, String link) {
link = largeLink(link);
PreferenceManager.setDefaultValues(context, R.xml.preferences, false);
SharedPreferences preference = PreferenceManager.getDefaultSharedPreferences(context);
int s = (Integer.parseInt(preference.getString("prf_service_shorter", "1")));
if ( s == 1 ) { // bit.ly
String user = "tweettopics";
String key = "R_ba0652e93e7c9c527c016447d2e29091";
if (!PreferenceUtils.getUsernameBitly(context).equals("") && !PreferenceUtils.getKeyBitly(context).equals("")) {
user = PreferenceUtils.getUsernameBitly(context);
key = PreferenceUtils.getKeyBitly(context);
}
String url = "http://api.bit.ly/v3/shorten?login="+user+"&apiKey="+key+"&format=json&longUrl=" + URLEncoder.encode(link);
HttpGet request = new HttpGet(url);
HttpClient client = new DefaultHttpClient();
HttpResponse httpResponse;
try {
httpResponse = client.execute(request);
String xml = EntityUtils.toString(httpResponse.getEntity());
JSONObject jsonObject = new JSONObject(xml);
if (jsonObject.getString("status_txt").equals("OK")) {
return jsonObject.getJSONObject("data").getString("url");
}
} catch (Exception e) {
e.printStackTrace();
}
} else { // karmacracy
// http://kcy.me/api/?u=javielinux&key=nyk1tjr20x&format=json&url=http://www.javielinux.com
String user = PreferenceUtils.getUsernameKarmacracy(context);
String key = PreferenceUtils.getKeyKarmacracy(context);
String url = "http://kcy.me/api/?u="+user+"&key="+key+"&format=json&url=" + URLEncoder.encode(link);
HttpGet request = new HttpGet(url);
HttpClient client = new DefaultHttpClient();
HttpResponse httpResponse;
try {
httpResponse = client.execute(request);
String xml = EntityUtils.toString(httpResponse.getEntity());
JSONObject jsonObject = new JSONObject(xml);
if (jsonObject.getString("status_txt").equals("OK")) {
return jsonObject.getJSONObject("data").getString("url");
}
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
static public String shortLinks(Context context, String text, ArrayList<String> noImages) {
ArrayList<String> links = pullLinksHTTP(text);
String out = text;
for (int i=0; i<links.size(); i++) {
if ( (!links.get(i).contains("bit.ly")) && (!links.get(i).contains("goo.gl"))
&& (!links.get(i).contains("twitpic.com")) && (!links.get(i).contains("yfrog.com"))
&& (!links.get(i).contains("lockerz.com")) && (!links.get(i).contains("kcy.me"))
&& (!links.get(i).contains("t.co")) && (!links.get(i).contains("tinyurl")) ) {
String link = links.get(i);
String newUrl = shortURL(context, links.get(i));
if (newUrl!=null) {
if (!newUrl.equals("")) out = out.replace(link, newUrl);
}
}
}
return out;
}
static public String largeLink(String link) {
/*
if ( (link.contains("bit.ly")) || (link.contains("short.ie")) || (link.contains("tinyurl.com"))
|| (link.contains("ow.ly")) || (link.contains("ff.im")) || (link.contains("post.ly"))
|| (link.contains("j.mp")) || (link.contains("t.co")) ) {
String url = "http://www.longurlplease.com/api/v1.1?q=" + link;
HttpGet request = new HttpGet(url);
HttpClient client = new DefaultHttpClient();
HttpResponse httpResponse;
try {
httpResponse = client.execute(request);
String xml = EntityUtils.toString(httpResponse.getEntity());
JSONObject jsonObject = new JSONObject(xml);
String t = jsonObject.getString(link);
if ( (t!=null) && t!="") link = t;
} catch (Exception e) {
e.printStackTrace();
}
}*/
boolean done = false;
if (link.contains("goo.gl")) {
try {
String url = "https://www.googleapis.com/urlshortener/v1/url?shortUrl=" + link;
HttpGet request = new HttpGet(url);
HttpClient client = new DefaultHttpClient();
HttpResponse httpResponse;
httpResponse = client.execute(request);
String xml = EntityUtils.toString(httpResponse.getEntity());
JSONObject jsonObject = new JSONObject(xml);
String t = jsonObject.getString("longUrl");
if ( (t!=null) && t!="") {
link = t;
done = true;
}
} catch (OutOfMemoryError e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
if (link.contains("kcy.me")) {
//http://karmacracy.com/api/v1/kcy/2e10?appkey=tweet!t0pic
try {
String id = link.substring(link.lastIndexOf("/")+1);
String url = "http://karmacracy.com/api/v1/kcy/"+id+"?appkey=tweet!t0pic";
HttpGet request = new HttpGet(url);
HttpClient client = new DefaultHttpClient();
HttpResponse httpResponse;
httpResponse = client.execute(request);
String xml = EntityUtils.toString(httpResponse.getEntity());
JSONObject jsonObject = new JSONObject(xml);
String t = jsonObject.getJSONObject("data").getJSONObject("kcy").getString("url");
//Log.d(Utils.TAG, "URL: " +t);
if ( (t!=null) && t!="") {
link = t;
done = true;
}
} catch (OutOfMemoryError e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
if (!done) {
try {
String url = "http://www.longurlplease.com/api/v1.1?q=" + link;
HttpGet request = new HttpGet(url);
HttpClient client = new DefaultHttpClient();
HttpResponse httpResponse;
httpResponse = client.execute(request);
String xml = EntityUtils.toString(httpResponse.getEntity());
JSONObject jsonObject = new JSONObject(xml);
String t = jsonObject.getString(link);
if ( (t!=null) && t!="" && !t.equals("null")) link = t;
} catch (OutOfMemoryError e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
return link;
}
static public boolean hasLinksTweet(String text) {
ArrayList<String> links = pullLinks(text);
for (int i=0; i<links.size(); i++) {
String link = links.get(i);
if ( (!link.startsWith("#")) && (!link.startsWith("@")) ) {
return true;
}
}
return false;
}
static public boolean isLinkImage(String link) {
// mytubo.net
if (link.contains("mytubo.net")) {
return true;
}
// imgur.com
if (link.contains("imgur.com")) {
return true;
}
// instagr.am
if (link.contains("instagr.am")) {
return true;
}
// lightbox
if (link.contains("lightbox")) {
return true;
}
// vvcap
if (link.contains("vvcap")) {
return true;
}
// twitpic
if (link.contains("twitpic")) {
return true;
}
// picplz.com
if (link.contains("picplz")) {
return true;
}
// plixi
if (link.contains("plixi")) {
return true;
}
// yfrog
if (link.contains("yfrog")) {
return true;
}
// vimeo
if (link.contains("vimeo")) {
return true;
}
// twitgoo
if (link.contains("twitgoo")) {
return true;
}
// twitvid
if (link.contains("twitvid")) {
return true;
}
// youtube
if (link.contains("youtube")) {
return true;
}
if (link.contains("youtu.be")) {
return true;
}
return false;
}
static public boolean isLinkVideo(String link) {
// vimeo
if (link.contains("vimeo")) {
return true;
}
// youtube
if (link.contains("youtube")) {
return true;
}
if (link.contains("youtu.be")) {
return true;
}
return false;
}
static public boolean hasImagesTweet(String text) {
ArrayList<String> links = pullLinks(text);
for (int i=0; i<links.size(); i++) {
String link = links.get(i);
if ( (!link.startsWith("#")) && (!link.startsWith("@")) ) {
if (isLinkImage(link)) return true;
}
}
return false;
}
static public InfoLink getInfoTweet(String link) {
String originalLink = link;
// acortadores
link = largeLink(link);
// si es un url media
if (CacheData.getInstance().existURLMedia(link)) {
Utils.URLContent content = CacheData.getInstance().getURLMedia(link);
InfoLink il = new InfoLink();
il.setService("Twitter Pic");
il.setExtensiveInfo(true);
il.setType(0);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setLinkImageThumb(content.linkMediaThumb);
il.setLinkImageLarge(content.linkMediaLarge);
return il;
}
// es una busqueda
if (link.startsWith(Utils.URL_QR)) {
InfoLink il = new InfoLink();
il.setService("tweettopics-qr");
il.setType(Utils.TYPE_LINK_TWEETOPICS_QR);
il.setLink(link);
il.setOriginalLink(originalLink);
return il;
}
// es un tema
if (link.startsWith(Utils.URL_SHARE_THEME_QR)) {
InfoLink il = new InfoLink();
il.setService("tweettopics-theme");
il.setType(Utils.TYPE_LINK_TWEETOPICS_THEME);
il.setLink(link);
il.setOriginalLink(originalLink);
return il;
}
if ( (link.endsWith(".jpg")) || (link.endsWith(".png")) || (link.endsWith(".gif")) || (link.endsWith(".bmp")) ) {
InfoLink il = new InfoLink();
il.setExtensiveInfo(true);
il.setService("Web");
il.setType(0);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setLinkImageThumb(link);
il.setLinkImageLarge(link);
return il;
}
if (link.contains("imgur.com")) {
String id = link.substring(link.lastIndexOf("/")+1);
String imgThumb = "http://i.imgur.com/"+id+"b.jpg";
String imgLarge = "http://i.imgur.com/"+id+".jpg";
InfoLink il = new InfoLink();
il.setService("Imgur");
il.setExtensiveInfo(true);
il.setType(0);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setLinkImageThumb(imgThumb);
il.setLinkImageLarge(imgLarge);
return il;
}
// lightbox
if (link.contains("lightbox")) {
String id = link.substring(link.lastIndexOf("/")+1);
InfoLink il = new InfoLink();
il.setService("Lightbox");
il.setExtensiveInfo(true);
il.setType(0);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setLinkImageThumb("http://lightbox.com/show/thumb/"+id);
il.setLinkImageLarge("http://lightbox.com/show/large/"+id);
return il;
}
// twitpic
if (link.contains("twitpic")) {
String id = link.substring(link.lastIndexOf("/")+1);
InfoLink il = new InfoLink();
il.setService("Twitpic");
il.setExtensiveInfo(true);
il.setType(0);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setLinkImageThumb("http://twitpic.com/show/mini/"+id);
il.setLinkImageLarge("http://twitpic.com/show/large/"+id);
return il;
}
// picplz
if (link.contains("picplz")) {
String id = link.substring(link.lastIndexOf("/")+1);
InfoLink il = new InfoLink();
il.setService("Picplz");
il.setExtensiveInfo(true);
il.setType(0);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setLinkImageThumb("http://picplz.com/"+id+"/thumb/200");
il.setLinkImageLarge("http://picplz.com/"+id+"/thumb/400");
return il;
}
// img.ly
if (link.contains("img.ly")) {
String id = link.substring(link.lastIndexOf("/")+1);
InfoLink il = new InfoLink();
il.setService("Img.ly");
il.setExtensiveInfo(true);
il.setType(0);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setLinkImageThumb("http://img.ly/show/thumb/"+id);
il.setLinkImageLarge("http://img.ly/show/medium/"+id);
return il;
}
// vvcap
if (link.contains("vvcap")) {
String image = link.replace(".htp", ".png");
InfoLink il = new InfoLink();
il.setExtensiveInfo(true);
il.setService("Vvcap.net");
il.setType(0);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setLinkImageThumb(image);
il.setLinkImageLarge(image);
return il;
}
// yfrog
if (link.contains("yfrog")) {
InfoLink il = new InfoLink();
il.setService("Yfrog");
il.setExtensiveInfo(true);
il.setType(0);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setLinkImageThumb(link+".th.jpg");
il.setLinkImageLarge(link+":android");
Log.d(Utils.TAG, "yfrog (\"+link+\"): " + link+".th.jpg" + " -- " +link+":android");
return il;
}
// twitvid
if (link.contains("twitvid")) {
String id = link.substring(link.lastIndexOf("/")+1);
InfoLink il = new InfoLink();
il.setService("twitvid");
il.setExtensiveInfo(true);
il.setType(1);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setTitle("Twitvid");
il.setDurationVideo(0);
il.setLinkImageThumb("http://images2.twitvid.com/"+id+".jpg");
il.setLinkImageLarge("http://images2.twitvid.com/"+id+".jpg");
return il;
}
/*
if (link.contains("flic.kr")) {
String idbase58 = link.substring(link.lastIndexOf("/")+1);
String id = String.valueOf(alphaToNumber(idbase58));
String urlApi = "http://api.flickr.com/services/rest/?method=flickr.photos.getInfo&api_key=6ce2af123df7dd2a7dab086f086e9824&photo_id="+id+"&format=json&nojsoncallback=1";
Log.d(Utils.TAG, "urlApi: (" + link + ") " + urlApi);
String farmId="";
String serverId="";
String secret="";
HttpGet request = new HttpGet(urlApi);
HttpClient client = new DefaultHttpClient();
HttpResponse httpResponse;
try {
httpResponse = client.execute(request);
String xml = EntityUtils.toString(httpResponse.getEntity());
JSONObject jsonObject = new JSONObject(xml);
if (jsonObject!=null) {
if (jsonObject.getJSONObject("photo")!=null) {
farmId = jsonObject.getJSONObject("photo").getString("farm");
serverId = jsonObject.getJSONObject("photo").getString("server");
secret = jsonObject.getJSONObject("photo").getString("secret");
}
}
} catch (Exception e) {
e.printStackTrace();
}
if (farmId!="") {
String imgThumb = "http://farm"+farmId+".static.flickr.com/"+serverId+"/"+id+"_"+secret+"_s.jpg";
String imgLarge = "http://farm"+farmId+".static.flickr.com/"+serverId+"/"+id+"_"+secret+".jpg";
Bitmap bmp = getBitmap(imgThumb, HEIGHT_THUMB);
if (bmp!=null) {
InfoLink il = new InfoLink();
il.setBitmapThumb(bmp);
il.setService("Flickr");
il.setType(0);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setLinkImageThumb(imgThumb);
il.setLinkImageLarge(imgLarge);
return il;
}
}
}
*/
if (link.contains("mytubo.net")) {
String image = "";
try {
HtmlCleaner cleaner = new HtmlCleaner();
CleanerProperties props = cleaner.getProperties();
props.setAllowHtmlInsideAttributes(true);
props.setAllowMultiWordAttributes(true);
props.setRecognizeUnicodeChars(true);
props.setOmitComments(true);
URL url = new URL(link);
URLConnection conn;
conn = url.openConnection();
InputStreamReader isr = new InputStreamReader(conn.getInputStream());
TagNode node = cleaner.clean(isr);
Object[] objMeta = node.evaluateXPath("//img[@id='originPic']");
if (objMeta.length > 0) {
TagNode info_node = (TagNode) objMeta[0];
image = URLDecoder.decode(info_node.getAttributeByName("src").toString().trim());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XPatherException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
InfoLink il = new InfoLink();
il.setExtensiveInfo(true);
il.setService("Mytubo.net");
il.setType(0);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setLinkImageThumb(image);
il.setLinkImageLarge(image);
return il;
}
// instagr.am
if (link.contains("instagr.am")) {
String image = "";
try {
HtmlCleaner cleaner = new HtmlCleaner();
CleanerProperties props = cleaner.getProperties();
props.setAllowHtmlInsideAttributes(true);
props.setAllowMultiWordAttributes(true);
props.setRecognizeUnicodeChars(true);
props.setOmitComments(true);
props.setUseEmptyElementTags(true);
/*
URL url = new URL(link);
URLConnection conn;
conn = url.openConnection();
InputStreamReader isr = new InputStreamReader(conn.getInputStream()); */
TagNode node = cleaner.clean(getURIContent(link));
Object[] objMeta = node.evaluateXPath("//img[@class='photo']");
if (objMeta.length > 0) {
TagNode info_node = (TagNode) objMeta[0];
image = URLDecoder.decode(info_node.getAttributeByName("src").toString().trim());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XPatherException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
InfoLink il = new InfoLink();
il.setExtensiveInfo(true);
il.setService("Instagr.am");
il.setType(0);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setLinkImageThumb(image);
il.setLinkImageLarge(image);
Log.d(Utils.TAG, "Instagr.am ("+link+"): " + image);
return il;
}
// plixi o lockerz
if (link.contains("plixi") || link.contains("lockerz")) {
String strURL = "http://api.plixi.com/api/tpapi.svc/metadatafromurl?url=" + link;
try {
Document doc = null;
try {
URL url;
URLConnection urlConn = null;
url = new URL(strURL);
urlConn = url.openConnection();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(urlConn.getInputStream());
} catch (IOException ioe) {
} catch (ParserConfigurationException pce) {
} catch (SAXException se) {
}
if (doc!=null) {
try {
String imgThumb = doc.getElementsByTagName("ThumbnailUrl").item(0).getFirstChild().getNodeValue();
String imgLarge = doc.getElementsByTagName("MediumImageUrl").item(0).getFirstChild().getNodeValue();
if (!imgThumb.equals("")) {
InfoLink il = new InfoLink();
il.setService("Lockerz");
il.setType(0);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setLinkImageThumb(imgThumb);
il.setLinkImageLarge(imgLarge);
return il;
}
} catch (Exception e) {
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
// twitgoo
if (link.contains("twitgoo")) {
String id = link.substring(link.lastIndexOf("/")+1);
String strURL = "http://twitgoo.com/api/message/info/" + id;
Document doc = null;
try {
URL url;
URLConnection urlConn = null;
url = new URL(strURL);
urlConn = url.openConnection();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(urlConn.getInputStream());
} catch (IOException ioe) {
} catch (ParserConfigurationException pce) {
} catch (SAXException se) {
}
if (doc!=null) {
try {
String imgThumb = doc.getElementsByTagName("thumburl").item(0).getFirstChild().getNodeValue();
String imgLarge = doc.getElementsByTagName("imageurl").item(0).getFirstChild().getNodeValue();
if (!imgThumb.equals("")) {
InfoLink il = new InfoLink();
il.setService("Twitgoo");
il.setExtensiveInfo(true);
il.setType(0);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setLinkImageThumb(imgThumb);
il.setLinkImageLarge(imgLarge);
return il;
}
} catch (Exception e) {
}
}
}
// vimeo
if (link.contains("vimeo")) {
String id = link.substring(link.lastIndexOf("/")+1);
String strURL = "http://vimeo.com/api/v2/video/"+id+".xml";
Document doc = null;
try {
URL url;
URLConnection urlConn = null;
url = new URL(strURL);
urlConn = url.openConnection();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(urlConn.getInputStream());
} catch (IOException ioe) {
} catch (ParserConfigurationException pce) {
} catch (SAXException se) {
}
if (doc!=null) {
try {
String imgThumb = doc.getElementsByTagName("thumbnail_small").item(0).getFirstChild().getNodeValue();
String imgLarge = doc.getElementsByTagName("thumbnail_large").item(0).getFirstChild().getNodeValue();
String title = doc.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();
int duration = Integer.parseInt(doc.getElementsByTagName("duration").item(0).getFirstChild().getNodeValue());
if (!imgThumb.equals("")) {
InfoLink il = new InfoLink();
il.setService("Vimeo");
il.setExtensiveInfo(true);
il.setType(1);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setTitle(title);
il.setDurationVideo(duration);
il.setLinkImageThumb(imgThumb);
il.setLinkImageLarge(imgLarge);
return il;
}
} catch (Exception e) {
}
}
}
// youtube
if ( (link.contains("youtube")) || (link.contains("youtu.be")) ) {
String id = "";
if (link.contains("youtube")) {
id = link.substring(link.lastIndexOf("v=")+2);
if (id.contains("&")) {
id = id.substring(0,id.indexOf("&"));
}
}
if (link.contains("youtu.be")) {
id = link.substring(link.lastIndexOf("/")+1);
if (id.contains("?")) {
id = id.substring(0,id.indexOf("?"));
}
}
String imgThumb = "http://img.youtube.com/vi/"+id+"/2.jpg";
String imgLarge = "http://img.youtube.com/vi/"+id+"/0.jpg";
String strURL = "http://gdata.youtube.com/feeds/api/videos/"+id;
Document doc = null;
try {
URL url;
URLConnection urlConn = null;
url = new URL(strURL);
urlConn = url.openConnection();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(urlConn.getInputStream());
} catch (IOException ioe) {
} catch (ParserConfigurationException pce) {
} catch (SAXException se) {
}
String title = "Youtube";
int duration = 0;
try {
if (doc!=null) {
title = doc.getElementsByTagName("title").item(0).getFirstChild().getNodeValue();
duration = Integer.parseInt(doc.getElementsByTagName("yt:duration").item(0).getAttributes().getNamedItem("seconds").getNodeValue());
}
} catch (Exception e) {
}
InfoLink il = new InfoLink();
il.setService("Youtube");
il.setExtensiveInfo(true);
il.setType(1);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setTitle(title);
il.setDurationVideo(duration);
il.setLinkImageThumb(imgThumb);
il.setLinkImageLarge(imgLarge);
return il;
}
// si no es una imagen, es un enlace web
InfoLink il = new InfoLink();
il.setService("web");
il.setType(2);
il.setLink(link);
il.setOriginalLink(originalLink);
il.setTitle(originalLink);
return il;
}
public static String getURIContent(String url) {
String result = null;
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
StringBuffer sb = null;
Boolean flag = false;
try {
request.setURI(new URI(url));
request.setHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10");
HttpResponse response = client.execute(request);
BufferedReader in = new BufferedReader(new InputStreamReader(
response.getEntity().getContent(), "CP-1251"));
sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
sb.append(line + NL);
}
in.close();
flag = true;
} catch (ClientProtocolException e) {
} catch (IOException e) {
} catch (URISyntaxException e) {
}
if (flag) {
result = sb.toString();
if (result.equals("")) {
result = null;
}
}
return result;
}
}