⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hotwebworkthread.java

📁 实现了从Google
💻 JAVA
字号:
package com.ct.hotweb.getter;

import java.io.*;
import java.util.*;

import org.apache.commons.httpclient.*;

import com.ct.hotweb.bean.*;
import com.ct.hotweb.util.*;
import com.ct.hotweb.dao.*;

/**
 * hotweb工作线程
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */

public class HotWebWorkThread extends Thread {
	private HotWebWorkManager manager;
	private SearchKeyStack stack;

	public HotWebWorkThread(
		HotWebWorkManager manager,
		MultiThreadedHttpConnectionManager httpManager,
		SearchKeyStack stack) {
		this.manager = manager;
		this.stack = stack;
	}

	public void run() {
		ArrayList keyList = new ArrayList();
		ArrayList pathList = new ArrayList();
		ArrayList sameList = new ArrayList();
		int connCount = 0;
		Random rand = new Random();
		SearchKeyDAO keyDAO = new SearchKeyDAO();
		CategoryDAO catDAO = new CategoryDAO();

		while (!stack.isEmpty() && !manager.isKilled() && !stack.isKilled()) {
			try {
				SearchKey key = (SearchKey) (stack.pop());
				if (null == key) {
					continue;
				}

				boolean fail = false;
				//重试次数
				int count = 0;
				ArrayList blockVarList = null;
				Category cat = null;

				cat = catDAO.getCategory("" + key.getParentID());
				{
					count++;
					HotWebGetter hwg =
						new HotWebGetter(
							manager.getHttpClient(),
							manager.getHotWebGetterConfig(),
							key.getName(),
							manager.getBlockAnalyzer());

					try {
						blockVarList = hwg.getHotWeb().getBlocksVar();
					} catch (Exception e1) {
						//stack.push(key);
						//Thread.sleep(1000);
						//continue;
						Thread.sleep(3000);
						//continue;
					}
				}
				//save to db
				//remove old record
				keyDAO.deleteHotWebInfo(key);
				//add new record
				if (blockVarList != null)
					for (int i = 0; i < blockVarList.size(); i++) {
						HotWebInfo hwi = new HotWebInfo();
						HashMap vars = (HashMap) blockVarList.get(i);

						hwi.setContent(
							Utils.uncharsetChange(
								(String) vars.get("Content"),
								manager.getHtmlCharset()));
						hwi.setParentId(key.getId());
						hwi.setTitle(
							Utils.uncharsetChange(
								(String) vars.get("SiteTitle"),
								manager.getHtmlCharset()));
						hwi.setUrl(
							Utils.uncharsetChange(
								(String) vars.get("SiteUrl"),
								manager.getHtmlCharset()));
						
						keyDAO.addHotWebInfo(hwi);
					}

				//get search key info
				HashMap map = new HashMap(1);
				map.put(
					"SearckKeyName",
					Utils.charsetChange(
						key.getName(),
						manager.getHtmlCharset()));
				keyList.add(map);
				//get search key path
				map = new HashMap(2);
				/*
				map.put("PathPartName", "首页");
				map.put(
					"PathPartUrl",
					GetterHelper.getCategoryUrl(manager, cat));
				pathList.add(map);
				*/
				StringTokenizer st = new StringTokenizer(cat.getPath(), "/");
				while (st.hasMoreTokens()) {
					map = new HashMap(2);
					String partId = st.nextToken();
					Category pathCat = catDAO.getCategory(partId.trim());
					map.put(
						"PathPartName",
						Utils.charsetChange(
							pathCat.getName(),
							manager.getHtmlCharset()));
					map.put(
						"PathPartUrl",
						GetterHelper.getCategoryUrl(manager, pathCat));
					pathList.add(map);
				}
				//get same level keyinfo

				List sameKeys =
					keyDAO.getSameLevelSearchKey("" + key.getParentID());
				String keyId = "" + key.getId();
				Category pc = catDAO.getCategory("" + key.getParentID());

				for (int i = 0; i < sameKeys.size(); i++) {
					SearchKey tmp = (SearchKey) sameKeys.get(i);
					if (keyId.equals("" + tmp.getId()))
						continue;
					map = new HashMap(2);
					map.put(
						"SameKeyName",
						Utils.charsetChange(
							tmp.getName(),
							manager.getHtmlCharset()));
					map.put(
						"SameKeyUrl",
						GetterHelper.getKeyUrl(manager, pc, tmp));
					sameList.add(map);
				}

				String content =
					generate(
						manager.getHtmlTemplate(),
						keyList,
						pathList,
						blockVarList,
						sameList,
						new HashMap());
				outputStaticHtml(cat, key, content);
				keyList.clear();
				pathList.clear();
				sameList.clear();

				//从任务中去除
				try {
					if (blockVarList != null && blockVarList.size() > 0)
						keyDAO.removeError("" + key.getId());
				} catch (Exception e) {
					e.printStackTrace();
				}
			} catch (Exception e) {
				System.out.println(
					"hotweb thread generate error: " + e.getMessage());
				//e.printStackTrace();
			}

		}
	}

