: | : | :期货程序化 | :期货程序化研究 | :期货量化学习 | :期货量化 |
返回列表 发帖

如何DIY一个全文输出的RSS订阅源

如何DIY一个全文输出的RSS订阅源

  1. 平时有过想法,不过技术一般,没有实现,上周在网上偶然发现一个朋友做的站点,就是全文输出的一些经典的网站和资讯贴。如获至宝,学了一周,同时多次麻烦大咖,终于在这两天成功学到基础的东西,可以做出一些基本的RSS全文订阅的资源来。这里说一下基本的原理。主要有两个文件,第一个是提取网页内容的PHP文件(一篇文章大体上可分三个内容:链接,标题与内容),第二个是将这提取的文件按RSS标准写出,并形成XML文件,以供订阅。
  2. 第一个文件:gethtml 是一个固定文件,平时几乎不用管它。
  3. 第二个文件:space文件是要修改的文件,它会将第一个提取出的文件转换成XML标准格式。平时主要修改的也就是这第二个了。
  4. 下面是部分源码:
  5. <?php
  6. include "gethtml.php";
  7. $regex_link = '#(?<=</a>] <a href=").+?(?=")#s';
  8. $regex_tit = '#(?<=<!--jrj_final_title_start-->)(.+?)(?=<!--jrj_final_title_end-->)#s';
  9. $regex_con = '#(?<=<div class="texttit_m1">).*?(?=<!--爱投顾 begin -->)#s';
  10. $header='<?xml version="1.0" encoding="gb2312"?><rss version="2.0"><channel><title>滚动新闻-金融街</title>';
  11. $footer='</channel></rss>';
  12. $html=gethtml('http://futures.jrj.com.cn/list.shtml');
  13. if(preg_match_all($regex_link, $html, $links)){
  14.   $size=10;
  15.   for($i=0;$i<$size;$i++){
  16.     $link=$links[0][$i];
  17.     $content=gethtml($link);
  18.     preg_match($regex_con,$content,$article);
  19.     preg_match($regex_tit,$content,$title);
  20.     $rss.='<item><title>'.$title[0].'</title><link><![CDATA['.$link.']]></link><description><![CDATA['.$article[0].']]></description></item>';
  21.   }
  22.   file_put_contents('list.xml',$header.$rss.$footer);
  23. }
  24. ?>

  25. 下面分析如何修改:
  26. 主要修改的是这么几个地方:
  27. $regex_link是提取超级链接地址,$regex_tit 是提取文章标题,$regex_con 是提取文章内容。后面是用正规则写的,不会可以在网上搜。具体说明一下:
  28. (1)=后面的''是一定要有的,要是列表里面地址用“”,要是列表里地址用‘’,最外面的就要用“”,这里全都是英文状态下的。说白就是单双引号一定要分开,要是列表的地址用单引号,这外面就得改为双引号。
  29. (2)##是正规则的表示,是告诉文件这里面是正规则内容。
  30. (3)?<= 是截取左边的地址的标志符,是不包括这些的。比方说 abcdefg  ,  要是写?<=bc  ,那么就是从d开始截取defg。同理?=就是截取时右边的字符结束位置,也是不包括这个字符的。比方说 ?=e ,就是截取到abcd
  31. (4).+?是从左边截取时第一个出现的右边的这个字符串为止这一段字符,比方说我这个网址: http://rssft.com   正规则 (?<=http://).+?(?=.com)  截取出来的就是rssft
  32. (5).+? 与.*? 这两个的区别,第一个是一个或很多,第二个是没有或很多。(.*?) 是懒惰匹配,一旦匹配到第一个就不往下走了。(.+?)是无限匹配直到最后一个。不懂的可以百度。下面是我写的金融街的一个提取正规则,地址:http://rssft.com/?thread-53.htm 可以好好理解一下各是什么意思。

  33. $regex_link = '#(?<=</a>] <a href=").+?(?=")#s';
  34. $regex_tit = '#(?<=<!--jrj_final_title_start-->)(.+?)(?=<!--jrj_final_title_end-->)#s';
  35. $regex_con = '#(?<=<div class="texttit_m1">).*?(?=<!--爱投顾 begin -->)#s';
  36. 然后是这里:
  37. $header='<?xml version="1.0" encoding="gb2312"?><rss version="2.0"><channel><title>滚动新闻-金融街</title>';
  38. XML的编码,要跟文章内容页的编码一致,要不的话会出现乱码。后面是这个XML的标题,改成自己的。
  39. 然后:
  40. $html=gethtml('http://futures.jrj.com.cn/list.shtml');
  41. 改成要做的那个列表地址。
  42. 最后:
  43. $link=$links[0][$i];
  44. 这个地址也是一个麻烦的地方。要是截取的是绝对地址,就按我上面写的,要是取的是相对地址,就要改一下,比方说取的地址是a.html  b.html 这时就要加上域名的地址。如下:
  45.     $link='http://rssft.com/'.$links[0][$i];
  46. 这样输出时地址就换成http://rssft.com/a.html   和http://rssft.com/b.html 了。

  47. 最最后说明一点是有些朋友可能做出的XML文件订阅时显示XML标题乱码,这是因为源地址列表与你保存的PHP编码不同导致的,要是列表是UTF-8,保存PHP文件时就可以用UTF-8,要是源文件是GBK ,GB2312 类似的,保存PHP时就要选择的语言是ANSI。一个小技巧吧。

  48. 到现在做好XML后就要放到网站上面了,要能支持PHP环境的网站,有IP地址或域名访问的。然后用第二文件地址打开,就生成并刷新XML了,将这个XML的网址加到订阅阅里面就能阅读了。平时隔段时间刷新那个PHP文件就能随时更新XML资讯了。两个途径,一是在服务器上面做定时计划,定时访问PHP文件,另一个是用这个网站,定时访问你的栏目php文件,地址:https://cron-job.org/

  49. 需要说明的是并不是所有的网站都能做的,有些网站编码乱的厉害,导致乱码一堆,有些网站模板也有好多,随机使用,也导致我们没法提取。
复制代码

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

返回列表