知乎日报搜索小应用

博主每天都要刷知乎日报,感觉里面的内容很不错,但是有时候看到的文章并没有收藏,下次再找的时候十分不方便,这里做一个简单的小网页来提供知乎日报的搜索功能。

先放上网站链接:知乎日报搜索

前端样式比较丑,后期有时间进行改进。

一 抓取知乎日报内容

网上之前有调用http://zhihudaily.ahorn.me这个接口来返回知乎日报文章url,后来发现接口已经不可用,经过查找,发现可用的三个接口,还比较方便:

http://news-at.zhihu.com/api/3/news/latest  #获取最新消息

http://news.at.zhihu.com/api/3/news/before/20170401  #获取以前的消息,before后面要加日期

http://news-at.zhihu.com/api/3/news/  #获取指定消息,news后面加消息ID

后面的事情就好说了,随便写个爬虫,从2013年开始,抓到目前为止的所有内容,这里返回的都是json数据,更好处理。

二 使用sphinx作为中文搜索引擎

Sphinx的安装和使用

如果建立索引的时候报错,可以用一下参数:

/usr/local/sphinx-for-chinese/bin/indexer –all –rotate

三 搭建一个php代理处理图片盗链

把图片url抓取之后,发现知乎做了反盗链,图片没法直接显示,最后搭了简单的php代理,通过后端get_file_contents($image_url),或者通过curl设置referer, 请求原始图片数据echo 出来返回前端,这样就解决了知乎的反盗链。但是服务器需要下载和展示图片,流量会是原来的2倍,对于预算不足的服务器可能不太值当。另外可以把图片下载后放到微博的图床上,获取微博的未防盗链的图片,这样对服务器的性能会更好!


//防止别人用我的接口,这里判断refer,只有自己网站可用
if(isset($_SERVER['HTTP_REFERER']) && (strpos($_SERVER['HTTP_REFERER'], 'http://zhihu.dadaaierer.com/') !== 0)) {
return;
}
if(!isset($_GET['url']) ||empty($_GET['url'])) {
return;
}
echo file_get_contents($_GET['url']);

文章中的img url通过


preg_replace('/src=\"(.*)\"/', 'src="http://zhihu.dadaaierer.com/site/url?url=$1"', $tmp['content']);

替换,即可展示文章的图片。

957892883d1c4b6e7f469c69c4b2af6e

如图,搜索今日知乎日报小姐姐之后的结果。

PS:由于博主是单核1G阿里云服务器,图片请求全部打到php做的代理上已经出现扛不住,链接超时报502的错误,博主已经修改了php-fpm的默认max_children,希望近期能扛得住。

[php5.6]php扩展开发入门–helloworld

 

首先需要下载php源码

1,生成扩展骨架 php-5.6.30/ext$ ./ext_skel –extname=helloWorld
同时产生操作步骤
1. $ cd ..
2. $ vi ext/helloWorld/config.m4
3. $ ./buildconf
4. $ ./configure –[with|enable]-helloWorld
5. $ make
6. $ ./sapi/cli/php -f ext/helloWorld/helloWorld.php
7. $ vi ext/helloWorld/helloWorld.c
8. $ make

2,vim config.m4
把第10-13行
PHP_ARG_WITH(helloWorld, for helloWorld support,
Make sure that the comment is aligned:
[ –with-helloWorld Include helloWorld support])
注释dnl去掉

132b2005134ec7d02ac7b8137212d5c3

3,./buildconf –force
4,./configure –with-helloWorld
5 make 可选
6,进入到扩展vim helloWorld.c
修改144-147行
照着添加一个方法定义
PHP_FE(helloWorld, NULL)

同时添加一个实现
PHP_FUNCTION(helloWorld)
{
char *arg = NULL;
int arg_len;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, “s”, &arg, &arg_len) == FAILURE) {
return;
}
RETURN_STRINGL(arg, arg_len, 0);

}

7 正常的添加扩展步骤
1)phpize
2)./configure –with-php-config=/home/users/wangchunwei/php/bin/php-config
3) make
4) make install

 

剩下的步骤就是配置php.ini的扩展,添加helloWorld.so。之后调用helloWorld(“string”)方法,亲测可用!

蔬菜水果价格走势图

本周一直在学习新的东西,虽然学习了很多,但大多是公司内部的资料。就把上周做的蔬菜水果查询图放出来。链接http://www.dadaaierer.com/fruit/

9703c312-e42d-4edc-a638-4c3eb422d05f

应该是从13年到现在每天的大众蔬菜和水果的价格图。如果筛选苹果会出:国光苹果等多个种类,还是选择一个开始查看。

原理很简单:每天爬新发地的蔬菜价格入库,然后展示。

前端使用的是百度出品的echarts JS插件。采用异步请求的方式。

感谢http://er.dadaaierer.com/对前端工作的支持!