2011-07
8

双龙出海

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

今天是个伟大的日子,今天我做了两件貌似简单但实际上都不容易的事情:一、用电子琴录制了Realeza(WWE Alberto Del Rio Theme 2010)并用WIDI生成了MIDI版本;二、努力奋战、冥思苦想2天后,我终于达到了我的目标,完成了大名鼎鼎YARK系列的P25 PHP小程序。

所以,对我来说,这是划时代的一天,心情大好!

一、音乐部分

几个月前我就已经挖出家里的古董电子琴(小学时期的产物)来折腾Realeza了。一般熟练,但我只会右手,和弦对我来说是浮云,正如听音乐我只能辨别出主旋律一样。我一直在奢望自己能学会哪怕一点点左手,但电子琴的变压器不行,大号电池的电量也快没了,我得在电子琴还有声音之前赶快完成录制。

以下是xrspook极其简陋的两个自创版Realeza,请凑合着欣赏:

Realeza(WWE Alberto Del Rio Theme 2010)电子琴版[mp3]

Realeza(WWE Alberto Del Rio Theme 2010)WIDI转化MIDI版[midi]

说明:mp3就是拿着个mic对着电子琴录制的,没啥好说,请原谅我的古董电子琴没有跟电脑对接输出的玩意,毕竟那是1998年以前的产物啊,还只是386、486时代呢。midi嘛,不是我自己写的,是用WIDI把mp3转出的,因为是毋庸置疑的“独奏”,所以捕捉到的绝大多数音都是我的意图,但有几个高音电脑识别出来时一个变2个,没搞懂原因,但错有错着,恰逢那是高潮部分,出现这些我意想不到的小变动反而让音乐更丰满。

二、PHP程序部分

从有思路到PHP完全成型,我用了2天,超过15个小时!累着并快乐着!我这个喜欢折磨自己的人……这不能算折磨,这应该说是定下目标然后努力实现,I’m proud of myself.

先说说这个YARK – P25的整体思路,昨天已经说过,也就是“用正则提取,table输出,然后直接Excel粘贴保存”。昨天傍晚说到,我被正则难住了,但昨天晚上,我却突然惊醒地想出了正解。在WWE P25层层div的网页里成功提取出我需要的排名部分。用的是这条正则,针对的是我需要提取信息的开头和结尾部分做筛选。

1
preg_match_all('/< div class="row(.|\n)*?<div class="clear">/', $data, $log);

这条规则是很有针对性的,可以把WWE P25页面我需要部分嵌套的div全部提取出来,但对其他嵌套div网页无效。这条规则的重点是“(.|\n)”意思是“除换行符以外的任意字符或者换行符”,也就是全包围了。从前提取img的时候“.*?”也就足够了,但提取div不一样,因为换行是习惯性的,之前我正是在换行这个问题上被卡住,看到某个网页的时候被这句很创意的“(.|\n)”激发,最终,琢磨出我的第一次正则。

筛选出的排名部分网页源代码包括神马呢?以下是详细说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<div class="row none"> /* WWE P25页面里,一个选手的所有信息的开始,这里的class可能是row none、row fire、row ice或row (注意row后的空格)*/
	<div class="info dir-up"> /*这里的class可能是info dir-up、info dir-dn或info dir-nm,升降平,你懂的*/
		<div class="direction"></div> /*配合升降平的一个说明*/
		<div class="thisweek"></div> /*本周排位,我需要的第一个信息点*/
		<div class="lastweek"></div> /*上周排位,如果我把每周排位都收集了,某一周的上周排位对我来说当然没啥意义*/
	</div> /*info dir-up结束*/
	<div class="thumb"> /*小头像部分,这里没有我需要的信息*/
		<a href="***"></a><a href="***" class="imagecache imagecache-98x105_thumb imagecache-linked imagecache-98x105_thumb_linked"><img src="***" alt="" title=""  width="98" height="105" /></a> /*用了两层超链接,没搞懂为什么,外层没有class,内层有class,核心部分是小头像图片img,注意,有些选手是没有超链接的,比如说那些Tag Team*/
	</div> /*thumb结束*/
	<div class="thumb_none"> /*这里可能是thumb_none、thumb_ice、thumb_fire或thumb_,对应头像无特效、冰、火以及无头像状态*/
	</div> /*thumb_none结束*/
	<div class="details"> /*选手信息*/
		<h2 class="double-arrow-title"> /*二级标题开始*/
			<a href="***">***</a> /*选手名字+超链,选手名字是我需要的第二个信息点*/
		</h2> /*二级标题结束*/
		<div class="text">***</div> /*这周发生了神马事,我需要的第三个信息点*/
	</div> /*details结束*/
	<div class="clear"></div> /*纯粹的网页需要清浮处理 */
</div> /*row none结束*/

这段内容重复25次就是一个P25的完整排名信息。

第一次正则只是个开始,是把偌大一个网页的信息进行初步挖掘。其实也不能算一个网页,自从WWE 2011年头改版后,网页构成发生了巨大变化,比如说到处都有“LOAD MORE”的标志,你必须点击才能看更多内容,以P25的页面为例,我们看到的是:

http://us.wwe.com/inside/power25

但实际上,一共需要载入5个页面才能看到全部25个排名:

http://us.wwe.com/inside/power25
http://us.wwe.com/inside/power25?page=1
http://us.wwe.com/inside/power25?page=2
http://us.wwe.com/inside/power25?page=3
http://us.wwe.com/inside/power25?page=4

每个页面只有5个排名。这也就能解释为什么浏览WWE网页的速度会比从前快了,因为一次性加载的信息减少,信息加载随着浏览进程的推进而逐步增加,对于那些纯粹路过的人来说省事多了。

这5个页面的结构是一样的,对我这个需要提取信息的人来说WWE的这个“改进”完全是件坏事!一开始,我是这样提取页面信息的:

1
2
3
4
5
6
7
8
9
$data0 = get_content($_POST['url'])$data1 = get_content($_POST['url']).'?page=1'$data2 = get_content($_POST['url']).'?page=2'$data3 = get_content($_POST['url']).'?page=3'$data4 = get_content($_POST['url']).'?page=4';
 
/*经历N步操作,N步操作的工作量都是×5,我甚至都在考虑要不要来个for语句来减轻修改数字的压力了*/
 
$data = array_merge($data0[0], $data1[0], $data2[0], $data3[0], $data4[0]);

但后来,我发现完全可以这样嘛:

1
$data = get_content($_POST['url']).get_content($_POST['url'].'?page=1').get_content($_POST['url'].'?page=2').get_content($_POST['url'].'?page=3').get_content($_POST['url'].'?page=4');

如此一来,5个页面的信息也就能一次性地聚合到一起,快、准、狠!

我好像扯远了,回到第一次正则提取的内容。我昨天的思路是对其进行XML数组化,但很遗憾,XHTML网页不是XML,当信息传入外包的XML数组化程序时失败告终。于是,我就只能靠自己继续正则了。

上文已经提到,在第一次正则后的内容里,我有3个需要提取的信息点,它们分别是:

1
2
3
<div class="thisweek"></div> /*本周排名*/
<h2 class="double-arrow-title"><a href="***">***</a></h2> /*选手名字*/
<div class="text">***</div> /*发生事件*/

一次正则后选手名字里有超链,头像里也有超链,“h2”本是选手名字的唯一标记,但由于中间多了个超链,万恶,所以,我也很万恶地一句正则把我不喜欢的东西全部干掉。

1
$log[0] = preg_replace('/< a [^>]*>|< \/a>|<img [^/>]*>|\t|\r|\n/', '', $log[0]);
1
2
3
< a [^>]*>|< \/a> /*干掉所有超链*/
<img [^/> /*干掉所有图片*/
\t|\r|\n /*干掉所有制表符、回车和换行符*/

二次正则过后,提取内容变得简洁。

必须提醒:在PHP里正则针对的都是字符串,所以,如果源数据已经是数组的话,请自行拆解。否则会报错,并且会暴露出当前运行脚本的完整路径,这可是安全性的问题啊,详见这里

然后呢,因为一次正则我只提取到< div class="clear">显然后面仍应该有< /div>< /div>

才能让这个提取内容闭合完整。所以我加了这么一句:

1
$log[0] = str_replace('< div class="clear">', '<div class="clear"></div>< /div>', $log[0]);

到此为止,经过2次正则,1次字符串替换后,那坨东西符合我要求了,我可以进行第3、4、5次正则完成我的最终提取。

1
2
3
preg_match_all('/< div class="thisweek">([^< ]*)/', $log[0][$i], $rank[$i]);
preg_match_all('/<h2[^>]*>([^< ]*)/', $log[0][$i], $name[$i]);
preg_match_all('/< div class="text">([^< ]*)/', $log[0][$i], $text[$i]);

好吧,到此为止,整个分析、剥离过程完满结束,就只剩下按要求的规范化输出。就是把我提取到的东西table化,略。

整个过程的部分源程序如下:

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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;
}
 
/*数据传入开始*/
 
$_POST['url'] = str_replace("www.wwe.com", "us.wwe.com", $_POST['url']);
$data = get_content($_POST['url']).get_content($_POST['url'].'?page=1').get_content($_POST['url'].'?page=2').get_content($_POST['url'].'?page=3').get_content($_POST['url'].'?page=4');
 
/*数据传入结束*/
 
/*正则提取及替换开始*/
 
$data = str_replace("&amp;", '&', $data);
preg_match_all('/<div class="row(.|\n)*?<div class="clear">/', $data, $log);
$log[0] = preg_replace('/< a [^>]*>|< \/a>|<img [^/>]*>|\t|\r|\n/', '', $log[0]);
$log[0] = str_replace('< div class="clear">', '<div class="clear"></div></div>', $log[0]);
 
for($i=0;$i < count($log[0]);$i++)
{
	preg_match_all('/<div class="thisweek">([^< ]*)/', $log[0][$i], $rank[$i]);
	preg_match_all('/<h2[^>]*>([^< ]*)/', $log[0][$i], $name[$i]);
	preg_match_all('/<div class="text">([^< ]*)/', $log[0][$i], $text[$i]);
}
 
/*正则提取及替换结束*/
 
/*table格式化开始*/
 
echo '< table>< col>';
for($i=0;$i < count($log[0]);$i++)
{
	echo '<tr>';
	echo '<td>'.$rank[$i][1][0].'</td>';
	echo '<td>'.$name[$i][1][0].'</td>';
	echo '<td>'.$text[$i][1][0].'</td>';
	echo '';
}
echo '';
 
/*table格式化结束*/

截图是必须的

这就是YARK – P25的威力!你或许会问,就那么一大坨东西有神马用呢?呵呵,真正用法需要把它们贴到Excel。

关于复制那一大坨信息的Excel粘贴也有讲究。

首先,打开Excel,然后选择“编辑 – 选择性粘贴”,然后在“方式”里选择“文本”,按“确定”。最后简单调节表格列距以及单元格格式后,你就能得到如下图的效果:

你一定会问,为神马要如此折腾“粘贴”而不用“Ctrl+V”?呵呵,这和我的用途有关,你完全可以在“选择性粘贴”里用默认的“HTML”方式,结果跟直接用“Ctrl+V”一样,所有粘贴数据都全部挤在1个单元格里,这显然不符合我的设想,如果最后得出这样一个结果的话,我之前所做的事情都白费了。

为什么一定要以现在这个各信息分离的Excel形式呈现呢?因为,我做这么多事情的目的就是能更快更直接地提取我需要的信息,做P25的每周统计。

统计!统计是我的目的!!!!

还记得2天前我做的“ADR前46周的WWE P25”?那可花费了我半天的时间打开一个个网页,一段段信息复制粘贴并最终形成图表。如果,我要对WWE所有选手都这般干的话简直是天方夜谭,但我的确想获取那些信息,知道那个趋势,该怎么办呢?所以我有了弄YARK – P25的念头,并付诸行动,最终华丽地成功了!

YARK – P25在此!聪明的你肯定知道怎么用的。

往后,随着icon化的日益加剧,我真的可能不再看WWE的摔角而转投其他联盟,但我会记住WWE的,不单是因为他们把我引入摔角门,更重要的是为了提取信息,我从他们的网页我自学到了很多,他们的网页严谨规范,虽然可能不是最好的,但我已经从中领会到很多,难道这还不够么?!

哇咔咔,今天的blog很技术,有心人,你们会懂的。

2011-06
10

8,你们好

By xrspook @ 22:48:21 归类于: 烂日记

哇咔咔,今天终于有时间复习我的统计,感觉比上课的时候好,复习完一部分就拿出2006-2008年的题目来做,感觉非常好,但多选题还是死穴,提醒吊胆地。这需要我继续去啃和习惯。

回到家里,8样东西已经在昨天送到。列队如下:

其中

有4个拉美作家:马里奥·巴尔加斯·略萨[秘鲁]、加西亚·马尔克斯[哥伦比亚]、豪·路·博尔赫斯[阿根廷]、科塔萨尔[阿根廷]。

有6个出版社:上海译文出版社、人民文学出版社、南海出版公司、浙江文艺出版社、花城出版社、山西人民出版社。

好吧,其实这都已经不是我看到他们的第一反应了,我的第一反应是啥?@xrspook有写,自引如下:

《酒吧长谈》是本字典级的书,566页啊老天!信不信由你,这书卓越才卖22.9元 – 今天 20:12 来自微博AIR

2008年原来浙江文艺出了豪尔赫·博尔赫斯的作品系列,浙江文艺的书一直出得很有味道很朴实且价格公道,我喜欢 – 今天 20:09 来自微博AIR

终于买全了上海译文的米兰·昆德拉系列作品,显然,第二版的价钱是第一版(约2003年)的2倍或以上,但纸的质量差了,连书签都坑没了,不厚道 – 今天 20:06 来自微博AIR

《性别战争》真是本Y书,连书页的边都是yellow的 – 今天 20:02 来自微博AIR

感觉,新经典打算或者已经把加西亚·马尔克斯13部主要作品的版权买下来,非常豪爽的一个公司! – 今天 20:01 来自微博AIR

痛恨三世书封皮的胶水!!!!结果,我毁掉了一个封皮才打开了包装…… – 今天 19:59 来自微博AIR

我为什么喜欢浙江文艺?以下图片是《恶棍列传》的书签,太有特色了!

虽然博尔赫斯的书并不让我心动,甚至让我觉得有点难懂,但为了浙江文艺出的这么一套漂亮的书(《恶棍列传》的封皮很有味道,这个出版社通常不会套N层套子,但封面设计给人用心的感觉),我很有冲动把这个系列8本收下。博尔赫斯是拉美文学大师中的大师,我尝试着理解过,但很高深,非常高深……

拥有是兴奋的,分享也应该是兴奋的,很坏地把东山少爷的三世书“克隆”了出来,但u115却不给力,已经上传了一个晚上了,依旧是失败,巨囧!不是一般的折磨人。这有u115的错也有电信的错,因为晚上高峰期,抽风是习惯性真理性的事。看来这个压缩完后93MB的320Kbps共12首歌的CD分享今晚是没戏的了。

每当我疯狂购书的时候妈就会说:“你的书哪有地方放啊~~~” 我已经成了一个有收藏书癖的怪物,既然吃并不能让我痛快,或者说永远都不能胡来了,精神生活是我最后的挥霍之地。虽然,我的房间已经有2个书柜,但还是被塞满了,但那又怎样呢,总会有路的。