	public void outputStaticHtml(Category cat, SearchKey key, String content) {
		File f;
		BufferedOutputStream bos = null;

		String fileName = GetterHelper.getKeyFileName(manager, key);
		String path = GetterHelper.getSearchKeyPath(manager, cat, key);
		f = new File(path);
		if (!f.exists())
			f.mkdirs();
		path += fileName;
		f = new File(path);
		if (f.exists())
			f.delete();
		try {
			bos = new BufferedOutputStream(new FileOutputStream(f));
			bos.write(content.getBytes(manager.getHtmlCharset()));
			bos.flush();
			key.setLastGenerateTime(
				Utils.dateFormat(new Date(System.currentTimeMillis())));
			new SearchKeyDAO().updateSearchKey(key);
		} catch (Exception e) {
			System.out.println("output static html error. " + e.getMessage());
		} finally {
			try {
				bos.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	public String generate(
		TemplateAnalyzer template,
		ArrayList headVars,
		ArrayList pathVars,
		ArrayList bodyVarArrays,
		ArrayList sameVars,
		HashMap footVars) {
		String htmlContent = "";
		//generate head
		htmlContent
			+= HtmlGenerateUtils.generateBlocks(template.getBlock(0), headVars);

		//generate path
		htmlContent
			+= HtmlGenerateUtils.generateBlock(
				template.getBlock(1),
				HtmlGenerateUtils.EMPTY_VARS);
		htmlContent
			+= HtmlGenerateUtils.generateBlocks(template.getBlock(2), pathVars);
		htmlContent
			+= HtmlGenerateUtils.generateBlocks(
				template.getBlock(3),
				headVars);

		//generate same keys
		if (sameVars != null && sameVars.size() > 0) {
			htmlContent
				+= HtmlGenerateUtils.generateBlock(
					template.getBlock(4),
					HtmlGenerateUtils.EMPTY_VARS);	

			htmlContent
				+= HtmlGenerateUtils.generateBlocks(
					template.getBlock(5),
					new HashMap(),
					template.getBlock(6),
					sameVars,
					template.getBlock(7),
					new HashMap(),
					manager.getSimilarColumn());
					
			htmlContent
				+= HtmlGenerateUtils.generateBlock(
					template.getBlock(8),
					HtmlGenerateUtils.EMPTY_VARS);					
		}

		//generate body
		if (bodyVarArrays != null && bodyVarArrays.size() > 0) {
			htmlContent
				+= HtmlGenerateUtils.generateBlock(
					template.getBlock(9),
					new HashMap());
			htmlContent
				+= HtmlGenerateUtils.generateBlocks(
					template.getBlock(10),
					bodyVarArrays);
			htmlContent
				+= HtmlGenerateUtils.generateBlock(
					template.getBlock(11),
					new HashMap());
		}

		//generate foot
		htmlContent
			+= HtmlGenerateUtils.generateBlock(template.getBlock(12), footVars);
		return htmlContent;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -