package com.cnblogs.android.core; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; import android.content.Context; import com.cnblogs.android.dal.BlogDBHelp; import com.cnblogs.android.entity.*; import com.cnblogs.android.parser.BlogListXmlParser; import com.cnblogs.android.parser.BlogXmlParser; import com.cnblogs.android.utility.NetHelper; /** * Blog������ * * @author walkingp * */ public class BlogHelper extends DefaultHandler { /** * �������� * * @param top * @return */ @SuppressWarnings("null") public static List<Blog> DownloadOfflineBlogList(int top) { int pageSize = top / Config.BLOG_PAGE_SIZE; int lastNum = pageSize % Config.BLOG_PAGE_SIZE; List<Blog> listBlogs = null; // ����ǰ��ҳ for (int i = 0; i < pageSize; i++) { List<Blog> list = GetBlogList(i); listBlogs.addAll(list); } // ����ʣ������ List<Blog> list = GetBlogList(pageSize);// �������һҳ for (int i = 0, len = list.size(); i < len; i++) { listBlogs.addAll(list); if (list.get(i).GetBlogId() == lastNum) { break; } } // ���� for (int i = 0, len = listBlogs.size(); i < len; i++) { String content = GetBlogContentByIdWithNet(listBlogs.get(i) .GetBlogId()); listBlogs.get(i).SetBlogContent(content); listBlogs.get(i).SetIsFullText(true);// ����ȫ�ı�־ } return listBlogs; } /** * ����ҳ�뷵��Blog���󼯺� * * @return pageIndex:ҳ�룬��1��ʼ */ public static ArrayList<Blog> GetBlogList(int pageIndex) { int pageSize = Config.BLOG_PAGE_SIZE; String url = Config.URL_GET_BLOG_LIST.replace("{pageIndex}", String.valueOf(pageIndex)).replace("{pageSize}", String.valueOf(pageSize));// ���ݵ�ַ String dataString = NetHelper.GetContentFromUrl(url); ArrayList<Blog> list = ParseString(dataString); return list; } /** * ����48Сʱ���Ķ�����Blog���󼯺� */ public static ArrayList<Blog> Get48HoursTopViewBlogList() { int size = Config.NUM_48HOURS_TOP_VIEW; String url = Config.URL_48HOURS_TOP_VIEW_LIST.replace("{size}", String.valueOf(size));// ���ݵ�ַ String dataString = NetHelper.GetContentFromUrl(url); ArrayList<Blog> list = ParseString(dataString); return list; } /** * ����10�����Ƽ�����Blog���󼯺� */ public static ArrayList<Blog> Get10DaysTopDiggBlogList() { int size = Config.NUM_TENDAYS_TOP_DIGG; String url = Config.URL_TENDAYS_TOP_DIGG_LIST.replace("{size}", String.valueOf(size));// ���ݵ�ַ String dataString = NetHelper.GetContentFromUrl(url); ArrayList<Blog> list = ParseString(dataString); return list; } /** * ���ݲ����û���ź�ҳ�뷵��Blog���󼯺� * * @param userId * :�û���� * @param pageIndex * :ҳ�룬��1��ʼ * @return */ public static ArrayList<Blog> GetAuthorBlogList(String author, int pageIndex) { int pageSize = Config.BLOG_LIST_BY_AUTHOR_PAGE_SIZE; String url = Config.URL_GET_BLOG_LIST_BY_AUTHOR .replace("{author}", author) .replace("{pageIndex}", String.valueOf(pageIndex)) .replace("{pageSize}", String.valueOf(pageSize));// ���ݵ�ַ String dataString = NetHelper.GetContentFromUrl(url); ArrayList<Blog> list = ParseString(dataString); return list; } /** * ���ַ���ת��ΪBlog���� * * @return */ private static ArrayList<Blog> ParseString(String dataString) { SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); ArrayList<Blog> listBlog = new ArrayList<Blog>(); try { XMLReader xmlReader = saxParserFactory.newSAXParser() .getXMLReader(); BlogListXmlParser handler = new BlogListXmlParser(listBlog); xmlReader.setContentHandler(handler); xmlReader.parse(new InputSource(new StringReader(dataString))); listBlog = handler.GetBlogList(); } catch (SAXException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return listBlog; } /** * ���ݱ�Ż�ȡ�������� * * @param blogId * @return */ public static String GetBlogContentByIdWithNet(int blogId) { String blogContent = ""; String url = Config.URL_GET_BLOG_DETAIL.replace("{0}", String.valueOf(blogId));// ��ַ String xml = NetHelper.GetContentFromUrl(url); if (xml == "") { return ""; } blogContent = ParseBlogString(xml); return blogContent; } /** * ���ݱ�Ż�ȡ��������(��ȡ���أ���ȡ����) * * @param blogId * @return */ public static String GetBlogById(int blogId, Context context) { String blogContent = ""; // ���ȿ��DZ������� BlogDBHelp helper = new BlogDBHelp(context); Blog entity = helper.GetBlogEntity(blogId); if (null == entity || entity.GetBlogContent().equals("")) { blogContent = GetBlogContentByIdWithNet(blogId); /*String _blogContent=ImageCacher.FormatLocalHtmlWithImg(ImageCacher.EnumImageType.Blog, blogContent); if (Config.IS_SYNCH2DB_AFTER_READ) { helper.SynchronyContent2DB(blogId, _blogContent);// ͬ�������ݿ� }*/ } else { blogContent = entity.GetBlogContent(); } return blogContent; } /** * ���ַ���ת��ΪBlog���� * * @return */ private static String ParseBlogString(String dataString) { SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); String blogContent = ""; try { XMLReader xmlReader = saxParserFactory.newSAXParser() .getXMLReader(); BlogXmlParser handler = new BlogXmlParser(blogContent); xmlReader.setContentHandler(handler); xmlReader.parse(new InputSource(new StringReader(dataString))); blogContent = handler.GetBlogContent(); } catch (SAXException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return blogContent; } }