码迷,mamicode.com
首页 > 微信 > 详细

微信开发自动回复百科内容(百度百科已经失效,现在用互动百科)

时间:2015-08-18 15:42:33      阅读:379      评论:0      收藏:0      [点我收藏+]

标签:

 1               switch($keyword){
 2                             default:                
 3                         include(get_baike.php); 
 4                                 $data = getEncyclopediaInfo($keyword); 
 5                                 if($data[0][Title]){
 6                                     $contentStr=$data[0][Title]."\n";
 7                                     $contentStr.=$data[1][Title]."\n";
 8                                     
 9                                 }
10                                 else{
11                                     $contentStr="抱歉,没有找到与“".$keyword."”相关的百科结果。";
12                                 }
13                           $this->weixin_output($contentStr,$textTpl,$fromUsername,$toUsername,$time);
14                                 break;


get_baike.php

 1 <?php 
 2 function getEncyclopediaInfo($name){ 
 3   //$name_gbk = iconv(‘utf-8‘, ‘gbk‘, $name); //互动百科的网页编码为utf-8所以我们就省去这一行。可直接删除 
 4   $encode = urlencode($name); //对字符进行URL编码,不然会出现乱码。 
 5   $url = http://www.baike.com/gwiki/.$encode;  //这行是我们输入的内容将在这个网页上进行内容采集 
 6     echo "url is $url <BR>";
 7   $get_contents2 = httpGetRequest_baike($url); //直接获取网页内容,我们省去了多行代码,因为$url己经是最终需要采集的网页了。 
 8 //    echo htmlspecialchars($get_contents2);
 9 
10   preg_match(#\<div class="baiketitl"\>([\s\S]+?)(\<div id="custom_xinxi|\<div id="content"\>)#is, $get_contents2, $matchresult); //截取要采集的内容从<div class="baiketitl">开始到<div id="custom_xinxi或者<div id="content">结束。([\s\S]+?)为正则表达式。| 是或者的意思。为什么是<div id="custom_xinxi或者<div id="content">呢,因为我们只采集百科的简介部分。从网页源码我们可以看到。简介的部分是从<div class="baiketitl">到<div id="custom_xinxi结束,但是有一种情况是,没有简介,只有一个基本信息,那么我们就无法从源码里找到<div id="custom_xinxi,所以就会出错,但它会有一个基本信息,而它的结束为<div id="content"> 
11     echo "<Pre>";
12     print_r($matchresult);
13     echo "</pre>";
14     $bt = cut($matchresult[1],<h1>,</h1>,false,false); //$matchresult[1]为采集内容字符串。从这个内容中采集出百科的标题赋值给$bt变量.  $img = cut($matchresult[1],‘<img src="‘,‘"/>‘,false,false);//取出图片的链接,因为互动百科都有配图,所以这一步就轻松搞定。 
15     $nr = cut($matchresult[1],</div><p>,</p>,false,false);//取出百科内容,从源码可以看到内容从</div><p>开始到</p>为一个段落的结束,由于微信只能接收2000个字以内,所以我们就直接取最一段的内容。 
16     if(!trim($nr)){
17         $c2=str_replace("<h1>$bt</h1>","",$matchresult[1]);
18         $nr = strip_tags($c2);
19         $nr = str_replace("\n","",$nr);
20         $nr = str_replace("&nbsp;","",$nr);
21         $nr = str_replace("\r","",$nr);
22     }
23     echo "title is $bt<BR>";
24     echo "contnet is $nr<BR>";
25     $content[] = array("Title" =>$bt,"Description" =>"", "PicUrl" =>$img, "Url" =>"");//配置微信接收格式。单图文 
26     $content[] = array("Title" =>$nr, "Description" =>"", "PicUrl" =>"", "Url" =>""); 
27     if (isset($bt) != ""){//判断$bt有没有被赋值,如果不为空就输出内容,如果为空就是没有采集到内容就输出没有找到相关百科结果。 
28       return $content;  //直接输出内容。 
29     }else{  //否则 
30     return ""; 
31   } 
32 } 
33 //以下这个函数对于新手非常有用。因为截取内容只需要将字符前后的内容填入就可以了,不需要用到正则表达式。 
34 function cut( $from, $start, $end, $lt = false, $gt = false ) 
35  { 
36     $str = explode( $start, $from ); 
37     if ( isset( $str[1] ) && $str[1] != "" ) 
38     { 
39    $str = explode( $end, $str[1] ); 
40     $strs = $str[0]; 
41     } 
42     else 
43     { 
44     $strs = ""; 
45     } 
46     if ( $lt ) 
47     { 
48     $strs = $start.$strs; 
49     } 
50     if ( $gt ) 
51     { 
52     $strs .= $end; 
53     } 
54     return $strs; 
55   } 
56 //以下这个函数原封不动。主要的作用应该就是告诉目标站,我们是从百度过来看你的,你不要屏蔽我哦。谢谢!可以用到其它地方。 
57 function httpGetRequest_baike($url) 
58 { 
59   $headers = array( 
60     "User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1", 
61     "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
62     "Accept-Language: en-us,en;q=0.5", 
63     "Referer: http://www.baidu.com/" 
64   ); 
65   $ch = curl_init(); //初始化 
66   curl_setopt($ch, CURLOPT_URL, $url);//设置选项 
67   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
68   curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);// 
69   $output = curl_exec($ch); 
70   curl_close($ch);//释放句柄,不然很占内存 
71 
72   if ($output === FALSE){ 
73     return "cURL Error: ". curl_error($ch);//这是检查错误的  
74   } 
75   return $output; 
76 } 

 

微信开发自动回复百科内容(百度百科已经失效,现在用互动百科)

标签:

原文地址:http://www.cnblogs.com/qianzhiyan/p/4739188.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!