博主每天都要刷知乎日报,感觉里面的内容很不错,但是有时候看到的文章并没有收藏,下次再找的时候十分不方便,这里做一个简单的小网页来提供知乎日报的搜索功能。
先放上网站链接:知乎日报搜索
前端样式比较丑,后期有时间进行改进。
一 抓取知乎日报内容
网上之前有调用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作为中文搜索引擎
如果建立索引的时候报错,可以用一下参数:
/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']);
替换,即可展示文章的图片。
如图,搜索今日知乎日报小姐姐之后的结果。
PS:由于博主是单核1G阿里云服务器,图片请求全部打到php做的代理上已经出现扛不住,链接超时报502的错误,博主已经修改了php-fpm的默认max_children,希望近期能扛得住。