phpQuery 实战之 Vote Monitor

phpQuery是一款基于jQuery的PHP实现,项目主页http://code.google.com/p/phpquery/

phpQuery is a server-side, chainable, CSS3 selector driven Document Object Model (DOM) API based on jQuery JavaScript Library.

Library is written in PHP5 and provides additional Command Line Interface (CLI).(连命令行接口也提供)

phpQuery基于php5新添加的DOMDocument。

而DOMDocument则是专门用来处理html/xml。

它提供了强大xpath选 择器及其他很多html/xml操作函数,使得处理html/xml起来非常方便。

官网的函数列表 可见其复杂。所以,phpQuery是一个非常好的选择


对于html页面,不应该使用正则的原因主要有3个

1、编写条件表达式比较麻烦
尤其对于新手,看到一堆”不知所云”的字符评凑在一起,有种脑袋都要炸了的感觉。如果要分离的对象没有太明显的特征,正则写起来更是麻烦。

2、效率不高
对于php来说,正则应该是没有办法的办法,能通过字符串函数解决的,就不要劳烦正则了。用正则去处理一个30多k的文件,效率不敢保证。

3、有phpQuery
如果你使用过jQuery,想获取某个特定元素应该是轻而易举的事情,phpQuery让这成为了可能。


使用举例

:某老师要求我检测如下页面http://www.birminghamsciencecity.co.uk/homepage-features/great-minds-of-birmingham/great-minds-of-birmingham/

中Bob Stone的排名情况,有异常立刻通知她。

经过分析,实际上就是这个页面: http://polldaddy.com/poll/3680870/?view=results中的情况。

于是想到用php query来做,用张宴的fetion API来实现通知

代码如下:
[php]<html>
<header>
<title>Vote Monitor</title>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"/>
<script type="text/javascript">
setTimeout("self.location.reload();",10000);
</script>
</header>
<body>
<?php echo $showtime=date("Y-m-d H:i:s").'<br>';?>
<?php
include 'phpQuery-onefile.php';
phpQuery::newDocumentFile('http://polldaddy.com/poll/3680870/?view=results');
$peoples = pq('.main .results')->find('table');
$e=$c=$a=array();
//echo floatval('10.5%');
//exit;
foreach($peoples as $people){
$a = pq($people)->find('tr td');
foreach($a as $b){
$c[] = pq($b)->text();
}
}
$c=array_chunk($c, 3, false);
foreach($c as &$d){
$e[] = floatval($d[2]);
$d[2] = floatval($d[2]).'%';
}
array_multisort($e, SORT_DESC,$c);
//print_r($e);
//print_r($c);
echo 'Rank List<br />';
unset($k);
//好奇怪,这个$d必须释放,否则这个下面Paul Stewart就会丢,排在Paul Stewart前面的The team at Daden Ltd就会出现两次
unset($d);
$flag=0;
foreach($c as $k=>$d){
if ( $k == 0 && trim($d[0]) != "Bob Stone"){
echo '<font color="#FF0000">There Is a Warning Of Decreaseing</font><br>';
echo "Trying to inform You!<br>";
$flag=1;
}
if ( $flag == 1 && trim($d[0]) == "Bob Stone"){
$k=$k+1;
$re=file_get_contents('http://sms.api.bz/fetion.php?username=ooxxooxoox&password=ooxxooxoox&sendto=ooxxooxoox&message=warning%20of%20decrease%20the%20rank%20is%20'.$k);
echo "Notice have sent to You!<br>";
}
echo '===========<br>';
foreach($d as $display){
echo $display.'<br>';
}
}
?>
</body>
</html>[/php]
在线演示Demon:请允许弹出窗口

Author Info :
  • From:phpQuery 实战之 Vote Monitor
  • URL:https://blog.ihipop.com/2010/09/1413.html
  • Please Reserve This Link,Thanks!
  • 发表回复

    您的电子邮箱地址不会被公开。 必填项已用 * 标注