昨天自从看了某MV后,不停地在听Chris Medina的What Are Words,虽然很飙音,虽然我不会假音,但昨天听了2次后我情不自禁地跟唱了,即便吼得很恐怖,从Chris Medina开声的那一下,我知道我是迷上这首歌了,毫无疑问地。你不能不为那有点沙沙的声音动容,而音乐的故事更是让人内牛满面。太多的仇恨,太多的吐槽,太多的争斗,被单纯的爱感动一下真好。

Chris Medina – What Are Words(7.15MB 320Kbps,mediafire下载,希望大家能上MF

开心,被感动,其实不难。

2011-06
3

统计培训第一天

By xrspook @ 20:58:42 归类于: 烂日记

今天是统计从业资格考试培训的第一天上课,感觉环境没有我想象中的糟糕,空调还是够力的,椅子桌子都也还好,老师比从前某些所谓叫兽好多了。无论语速还是条理性,尤其是各个重点都讲得很到位。不过,一上课就是一天,一天就是近6个小时,要上8天的课,弱弱的等于48个学时,汗!8天完成在校学生1个学期的课,够苦闷的。

开始,我完全没有把这些文字性的东西放在眼里,但显然,我大错特错了,练习题一出来,问题大,问题非常大!也不知道是教材编得太简单还是试题来得太灵活,反正,我是一身冷汗。没有这般没底过,读了那么多年的书都没有如此没底过,摸棱两可的答案比比皆是。绝对不可以把这东西小看,否则可真会被搞倒。好久好久都没有试过如此认真的听课,因为你走神几秒钟都划不来。

今天有个信息确认的环节,其中有一项是“单位所属区”,我汗了,我的单位难道要写“东莞麻涌”?确认的时候,惊讶地发现我的居然是写“省直单位”,绝!如此牛X的称呼。

中午在西华路晃悠着找饭吃,发现有间“黄师傅”,毫不犹豫地进去吃最简单的濑粉,然后又到超市里买了罐雀巢特浓咖啡,加上早上便利店买的矿泉水,一天下来光吃喝用了9.5元,这算很便宜了。因为正常来说吃一个午饭超过10元再正常不过。时代在变,物价在飞涨,唯独这个统计从业资格培训48学时的课才收360元!真赚大了!有政府补贴的东西非同一般。

往后上课都在星期三,得发愁星期二晚上如何回广州。

事情总不可能一直都完美。

2011-05
20

完成了两大任务

By xrspook @ 22:53:09 归类于: 烂日记

今天完成了两件很重要的事:

一、完成统计从业资格考试的报名

统计局3月下的文件,总公司4月底转发到我的单位,领导很紧张,因为当时已经是四月最后一个星期了,然后跟我说五一回来就要去报名,但实际上呢,一拖就是大半个月,好了,终于我抓到机会了,主动出击提出要报名,领导除了同意还能干啥。有点紧张,因为那个文件只有开始日期没有结束日期,都快2个月了,担心报名已经截止。也不知道到底要交多少钱,因为文件和网络上都没说要交多少考试费,只有一个培训费,摊手。

地图上看那个地点应该是康王路和西华路的交界附近,我在东风西路下车,很简单就走到了那个位置,但那个捶帽新街,我走了一整条西华路(从康王路这头走到人民路那头)都没找到,囧,这起码是1个半公交站的距离。无奈,只能往回走。结果,在接近康王路口的地方,我找到了那个传说中的地点,巨汗!!!!西华路上没有任何指示,在一个阴暗的貌似停车场出口的地方挂了很多牌子,继续汗。上到三楼,好一个热火朝天的地方,其中2个教室正在“热烈”地上课(实际上是老师在努力地吼,阿姨大叔们在下面自由地谈)。报名很简单,就是交资料,然后到隔壁交钱。没有说报名费是多少,但默认你得参加培训。哈,也就是说考试是免费的?如果我不需要任何培训和资料?!不过,说真的,如果不是工作需要,谁会来混这个证,所以,他们很懂的,发票是非常必须的玩意。真恐怖,40的材料费,360的培训费,哇,要上8-9天的课,每周占用一个工作日的时间,五月底开始。老天啊~~~ 还有更便宜的培训费么?小学生补习40元/小时很正常,但这里,才40元/天,瀑布汗……

二、完成了看医生的任务

报名完毕后,时间还早,马上去把医生也看了,否则的话,又得拖到明天。于是,我又把西华路走了一遍,今天足足徘徊了3趟啊!

本想看夜诊,但今天的夜诊只有一个副主任医师,必须预约的,且已经满了。不是吧~~~ 不过还好,下午还能挂号,还有N多主治医师供我选择。我前几次看的医生今天下午没开诊,所以选了一个我之前想挂,但没挂成的医生。

非常喜感的一个医生,她说了几句灰常欢乐的话,引用如下:

1、有些事该发生就会发生,如果没有发生,你等下去也是不会发生的。

2、喝水都会胖是吧。

3、你超重13斤,必须减肥。(我懂的,从去年夏天第一次看医生开始我就明白这个道理——胖,身体不正常;身体不正常,更加胖,恶性循环!)

我无奈地问医生我应该怎么减肥,医生说:“你以你最快速度走路,每天一小时,然后一小时之内不要吃任何东西。”汗!我的速度?我的最快速度?1小时,我绝对得走上6公里的说。别人绝对觉得我是个疯子……不过,其实1小时是正确的,因为只有时间足够长,才会真正消耗你想消耗的东西而不只是把水分甩掉。医生一直在说很喜感的真话,我一直无奈地傻笑。

减肥,毋庸置疑是我这个夏天最必须、最棘手的任务!!!!!!这个任务对我来说空前重要!!!!!看来摔角遇上真正敌人了,哈~~~

就这样,有惊无险地完成了这周必须完成的任务,松了一口气,明天可以淡定地看SD和写SD观后感。

偷偷地,我“借用”了半个工作日的时间,赢来了一天的周末空余,嘿嘿。

2011-05
18

思考不止步

By xrspook @ 18:08:27 归类于: 烂日记

不知不觉间,X也有了追随者,有了仰慕X的粉,感觉挺怪,因为我没想过要当Superstar,或者说我有做过这样的白日梦,但那纯粹是儿时的幻想。随着年龄的增大,我更倾向于干实际的事。做事是这样,做人是这样,连看电视也这样。但原来“一切从实际出发”也会引来追随者,不过,需要更长的时间,X观后感在19977 debut至今已经159天,近半年了。没有华丽的debut,没有特意拉什么高级人士来撑场,我只是每周都独舞而已。

要对得住自己喜欢的东西,喜欢不是挂在嘴上的,技术与否不是靠吹水来体现。

实际行动比什么都有说服力。

今天很变态地把2011年至今的所有进出数据录入了新Excel表格,实际上呢,是从昨天开始奋起录入的,因为发现这种更“数据”的记录方式因为简便所以能有效地防止出错。这几天才想通了这个数据处理方法,原来我前两年一直很努力做的是人为地把数据图像化,而现在,我则是让数据回归为数据,让软件去生成直观的东西(各种汇总和图表)。生活本该是简单轻松的,把麻烦事交给软件去。随着对自身业务的进一步了解和对软件认识的逐步加深,应该能继续地化繁为简下去的。改进是个持续的过程,这需要你用心,思考不是一时半刻的事情,而是应该不曾停止。但有些时候,我拒绝为某些事思考。

今天下午,不知哪里传来不断的音乐声,巨囧~~~ 开始以为是我们单位自己在试音,但后来感觉可能不是,是赤湾那边不知搞什么鬼飘过来了,真万恶。赤湾的繁盛让我们这边人气增了不少,但同时带来了络绎不绝的车流以及灰尘漫天飞的环境,囧。

星期三了,又星期三了,这周又过了一半鸟。

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