VC版极影开发手记

By | 2011/07/15

更新日志:
1:2011/07/12,初始版本。
2:2011/07/15,更改外观,现在看起来更VC了,增加内容介绍项目。

这是一篇对“VC版极影”的技术说明文章,一般用户请移步至使用讨论页面查看/提出问题和建议。

VC版极影这个东西说来话长,我是用惯了VeryCD的人。看上面的动漫,一般一个新番就跟着一个字幕组走(否则翻译乱糟糟),本来的方法是用收藏夹把正在连载的项目都收藏起来,然后每天晚上回去,把收藏夹里的内容全部打开(多的时候2、30个吧,那时候还在用遨游这个常年假死的浏览器……),一个一个检查,相对麻烦。后来VeryCD有了收藏夹功能,只要收藏一下,有了更新自然会得到通知,很好很强大!

就这样用了很多年,慢慢的我发现,虽然我把VC上所有的节目都看过了,偶尔逛一下论坛还是会发现很多自己都没听过的新番,然后就明白了,VC原来是个非常和谐的地方,稍微有点少儿不宜的作品是没法放上去的……这以后我就时不时到极影去搜罗一下,看到什么感兴趣的也下下来观摩一下。可惜极影的作品发表太乱了,各个字幕组的作品都混在在一起,要不停的使用搜索排序才能搞定,所以一直没法彻底转移过去。

突然有一天,电驴大全出现了……整个VC变得我都不认识了,想着是不是去适应一下,后来发现貌似上面投递作品的字幕组都变少了,烂尾的变多了。这才想着,要不彻底转战极影吧~虽然极影没有VC那种方便的收藏功能,咱自己做一个不就好了?这就是VC版极影的诞生由来。

开发语言: PHP+MYSQL+Javascript(jQuery)
编辑工具: Vim
调试工具: XAMPP,Firefox+Firebug

工作原理

