/**
* Parse baka-tsuki wiki page
*/
package com.dotcool.reader.parser;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import android.util.Log;
import com.dotcool.model.Book;
import com.dotcool.reader.Constants;
import com.dotcool.reader.LNReaderApplication;
import com.dotcool.reader.UIHelper;
import com.dotcool.reader.dao.NovelsDao;
import com.dotcool.reader.helper.BakaReaderException;
import com.dotcool.reader.helper.Util;
import com.dotcool.reader.model.BookModel;
import com.dotcool.reader.model.ImageModel;
import com.dotcool.reader.model.NovelCollectionModel;
import com.dotcool.reader.model.NovelContentModel;
import com.dotcool.reader.model.PageModel;
/**
* @author Nandaka
*
*/
public class BakaTsukiParser {
private static final String TAG = BakaTsukiParser.class.toString();
//最近新品小说列表部分
private static List<Book> parseBook(String jsonString) throws JSONException {
JSONArray array = new JSONArray(jsonString);
List<Book> items = new ArrayList<Book>();
for (int i = 0; i < array.length(); i++) {
JSONObject data = array.getJSONObject(i);
Book result = new Book();
result.setBookId(data.optInt("id"));
result.setBookName(data.optString("title"));
result.setBookAuthor(data.optString("author"));
result.setBookImgUrl(data.optString("imgurl"));
result.setBookSummary(data.optString("summary"));
result.setBookCreateTime(data.optLong("createtime"));
result.setBookUpdateTime(data.optLong("updatetime"));
result.setBookHits(data.optInt("hits"));
result.setBookLastChapterID(data.optString("lastchapterid"));
result.setBookLastChapterTitle(data.optString("lastchaptertitle"));
result.setBookChapterCount(data.optInt("chaptercount"));
items.add(result);
}
return items;
}
public static ArrayList<PageModel> ParseNovelList(String doc) throws JSONException {
ArrayList<PageModel> result = new ArrayList<PageModel>();
List<Book> items= parseBook(doc);
int order = 0;
for (Iterator<Book> i = items.iterator(); i.hasNext();) {
Book novel = i.next();
PageModel page = new PageModel();
int tempPage = novel.getBookId();
page.setSummary(novel.getBookSummary());
page.setImgurl(novel.getBookImgUrl());
page.setId(tempPage);
page.setLanguage(Constants.LANG_ENGLISH);
page.setType(PageModel.TYPE_NOVEL);
page.setTitle(novel.getBookName());
page.setPage(novel.getBookName());
page.setLastUpdate(new Date(novel.getBookUpdateTime() * 1000)); // set to min value if never open
page.setLastCheck(new Date(novel.getBookCreateTime() * 1000));
try {
// get the saved data if available
PageModel temp = NovelsDao.getInstance().getPageModel(page, null, false);
if (temp != null) {
page.setWatched(temp.isWatched());
page.setFinishedRead(temp.isFinishedRead());
page.setDownloaded(temp.isDownloaded());
}
} catch (Exception e) {
Log.e(TAG, "发生错误: " + page.getPage(), e);
}
page.setParent("Main_Page");
page.setOrder(order);
result.add(page);
++order;
}
return result;
}
public static ArrayList<PageModel> ParseTeaserList(String doc) throws JSONException {
ArrayList<PageModel> result = new ArrayList<PageModel>();
List<Book> items= parseBook(doc);
int order = 0;
for (Iterator<Book> i = items.iterator(); i.hasNext();) {
Book novel = i.next();
PageModel page = new PageModel();
int tempPage = novel.getBookId();
page.setSummary(novel.getBookSummary());
page.setImgurl(novel.getBookImgUrl());
page.setId(tempPage);
page.setLanguage(Constants.LANG_ENGLISH);
page.setType(PageModel.TYPE_NOVEL);
page.setTitle(novel.getBookName());
page.setPage(novel.getBookName());
page.setLastUpdate(new Date(0)); // set to min value if never open
try {
// get the saved data if available
PageModel temp = NovelsDao.getInstance().getPageModel(page, null, false);
if (temp != null) {
page.setLastUpdate(temp.getLastUpdate());
page.setWatched(temp.isWatched());
page.setFinishedRead(temp.isFinishedRead());
page.setDownloaded(temp.isDownloaded());
}
} catch (Exception e) {
Log.e(TAG, "发生错误: " + page.getPage(), e);
}
page.setLastCheck(new Date());
page.setParent("Main_Page");
page.setOrder(order);
result.add(page);
++order;
}
return result;
}
public static ArrayList<PageModel> ParseOriginalList(String doc) throws JSONException {
ArrayList<PageModel> result = new ArrayList<PageModel>();
List<Book> items= parseBook(doc);
int order = 0;
for (Iterator<Book> i = items.iterator(); i.hasNext();) {
Book novel = i.next();
PageModel page = new PageModel();
int tempPage = novel.getBookId();
page.setSummary(novel.getBookSummary());
page.setImgurl(novel.getBookImgUrl());
page.setId(tempPage);
page.setLanguage(Constants.LANG_ENGLISH);
page.setType(PageModel.TYPE_NOVEL);
page.setTitle(novel.getBookName());
page.setPage(novel.getBookName());
page.setLastUpdate(new Date(0)); // set to min value if never open
try {
// get the saved data if available
PageModel temp = NovelsDao.getInstance().getPageModel(page, null, false);
if (temp != null) {
page.setLastUpdate(temp.getLastUpdate());
page.setWatched(temp.isWatched());
page.setFinishedRead(temp.isFinishedRead());
page.setDownloaded(temp.isDownloaded());
}
} catch (Exception e) {
Log.e(TAG, "发生错误: " + page.getPage(), e);
}
page.setLastCheck(new Date());
page.setParent("Main_Page");
page.setOrder(order);
result.add(page);
++order;
}
return result;
}
private static ArrayList<BookModel> parseDetails(String jsonString) throws JSONException {
JSONArray array = new JSONArray(jsonString);
ArrayList<BookModel> items = new ArrayList<BookModel>();
for (int i = 0; i < array.length(); i++) {
JSONObject data = array.getJSONObject(i);
BookModel result = new BookModel();
result.setId(data.optInt("id"));
result.setTitle(data.optString("title"));
result.setBookId(data.optInt("bookid"));
result.setChapter(data.optInt("chapter"));
result.setLastUpdate(new Date(data.optLong("createtime") * 1000));
result.setLastCheck(new Date(data.optLong("updatetime") * 1000));
ArrayList<PageModel> pages=new ArrayList<PageModel>();
PageModel page = new PageModel();
page.setBook(result);
page.setDownloaded(false);
page.setId(result.getId());
//page.setLastUpdate(new Date(result.getUpdatetime()));
page.setPage(result.getTitle());
pages.add(page);
result.setChapterCollection(pages);
items.add(result);
}
return items;
}
public static NovelCollectionModel ParseNovelDetails(String doc, PageModel page) throws MalformedURLException, JSONException {
NovelCollectionModel novel = new NovelCollectionModel();
if (doc == null)
throw new NullPointerException("Document cannot be null.");
novel.setPage(page.getPage());
novel.setPageModel(page);
String redirected = null;
novel.setRedirectTo(redirected);
novel.setSynopsis(page.getTitle());
URL url = new URL(Constants.BASE_IMAGE_URL+page.getImgurl());
novel.setCoverUrl(url);
ArrayList<BookModel> books = parseDetails(doc);
novel.setBookCollections(books);
return novel;
}
//获取小说内容
public static NovelContentModel ParseNovelContent(String doc, BookModel page) throws Exception {
NovelContentModel content = new NovelContentModel();
content.setPage(page.getPage());
JSONObject data = new JSONObject(doc);
content.setContent(data.optString("content"));
content.setLastXScroll(0);
content.setLastYScroll(0);
content.setLastZoom(Constants.DISPLAY_SCALE);
return content;
}
}