package gov.anzong.task; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Locale; import java.util.regex.Pattern; import gov.anzong.bean.DataBetter; import gov.anzong.bean.VideoDetialData; import gov.anzong.bean.VideoParseJson; import gov.anzong.fragment.ProgressDialogFragment; import gov.anzong.mediaplayer.R; import gov.anzong.mediaplayer.VideoActivity; import gov.anzong.receiveintent.ReceiveIntentURLActivity; import gov.anzong.util.FunctionUtil; import gov.anzong.util.HttpUtil; import gov.anzong.util.StringUtil; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.util.Base64; import android.widget.Toast; public class AcfunVideoLoadTask extends AsyncTask<String, Integer, String> { final String origurl; String title = ""; final FragmentActivity context; private boolean isnetworkerr; private boolean isdelected; static final String dialogTag = "load"; static private final String TUDOU_START = "http://www.tudou.com/programs/view/"; static private final String TUDOU_END = "/"; static private final String YOUKU_START = "http://v.youku.com/v_show/id_"; static private final String YOUKU_END = ".html"; static private final String QQ_START = "http://v.qq.com/"; static private final String SINA_START = "http://video.sina.com.cn/"; static private final String SINAYOU_START = "http://you.video.sina.com.cn/"; public AcfunVideoLoadTask(String origurl, FragmentActivity context) { super(); this.origurl = origurl; this.context = context; } @Override protected void onPreExecute() { FunctionUtil.createdialog(context, dialogTag); super.onPreExecute(); } @Override protected void onPostExecute(String result) { FunctionUtil.closedialog(context, dialogTag); if (result != null) { VideoActivity.openVideo(context, Uri.parse(result), title); this.onCancelled(); } else { Toast.makeText(context, "��������", Toast.LENGTH_LONG).show(); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(origurl)); boolean isIntentSafe = context.getPackageManager() .queryIntentActivities(intent, 0).size() > 0; if (isIntentSafe) { Intent chooser = Intent.createChooser(intent, "������,��ѡ�������򿪷�ʽ:"); context.startActivityForResult(chooser, 123); } } super.onPostExecute(result); } @Override protected void onCancelled(String result) { this.onCancelled(); } @Override protected void onCancelled() { if (context != null) { context.finish(); } } @Override protected String doInBackground(String... params) { String uri = params[0]; uri = uri.replace("acfun.com", "acfun.tv"); final String htmlStringstep1 = HttpUtil.iosGetHtml(uri); if (StringUtil.isEmpty(htmlStringstep1)) { this.isnetworkerr = true; return null; } String datavid = StringUtil.getStringBetween(htmlStringstep1, 0, "data-vid=\"", "\"").result; title = StringUtil.getStringBetween(htmlStringstep1, 0, "<title>", "</title>").result; String newurl = "", sourceType = "", sourceUrl = ""; String htmlStringstep2 = ""; if (StringUtil.isEmpty(datavid)) { if (htmlStringstep1.indexOf("��ҳ�������Ϊ����ԭ��ɾ��") > 0) { this.isdelected = true; return null; } String playerdata = StringUtil.getStringBetween(htmlStringstep1, 0, "autocompletion_player(", ");").result; String list[] = new String[4]; if (playerdata.indexOf(",") < 0) { datavid = playerdata; } else { playerdata = playerdata.replaceFirst("'", ""); list = playerdata.split(","); } if (StringUtil.isEmpty(datavid) && StringUtil.isEmpty(list[0])) { return null; } else { if (!StringUtil.isEmpty(datavid)) { newurl = "http://www.acfun.tv/video/getVideo.aspx?id=" + datavid; htmlStringstep2 = HttpUtil.iosGetHtml(newurl); sourceType = StringUtil.getStringBetween(htmlStringstep2, 0, "\"sourceType\":\"", "\"").result; sourceUrl = StringUtil.getStringBetween(htmlStringstep2, 0, "\"sourceUrl\":\"", "\"").result; } else { sourceUrl = list[0]; sourceType = list[1]; } } } else { newurl = "http://www.acfun.tv/video/getVideo.aspx?id=" + datavid; htmlStringstep2 = HttpUtil.iosGetHtml(newurl); sourceType = StringUtil.getStringBetween(htmlStringstep2, 0, "\"sourceType\":\"", "\"").result; sourceUrl = StringUtil.getStringBetween(htmlStringstep2, 0, "\"sourceUrl\":\"", "\"").result; } if (StringUtil.isEmpty(sourceType)) { return null; } if (sourceType.toLowerCase(Locale.US).equals("sina")) { if (StringUtil.isEmpty(sourceUrl)) { return null; } if ((sourceUrl.toLowerCase(Locale.US).startsWith(SINA_START) || sourceUrl .toLowerCase(Locale.US).startsWith(SINAYOU_START)) && StrTotalCount(sourceUrl, "/") >= 4) { String sinaurl = sourceUrl; sinaurl = FunctionUtil.uribase64(sinaurl); String js = HttpUtil.iosGetHtml(sinaurl); DataBetter result = FunctionUtil.dataselectbetterone(js, "������", context); if (StringUtil.isEmpty(title)) { title = result.title + " - AcFun"; } return result.url; } else { return null; } } else if (sourceType.toLowerCase(Locale.US).equals("youku")) { if (StringUtil.isEmpty(sourceUrl)) { return null; } if (sourceUrl.toLowerCase(Locale.US).startsWith(TUDOU_START)) { String id = StringUtil.getStringBetween(sourceUrl, 0, TUDOU_START, TUDOU_END).result; String tudouuri = "http://www.tudou.com/programs/view/" + id + "/"; tudouuri = FunctionUtil.uribase64(tudouuri); String js = HttpUtil.iosGetHtml(tudouuri); DataBetter result = FunctionUtil.dataselectbetterone(js, "������", context); if (StringUtil.isEmpty(title)) { title = result.title + " - AcFun"; } return result.url; } else if (sourceUrl.toLowerCase(Locale.US).startsWith(YOUKU_START)) {// �ſ�,����ֱ����VID������ String youkuurl = sourceUrl; youkuurl = FunctionUtil.uribase64(youkuurl); String js = HttpUtil.iosGetHtml(youkuurl); DataBetter result = FunctionUtil.dataselectbetterone(js, "�ſ���", context); if (StringUtil.isEmpty(title)) { title = result.title + " - AcFun"; } return result.url; } else { String NewURL = "http://v.youku.com/v_show/id_" + sourceUrl + ".html"; NewURL = FunctionUtil.uribase64(NewURL); String js = HttpUtil.iosGetHtml(NewURL); DataBetter result = FunctionUtil.dataselectbetterone(js, "�ſ���", context); if (StringUtil.isEmpty(title)) { title = result.title + " - AcFun"; } return result.url; } } else if (sourceType.toLowerCase(Locale.US).equals("tudou")) { if (StringUtil.isEmpty(sourceUrl)) { return null; } if (sourceUrl.toLowerCase(Locale.US).startsWith(TUDOU_START)) { String id = StringUtil.getStringBetween(sourceUrl, 0, TUDOU_START, TUDOU_END).result; String tudouuri = "http://www.tudou.com/programs/view/" + id + "/"; tudouuri = FunctionUtil.uribase64(tudouuri); String js = HttpUtil.iosGetHtml(tudouuri); DataBetter result = FunctionUtil.dataselectbetterone(js, "������", context); if (StringUtil.isEmpty(title)) { title = result.title + " - AcFun"; } return result.url; } else { return null; } } else if (sourceType.toLowerCase(Locale.US).equals("qq")) { if (StringUtil.isEmpty(sourceUrl)) { return null; } if (sourceUrl.toLowerCase(Locale.US).startsWith(QQ_START)) { String qqurl = sourceUrl; qqurl = FunctionUtil.uribase64(qqurl); String js = HttpUtil.iosGetHtml(qqurl); DataBetter result = FunctionUtil.dataselectbetterone(js, "��Ѷ��Ƶ", context); if (StringUtil.isEmpty(title)) { title = result.title + " - AcFun"; } return result.url; } } else { return null; } return null; } public static boolean isNumeric(String str) { Pattern pattern = Pattern.compile("[0-9]*"); return pattern.matcher(str).matches(); } private int StrTotalCount(String str, String key) { int count = 0; int index = 0; while ((index = str.indexOf(key, index)) != -1) { index = index + key.length(); count++; } return count; } }