目前笑话主要存在于一些门户或者专业的网站,可以使用爬虫程序将其采集下来,然后保存在本地数据库中。
笑话数据库建表的SQL脚本内容如下。
CREATE TABLE IF NOT EXISTS 'joke' ( 'id' int(5) NOT NULL AUTO_INCREMENT, 'content' varchar(600) NOT NULL, PRIMARY KEY ('id')) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=1001 ;INSERT INTO 'joke' ('id', 'content') VALUES(1, '她:"因为别人都不同情你,我才做你的妻子。"他:"你总算成功了。现在每个人都因此同情我。"'),(2, '女:"为什么从前你对我百依百顺,可结婚才三天,你就跟我吵了两天的架?"男:"因为我的忍耐是有限度的。"');
该表包含两个字段,id和content。其中,id表示序号,content为笑话内容。另外,还使用INSERT命令插入了两条记录。更多的记录读者可以在本书配套的源码中找到并将该数据文件导入到数据库中,这样就在本地服务器上实现了一个小型笑话库。
在数据库中查询笑话内容的代码如下。
1 function getJokeInfo() 2 { 3 if(isset($_SERVER['HTTP_APPNAME'])){ // SAE 4 $mysql_host = SAE_MYSQL_HOST_M; 5 $mysql_host_s = SAE_MYSQL_HOST_S; 6 $mysql_port = SAE_MYSQL_PORT; 7 $mysql_user = SAE_MYSQL_USER; 8 $mysql_password = SAE_MYSQL_PASS; 9 $mysql_database = SAE_MYSQL_DB;10 }else{11 $mysql_host = "localhost";12 $mysql_host_s = "localhost";13 $mysql_port = "3306";14 $mysql_user = "root";15 $mysql_password = "root123";16 $mysql_database = "weixin";17 }18 19 $mysql_table = "joke";20 $id = rand(1, 1000);21 $mysql_state = "SELECT * FROM '".$mysql_table."' WHERE 'id' = '".$id."'";22 $con = mysql_connect($mysql_host.':'.$mysql_port, $mysql_user, $mysql_pass word);23 if (!$con){24 die('Could not connect: ' . mysql_error());25 }26 27 mysql_query("SET NAMES 'UTF8'");28 mysql_select_db($mysql_database, $con);29 $result = mysql_query($mysql_state);30 31 $joke = "";32 while($row = mysql_fetch_array($result))33 {34 $joke = $row["content"];35 break;36 }37 mysql_close($con);38 return $joke;39 }
上述代码解读如下。
第3~17行:定义数据库环境变量,此处判断程序运行环境是SAE还是本地服务器环境,分别定义不同的环境变量。
第19~21行:构造了执行查询的SQL语句,从表“joke”中随机查询一条记录。
第22~25行:进行数据库连接。如果连接失败,将执行“die”部分。
第27行:设置字符集为“UTF8”,以便正常显示中文。
第28行:设置活动的MySQL数据库。
第29行:使用mysql_query()函数向MySQL发送命令。
第31~36行:将查询到的结果存在变量中。
第37行:关闭数据库连接。
第38行:返回查询的内容。
一个微信查看笑话的功能如图4-21所示。
图4-20 微信天气预报
图4-21 微信查看笑话