2010-11
19

略懂正则后

By xrspook @ 23:59:55 归类于: 烂日记

花费了好几个小时学习正则表达式(Regular Expression),简称regex。非常非常强大的一个程序员利器,在此,再次感谢SH童鞋的强迫性学习。在多种程序语言里正则都通用,用简单的符号却能组合出任何你需要的结果。看着那堆“\/#$&*^()_+|{}<>?=.”等实在会把人弄疯掉,再加上26个英文字母的大小写组合,宇宙就能编出来!这让我想起了大学时期老师教的文献检索,在说到英文数据库的时候就是这般*来?去的,但和相比,英文数据库的搜索方法只是个非常非常的简化版的正则,小儿科而已。

简单看了几个正则教程,最终觉得还是要自己打开个正则测试工具(如Windows下的Regex Tester)实操。

经过还不算太辛苦的挣扎,对TNA而言,我要提取的信息可以用以下正则实现:

(?<=href=”).*\.jpg.php

说明:“(?<=囧)”,定位在囧后;“href=””,一个字符串,也就相当于囧;“.*”,别以为“.”是连接符“*”是任意字符,恰恰相反,“.”代表除换行符以外的任意字符,“*”代表前面的东西,也就是除换行符以外的任意字符可以重复零次或更多次;“\.”,其实就代表了“.”,在正则里,“.”必须用“\”转义;“jpg.php”我的原意是一个字符串,但在正则里,看来“.”也不会被看作“.”,而代表一个除换行符以外的任意字符,也无伤大雅,毕竟我希望的“.”也在正则“.”包含的范围内。

除了用上面的“(?<=href=”).*\.jpg.php”以外,还能把正则改写为:

(?<=href=”).*\.jpg\.php /*把“.”全部正确转义,不打擦边球*/
(?<=href=”).*\b.jpg.php\b /*把“.jpg.php”看作一个单词,很自然地把其中的“.”一般字符化了,“\b”用于匹配单词的开始或结束*/

具体在YARK的正则是这般写的

preg_match_all('/(?< =href=").*\.jpg.php/', $data, $log);
囧囧囧囧
for($i=0;$i<count($log[0]);$i++) 
{  	
	<?php echo '囧'.$log[0][$i].'囧' ?>			
}

说明:由于我的正则表达式里只有一个未知数,也就是“.*”折腾出来的内容,所以,正则结果在新建的$log将是一个二维数组,具体内容将在[0][囧]里显示。如果,正则里有多个未知数,未知数就会分别出现在[0][囧0]、[1][囧1]、[2][囧2]等等里面了。得打一套“组合拳”才能把它们拼凑在一起。

正则搞定了,YARK的TNA瓶颈当然就没问题了啦!

******************* YARK专栏 *******************
2010-11-19
update
* 改进TNA功能,不再依赖页面提供的rss而是自编正则表达式,提取页面信息,再分析出图片地址
bug
* 暂无新发现
plan
* 留个门,对付任何规则资源(正则是强大的,就看你怎么用了)
******************* YARK专栏 *******************

自觉通过自学又提升一个矮矮的层次了。

2010-11
17

建立YARK日志

By xrspook @ 21:29:21 归类于: 烂日记

发觉很有必要建立一个YARK的日志,记录其成长,因为自己每天都有新发现,每天都在改进,不一一记录下来实在可惜,这可是很重要的版本信息哦!

******************* YARK专栏 *******************
2010-11-17
update
* 合并WWE和TNA生成功能,其实就是简单地用选择语法把2个页面的功能合并起来,操作起来很简单。其实一个开始为什么会分开呢?因为我懒,直接“另存为”就开始修改编写了。
* 增加了几句自动说明,比如说什么都没有的时候提醒要输入;输入了完全不搭调东西的时候提醒错误。
bug
* 突然发现TNA的自动rss只输出了25组信息,可恶!昨晚太兴奋,只看到有信息输出,却没有留意数量,rss的数量肯定是可以由TNA自己控制的,所以如果我完全依赖自动rss输出会很被动。
plan
* 要不寻找XHTML转XML的,要不直接直接提取XHTML为己用,对TNA的这种网页,我只能动作更多更主动了。
* 很懒的TNA用的是ZenPhoto RSS Generator的系统贴图和生成图片的RSS,噢~~~ 开源的哦,可以研究一下ZenPhoto然后再作对策。
******************* YARK专栏 *******************

