`
vbtboy
  • 浏览: 47589 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在公司写得一个监测iphone4供货情况的程序,下班了回家继续写

阅读更多
package com.myapp.utils;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;


import org.w3c.dom.Document;
import org.w3c.dom.NodeList;

public class ReadWebPage {

/**
* @param args
* @throws IOException
* @throws InterruptedException
*/

// TODO Auto-generated method stub
public static void main(String[] args) throws IOException, InterruptedException {
MyThread  myThread = new MyThread();
myThread.start();
}

private static void writeToTmpFile(String str,File f) throws IOException {

FileWriter fw = new FileWriter(f,true);
fw.write(str+"\r\n");
fw.flush();
fw.close();
}

private static void getIphone4MarketInfo(File file){
try {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(file);
// NodeList nodeList = document.getElementsByTagName("book");
//   for(int i=0;i<nodeList.getLength();i++){
// System.out.println(document.getElementsByTagName("title").item(i).getFirstChild().getNodeValue());
// System.out.println(document.getElementsByTagName("price").item(i).getFirstChild().getNodeValue());
//   }

  XPathFactory xpathFactory =XPathFactory.newInstance();
  XPath xpath = xpathFactory.newXPath();
  XPathExpression expression = xpath.compile("span[@class='customer_commit_display']/text()");
  Object result = expression.evaluate(document,XPathConstants.NODESET);
  NodeList nodeList = (NodeList)result;
  for (int i = 0; i < nodeList.getLength(); i++) {
System.out.println(nodeList.item(i).getNodeValue());
}

} catch (Exception e) {
e.printStackTrace();
}
}

public static String getTextFornHtml(String regEx,String inputText){
Pattern p;
Matcher m;
p=Pattern.compile(regEx);
m=p.matcher(inputText);
if(m.find()){
return m.replaceAll("");
}else{
return null;
}
}

public static boolean HtmlToTextGb2312(String inputString)
    {
              String htmlStr = inputString; //含html标签的字符串
              String textStr ="";
              Pattern p_script;
              Matcher m_script;
              Pattern p_style;
              Matcher m_style;
              Pattern p_html;
              Matcher m_html;
              Pattern p_houhtml;
              Matcher m_houhtml;
              Pattern p_spe;
              Matcher m_spe;
              Pattern p_blank;
              Matcher m_blank;
              Pattern p_table;
              Matcher m_table;
              Pattern p_enter;
              Matcher m_enter;
             
              Pattern p_iphone4;
              Matcher m_iphone4;
              boolean isFind=false;
              try {
               String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>";
               //定义script的正则表达式.
               String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>";
               //定义style的正则表达式.
               String regEx_html = "<[^>]+>";
               //定义HTML标签的正则表达式
               String regEx_houhtml = "/[^>]+>";
               //定义HTML标签的正则表达式
               String regEx_spe="\\&[^;]+;";
               //定义特殊符号的正则表达式
               String regEx_blank=" +";
               //定义多个空格的正则表达式
               String regEx_table="\t+";
               //定义多个制表符的正则表达式
               String regEx_enter="\n+";
               //定义多个回车的正则表达式
              
               String regEx_iphone4 ="<img[\\s\\S]*?alt=\"iPhone 4\">";
               p_iphone4 = Pattern.compile(regEx_iphone4,Pattern.CASE_INSENSITIVE);
               m_iphone4 = p_iphone4.matcher(htmlStr);
              
              
               p_script = Pattern.compile(regEx_script,Pattern.CASE_INSENSITIVE);
               m_script = p_script.matcher(htmlStr);
               htmlStr = m_script.replaceAll(""); //过滤script标签

               p_style = Pattern.compile(regEx_style,Pattern.CASE_INSENSITIVE);
               m_style = p_style.matcher(htmlStr);
               htmlStr = m_style.replaceAll(""); //过滤style标签
             
               p_html = Pattern.compile(regEx_html,Pattern.CASE_INSENSITIVE);
               m_html = p_html.matcher(htmlStr);
               htmlStr = m_html.replaceAll(""); //过滤html标签
              
               p_houhtml = Pattern.compile(regEx_houhtml,Pattern.CASE_INSENSITIVE);
               m_houhtml = p_houhtml.matcher(htmlStr);
               htmlStr = m_houhtml.replaceAll(""); //过滤html标签
              
               p_spe = Pattern.compile(regEx_spe,Pattern.CASE_INSENSITIVE);
               m_spe = p_spe.matcher(htmlStr);
               htmlStr = m_spe.replaceAll(""); //过滤特殊符号
              
               p_blank = Pattern.compile(regEx_blank,Pattern.CASE_INSENSITIVE);
               m_blank = p_blank.matcher(htmlStr);
               htmlStr = m_blank.replaceAll(" "); //过滤过多的空格
              
               p_table = Pattern.compile(regEx_table,Pattern.CASE_INSENSITIVE);
               m_table = p_table.matcher(htmlStr);
               htmlStr = m_table.replaceAll(" "); //过滤过多的制表符
              
                  
               p_enter = Pattern.compile(regEx_enter,Pattern.CASE_INSENSITIVE);
               m_enter = p_enter.matcher(htmlStr);
               htmlStr = m_enter.replaceAll(" "); //过滤过多的制表符
              
               textStr = htmlStr;
              isFind=m_iphone4.find();
              }catch(Exception e)
              {
                    System.err.println("Html2Text: " + e.getMessage());
              }
          
              //return textStr;//返回文本字符串
              return isFind;
    }
static class MyThread extends Thread{
public void run(){
while(true){
InputStream is = null;
try {
URL url = new URL(
"http://store.apple.com/cn/browse/home/shop_iphone/family/iphone");
InetSocketAddress address = new InetSocketAddress("10.17.171.10",
8080);
Proxy proxy = new Proxy(Proxy.Type.HTTP, address);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection(proxy);
connection.setConnectTimeout(60*1000);
is = connection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));
String line = "";
File f = new File("d:\\sss.txt");
String outStr=null;
String text=null;
while ((line = br.readLine()) != null) {
text=getTextFornHtml("<img[\\s\\S]*?alt=\"iPhone 3GS\">",line);
if(text!=null){
text="iPhone 3GS:";
outStr=text;
}
text=getTextFornHtml("<img[\\s\\S]*?alt=\"iPhone 4\">",line);
if(text!=null){
text="iphone4:";
outStr+=text;
}
if(line.contains("product-specs")||line.contains("16 GB")||line.contains("customer_commit_display")
||line.contains("freeshipping")||line.contains("32 GB")||line.contains("8 GB")){
outStr += line+"\r\n";
}
}
text=getTextFornHtml("(<[^>]+>)||(/[^>]+>||\\t+||\\s+)", outStr);
text=">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n"+text;
text=text+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n\r\n";
if(text.indexOf("24")!=text.lastIndexOf("24")){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
Date date= new Date();
String currentDate = sdf.format(date);
text="有货啦:"+currentDate+"\r\n"+text;
writeToTmpFile(text,f);
}
System.out.println(text.trim());
System.out.println("\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n");
//getIphone4MarketInfo(f);
br.close();
Thread.sleep(10 * 1000L);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
// public static void sendMail(String to, String toName,String subject, String body  ) {
//   try {
//    Properties prop = System.getProperties();
////    prop.put( "mail.smtp.auth ", "true ");
////    prop.setProperty("proxySet", "true");
//// //设置http访问要使用的代理服务器的地址   
////    prop.setProperty("socksProxyHost", "10.17.171.10");   
//    //设置http访问要使用的代理服务器的端口   
////    prop.setProperty("socksProxyPort", "8080");   
//    HtmlEmail email = new HtmlEmail();
//    email.setHostName("localhost");//设置发信的smtp服务器
//    email.addTo(to, toName);//设置收件人帐号和收件人
//    email.setFrom("vbtboy@126.com", "aaa");//设置发信的邮件帐号和发信人
//    email.setSubject(subject);//设置邮件主题
//    email.setAuthentication("aaa","111111");//如果smtp服务器需要认证的话,在这里设置帐号、密码
//    email.setHtmlMsg(body);//设置邮件正文和字符编码
//    email.send();
//   } catch (EmailException e) {
//    e.printStackTrace();
//   }
}
分享到:
评论

相关推荐

    监测程序实现对程序的监测

    标题中的“监测程序实现对程序的监测”是一个关于软件开发的话题,主要涉及到程序监控和管理。在IT领域,这样的功能通常用于系统管理、故障排查或性能优化,它允许开发者或系统管理员实时了解程序的运行状态,包括但...

    HViewerSpy程序句柄资源监测软件

    HViewer是一款专门用来进行Windows程序的句柄资源监测的软件,但不能对指定进程的句柄资源进行自动的监测,为此我写了一个HViewerSpy程序来辅助进行自动监测。使用方法是启动HViewer程序,并选择好需要进行监测的...

    环境监测与测量控制程序.pdf

    在职责分配方面,综合办公室承担着多项关键任务,包括运行控制程序的监督、环保法律法规遵循情况的定期评价、目标与指标完成情况的监控,以及联系环保部门进行定期监测。技术质量科则专门负责监测设备的外部校准工作...

    基于物联网的智慧农业监测系统微信小程序端代码

    在"基于物联网的智慧农业监测系统微信小程序端代码"中,我们可以看到以下几个关键组成部分: 1. **app.js**:这是微信小程序的主入口文件,包含了全局配置和事件处理函数。开发者在此定义全局变量、注册全局函数,...

    Qt 写的一个测试小程序,用来实时监测电脑所有的U盘或者移动磁盘的个数及容量

    Qt 写的一个测试小程序,用来实时监测电脑所有的U盘或者移动磁盘的个数及容量。启动软件时获取电脑所有的移动磁盘,并分别存储各个移动磁盘的可用容量和总容量。并且监控U盘的拔插,实时更新当前电脑U盘个数及他们的...

    监测程序详细介绍,源代码 实现对程序的监测

    监测程序详细介绍,源代码 在编写这个软件的过程中遇到很多问题,发现网上也有很多人一样也遇到这些问题。 如:1快捷键的设置; 2 往txt文件里面一行行的读取、删除、添加字符串等; 3 根据程序路径名以及程序名判断...

    Windows服务和IIS网站[应用程序池]监测工具

    这是一个采用.net4.0框架开发的Winform程序,可针对Windows系统的服务和IIS网站【应用程序池】进行实时监测,当程序检测到指定的服务或IIS网站【应用程序池】停止以后则自动重启,以此来保证业务系统服务的平稳运行...

    Windows服务和IIS网站[应用程序池]监测工具(新版)

    这是一个采用.net4.0框架开发的Winform程序,可针对Windows系统的服务和IIS网站【应用程序池】进行实时监测,当程序检测到指定的服务或IIS网站【应用程序池】停止以后则自动重启,以此来保证业务系统服务的平稳运行...

    环境监测中心监测工作程序归纳.pdf

    本程序涵盖了从监测业务的受理、合同评审、监测任务的下达、样品管理、监测前准备、监测过程、监测报告的编制、审核与批准,以及后续的报告发送、样品处理和相关记录的保存等多个环节。 1. **监测业务受理**: - ...

    环境监测微信小程序.rar

    环境监测微信小程序是一款专为环境监控设计的轻量级应用,它基于微信小程序平台开发,让用户无需下载安装即可使用,方便快捷。这款小程序的核心功能是实时展示环境数据,包括空气质量、温度、湿度、噪声等参数,有助...

    监测IIS应用程序池小工具

    标题中的“监测IIS应用程序池小工具”是指一个专门用于监控Internet Information Services (IIS)应用程序池状态的小型软件。IIS是微软公司提供的一款强大的Web服务器,它为各种网络应用提供服务,而应用程序池...

    基于微信平台的宠物监测小程序简化 (源码 + 说明文档 +演示视频)

    基于微信平台的宠物监测小程序简化 (源码 + 说明文档 +演示视频) 宠物监测小程序 (1)登录注册模块:用户可以注册登录自己的账号,查看个人信息和宠物信息,修改个人信息和宠物信息 密码修改等; (2)宠物信息...

    宠物监测小程序简化.zip

    针对人们对宠物缺乏精力照顾,以及传统动宠物代养不方便实时了解宠物的状态等问题,本文设计出一个包含宠物信息维护模块、健康监测模块的宠物健康监测小程序,以此帮助人们在忙于生活的同时,也能更好的实时了解自己...

    医疗监测程序VC++

    "医疗监测程序VC++" 是一个专为这一目的设计的软件应用,它利用贝泰监测硬件平台来获取和分析心电图(ECG)、血压和血氧饱和度等关键生命体征数据。该程序由C++编程语言开发,充分体现了VC++在系统级编程和高性能...

    监测鼠标键盘的小程序

    一个监测鼠标键盘的小程序,调试程序时,可以让你监测按下了那些按键,

    基于STM32+微信小程序设计的环境监测系统(完整源码套装).zip

    系统每隔一段时间会通过wifi自动发送到腾讯云物联网平台,在手机APP上或者微信小程序上都可以实时查看到温度,从而实现对室内环境的监测及报警功能。 上传到CSDN的项目资源,都会有一份完整项目设计文档和一份项目...

    基于51单片机的货车超重监测系统仿真设计 包含源程序及仿真文件

    4. **电源管理**:系统需要一个稳定可靠的电源,通常使用直流电源并配备稳压电路,确保在各种环境下都能正常工作。 此外,系统可能还包括串行通信接口,用于与上位机或其他设备交换数据,例如将超重记录上传至后台...

    基于TMS320F2812的电能质量监测装置程序

    同时,设计了9个功能键键盘程序,用户可以通过按键选择不同的监测模式或设置参数,增强了操作的灵活性。 此外,该装置还集成了MODBUS通信协议,这是工业领域广泛应用的一种串行通信协议,允许设备之间进行数据交换...

Global site tag (gtag.js) - Google Analytics