关于收藏的原理,其实是通过RSS来获得更新,然后从标题中解析出字幕组和作品名,最后写入数据库归类的。这里面最困难的就是解析字幕组和作品名,极影上发的东西完全没有规律。比如下面几种相对常见的情况:

  1. [萌月字幕组][萝球社][Rou Kyuu Bu!][01V2][1280×720 AAC]
  2. 【命运石之门Steins;Gate】【14】【TSDM字幕组】【BIG5繁体】【480P】【PC&PSP兼容MP4】后期急招募
  3. 【月光恋曲&SOSG字幕】☪【NARUTO_火影忍者-疾风传】【438(218 大国行动】[720P MKV& PSP兼容480P MP4&简繁RMVB]
  4. 【圣域字幕组】★7月新番 吸血猫 第01集[GB简体][704×396][rmvb]
  5. 【SOSG字幕团】★7月新番【夏日友人帐 叁】【第01话】[MP4][480p][HDTV]【以更高品质替代RMVB】

1很标准,“[字幕组][作品名]其他内容”,可惜这样的情况真不多;像2,“[作品名][其他][字幕组]”这种情况就有点不和谐;然后3是几个字幕组合作,可惜它又在两个括号之间乱加毫无意义的东西;再看4,除了字幕组用方括号括一下后面就一坨了;最要命的是5,明明是“夏目友人帐”写成了“夏日友人帐”,你这不坑爹么……

人眼一看就能明白,计算机识别起来要半条命,而且还要用没使唤过的PHP来完成,花了好几天研究这个,用过各种复杂的算法,效果都不好;现在采用的是一种很要命的方法(属于技术机密不多讲了),基本能达成要求,只是以后每次新番出来的时候需要一段学习适应期,哎。

PHP相关

要说的是自己从来没PHP做过网页,以前用web.py做过东西,这次为了在这个主机上运行不得已使用PHP,所有碰到了无数问题,很多关于PHP的基础知识就不记录了……

匿名函数

在使用array_map的时候,为了节约代码,看本机调试的时候试用了array_map(function(){}, $array)这样的写法,执行没问题,上传到服务器上后,咋跑咋出错。花了无数时间发现PHP的版本比较低,换回了array_map(‘name’ , $array)这样的写法后就OK了。

正则相关

PHP中的正则与Perl很相似,只是这次Unicode用了很多,感觉不太对的时候加个/u就差不多了……

数据库相关

MYSQL也没真正学习过,就会几句SQL,平时用用SQLite,混到现在居然也没啥大灾大难的……

超时问题

实际在服务器上运行时报“MYSQL INSERT ERROR: MySQL server has gone away”,总是是明确的告诉我是什么问题了。查看之后发现服务器访问ktxp巨慢,要花好几分钟才能把rss读完,MYSQL早就等不及了,只好关闭再开。而且是不是就会出现rss解析失败,估计是由于curl超时的关系,只好再把CURLOPT_TIMOUT等参数再放大,啥破服务器啊……

一些语法

UPDATE table SET col1=col1+1 WHERE ID=x
以前居然是把col1取出来,然后加1在UPDATE回去的……

SET NAMES ‘utf8’
加上这句以后编码变得很和顺!

SET time_zone= ‘+08:00 ‘
服务器不在国内,要设下区域。

二次查询中的limit

select * from table1 where id in (select id from table2 limit 20)

这样的查询是不行的,MYSQL告诉你“This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME subquery’”,难道我要再额外做20个查询?!有人发现可以这么用:

select * from table1 where id in (select t2.id from (select id from table2 limit 20) as t2)

居然就可以了,神奇……

INSERT INTO和UPDATE中的CURRENT_TIMESTAMP

又是一件神奇的事情,在设过SET time_zone= ‘+08:00 ‘后,确实SELECT CURRENT_TIIMESTAP返回正确的时间了,UPDATE的时候,SET `xx`=CURRENT_TIMESTAP也是可以的。但是在INSERT的时候,怎么整都是系统默认的时间,不管是指定values还是用default!万般无奈,只能在指定values的时候再+ INTERVAL n HOUR,虽然暂时可以了这样岂不是就失去了通用性?求指教!

浏览器相关

Cookie设置

客户端的Cookie操作使用了jQuery的插件,一开始使用类似这样的语句:

$.cookie("xxx", "yyy", {expires: 7, secure: true});

怎么都无法成功设置,又是花了无数时间debug,后来发现把secure参数去掉就好了,调查之后才知道secure是在安全连接即https是才能使用,我还单纯的以为就是更保险一点呢……

JavaScript/jQuery相关

有着多个class的元素,一开始使用$(“.cls1”).find(“.cls2”)来选的,很弱智,原来可以直接$(“.cls1.cls2”)。

CSS相关

CSS永远是前端的痛,这次用了一个很简陋的页面,没遇到太多问题,如果以后有一天需要修饰一下的话…想想就很恐怖!

字体阴影

text-shadow:black 2px 2px 2px;
filter: Shadow(Color='black', Direction='135', Strength='2')

DIV阴影

box-shadow:2px 2px 5px #333;
-moz-box-shadow:2px 2px 5px #333333;

圆角设置(IE无视了)

border-radius: 5px;
-moz-border-radius: 5px;

自动更新相关

我的服务器访问ktxp超慢超慢,平均下1k/s左右,断线概率极高,访问的时候感觉还整个系统都被拖累了。这个问题整整搞了两天,最后终于明白靠它自己下载是没戏了。有鉴于本地访问两个网址都很快,就想着是不是找台机器跳转一下,自己的机器不可能一直开着,只好找免费主机,一个一个测试,基本都不提供命令行连接,很多免费机子都不能用url_open,甚至是php都不让使……最后总算是找到一个教育用的,使用wget下载rss文件以后,再使用curl上传到服务器上,很快!

curl -F "action=upload" -F "filename=@file.tar.gz" http://localhost/action.php

2 thoughts on “VC版极影开发手记

  1. Pingback: » VC版极影使用手册

  2. 东风谷早苗

    去年研究pygame的时候偶然来到这里,七七八八地看完了,连看轻音学日语都顺手看完了,对博主很佩服。今天看到了这篇,看到那句“年纪大了很多东西都没兴趣了”,感觉很是感触。愿您在三次元收获美好的时光,前辈~

    Reply

东风谷早苗进行回复 取消回复

您的电子邮箱地址不会被公开。