与天斗、与地斗都不如与人斗有趣。

2010-11
16

激情与神经病

By xrspook @ 23:30:47 归类于: 烂日记

昨天19977里有人提出图片区可否增加TNA的官图,其实如果TNA不是BT的话,贴与不贴只是个习惯的问题,但是TNA的图片很BT,右键还不能保存的那种。

首先Photo Galleries使用的是近似框架形式的大概js手段,按链接是看不到网址改变的,不过,我的癖好是“在新标签页中打开”,打开后,网址又见变化了。这是第一个手段,算是很一般。

然后,重头戏,TNA的图片全部采用.php保护,所有图片的格式都被强制变成了***.jpg.php,Firefox下右键还不能保存到图片,保护严密。还记得之前2次PPV都把我害得几近手抽筋。

TNA的图片页面很是邪恶,但它给出了订阅按钮,也就是说页面是标准rss化的。rss意味着什么?rss就意味着XML,而且它的rss还是全部输出的类型,一页的rss就能输出整个系列的全部内容。刚刚熟悉了XML的格式化和信息提取,再次让我碰上新朋友,无比的兴奋。经过不太折腾的尝试后,也居然把从前的大敌TNA的图片给扯下马来了。内牛满面。

再次炫耀一下(WWE + TNA):http://xyark.serw5.com/

今天发现20101115RAW某些页面居然无法输出,研究了一个晚上,SH最后终于得出结论!title信息里有个“&”,格式化XML时受阻,因为“&”这东西太敏感了,是不允许当作“and”的意思出现的,所以会出现输出中断。解决办法如下:

/*$data = str_replace(“\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\t\r\n\r\n\r\n\t\r\n\r\n\r\n\t\r\n\r\n\r\n\r\n< ?xml version=\”1.0\” encoding=\”UTF-8\”?>”, “< ?xml version=\”1.0\” encoding=\”UTF-8\”?>”, $data); 注:第一个版本的YARK是不是很笨,呵呵呵*/
$data = str_replace(“\r\n”, “”, $data);
$data = str_replace(“\t”, “”, $data);
$data = str_replace(“&”, “&amp;”, $data);
// $data = str_replace(“&”, “囧”, $data); 注:对付“&”的一个“好”方法,先囧来
$data = XML_unserialize($data);
// $data = str_replace(“囧”, “&”, $data); 注:对付“&”的一个“好”方法,再囧去

感觉自己处于见人杀人,见鬼抓鬼的状态。这就是激情了,不过正因为这些变态的激情,让我神经病了。昨晚凌晨1点多才上床睡觉,还兴奋得睡不着。今天,也已经不早了,我还在写。

Pasion make me crazy, good or not?

2010-11
15

大爱大恨

By xrspook @ 22:39:35 归类于: 烂日记

自从捏造了YARK以后,告别了photolist.txt和PHOTOLIST.xls感觉好极了。1230..0321童鞋更是把YARK发挥到了极致——【图片组】CM Punk 2009年图片【338P】(注册才能看的)。从前,要贴338简直是天方夜谭,手都软了,但现在,那不过是秒杀的活儿。

有了YARK后,发觉大家也爱上贴图了,呵呵,真好。

今天下午去做该死的稻谷检验,为什么说该死的呢?首先,我讨厌稻谷,其次,那些活压根不该我们做,第三,在灰尘环境我的手该怎么办?无奈之下戴上了一次性的医用乳胶手套,戴了3个小时,在扯掉的时候发现问题大了,里面的手汗已经淋漓,更恐怖的是手汗和手套里面的爽粉之类的东西混合在一起,弄出一团团的白小球,恶心,必须得洗手。但偏偏水压不稳,水突然变大,我保持了接近2个星期不沾水的伤口终于被很不干净的自来水污染了!没办法,只能把手印干,然后以最快速回去找我的碘伏。本来已经很讨厌那些稻谷了,现在,更逼我成这样,我更讨厌它!!!!终于明白医院护士为什么都是先戴一双塑料手套再戴乳胶手套了!

不知要弄多久才能把那6个该死的稻谷样品全指标干掉。

有大爱,也有大恨。

2010-11
13

YOU ALREADY KNOW THAT

By xrspook @ 22:51:02 归类于: 烂日记

终于在SH的提醒和帮助下,在已经注册的几个国外免费空间里正常运行起YOU ALREADY KNOW THAT,我见简称YARK,按照首字母缩写应该是YAKT的,但误打误撞,变成YARK了,呵呵,YARK太短,所以注册的二级域名前加了我的戳“X”。正如YARK里的《h1》内容所标示:如果你是我的同伙,你会知道那空荡荡的网页是什么,怎么用;如果你想在这篇日志里直接找到答案,很对不起,在不跳转继续阅读某些链接的前提下,不可能。又或许,你真的很想知道,email我吧。至于我的联系方式,细心的你肯定already know that。

闪亮亮地放出一个YARK的地址:http://xyark.serw5.com/

很高兴地告诉大家,今天的YARK又实现了一个新的功能——直接把页面的title也输出了(并非各自的小title)!哇咔咔,如此一来,可以利用从RSS读到的地址完成某事,再也不用手动敲打某些代码了!

想变得懒惰欲望让我变得勤快。先花费一些时间制定规则,之后就可以拯救一些人的很多时间了。这就是程序的力量!!!!什么规范化管理,什么质量管理,如果你是个程序员,那些道理you already know that了。

说回YARK昨天没成功下海,原因是我完全是个PHP小白,所以碰得一头灰。通常,服务器基于安全考虑PHP的allow_url_fopen选项默认是OFF状态,免费空间通常都只会是OFF。而在PHP中需要使用file()[又或者file_get_contents()]函数获取其它站点的数据时,中招了,OFF状态就会出现一个“Warning: file() [function.file]: URL file-access is disabled in the server configuration in ***”的错误。幸好,我们还有第二招,cURL。在PHP程序里加入一段curl就能解决问题,但,这也是有前提是,curl是PHP的一个扩展库,所以,你的PHP系统的这个扩展功能必须处于enable状态,有些免费空间里curl是处于禁止状态的,那囧啊,不过确实存在,远在天边近在眼前的例子就是默认状态下的XAMPP。

也不管行不行了,把curl代码加进去试试再说,代码引用如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
< ?php
/*
* @return string
* @param string $url
* @desc Return string content from a remote file
* @author Luiz Miguel Axcar (lmaxcar@yahoo.com.br)
*/
 
function get_content($url)
{
	$ch = curl_init();
	curl_setopt ($ch, CURLOPT_URL, $url);
	curl_setopt ($ch, CURLOPT_HEADER, 0);
	ob_start();
	curl_exec ($ch);
	curl_close ($ch);
	$string = ob_get_contents();
	ob_end_clean();
	return $string;
}
 
#usage:
$content = get_content ("http://www.php.net");
var_dump ($content);
?>

实际应用时把http://example.com代替http://www.php.net作为数据输入,然后网址会经过function get_content($url)处理,进去的是一个网址,出来的是一个对网址所代表的网页信息进行处理后的字符串,也就是说,$content是一个包含所有网页信息的字符串,你喜欢怎么折腾就怎么折腾好了。至于那句“var_dump ($content);”是把$content的内容输出打印出来,你或许不会用到。不知为什么可以这么神奇,但就是这么神奇。PHP默认设置下不能实现的功能通过cURL就能实现,但实际上,最终效果是一样的。

再次感谢SH童鞋,也感谢那位写cURL挽救世人的巴西童鞋,是广大程序员让我感觉我是站在巨人肩膀上的。

也愿YARK能在它的用途上发光发亮。

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress