ac娘工具:数据库从sqlite移到mysql

想来想去,与其先把sqlite数据库搞下来、再找个奇怪的转换工具转为mysql再弄上去,还不如直接在远程服务器上弄,注意备份就是了。

于是赶紧写了个python去搞,参考了一些资料很快就写好了。由于先前很少接触mysql,所以很多设置例如引擎啊、字符编码啊都没设置好,后来在出现乱码、又发现不能按照事务方式执行的时候,才知道应该选InnoDB引擎,然后所有地方都设置成utf8。

mysql比起sqlite真的是好太多了:习惯了用access的我,一直都以为mysql啊mssql啊这种不能作为文件随便挪的数据库非常不方便,可是现在才发现,有phpmyadmin这种强大的存在的话,mysql比要写python脚本才能好好地访问、还要设计现实界面不然就只是显示出一堆难懂的数组的sqlite好用多了;而且在有cpanel的情况下,备份也比sqlite方便。最重要的是,sqlite还分2和3,而python用的是3、php的CI用的是2,移植相当麻烦,哎。

另外,我又开始犹豫到底要不要做php的ac娘工具了:用python做出来的程序感觉快很多,特别是换了mysql后更快了,这也许和python脚本的执行效率有关,毕竟py要755权限才能执行,而php只要644。作为别人的网站的辅助工具,其实能用就行吧。

移植的时候对数据结构进行了重新设计,充分利用了mysql的特殊数据类型:分类字段就用了enum代替smallint,date和time也用了标准的时间和日期格式,所以原来的python程序除了改变数据库接口和表名之外,还有很多地方要修改,总体来说整个程序又优化了一点,而且还有优化的余地;此外,对自动抓取数据的cron也进行了修改,通过sys.path.append的方式来实现自建库的复用(原先是将几个库的代码全部拷到同一个文件中用:这已经超越了面向过程的编程,达到了汇编语言式的编程了。豆知识:cron,Linux中的时钟守护作业,其中一个特点是从根目录开始执行程序,所以不能够简单地import程序同目录下的其它库)。

折腾到这个程度,相当有成就感。

php版ac娘工具的进展

目前对用户页面(搜索页、重定向页)已经完成,只要完成了最关键的update模块,再把原来sqlite的数据导过来,就可以放出去给人用了。

遇到的问题:

  1. CI架构的库和辅助函数是比较全面的,而且想着越来越通用的方向努力地发展着,可是我还是不得不打破了它的一些基础设定,例如search功能最终还是使用了CI不推荐的get方法;在做这个决定之前,我参考了许多大型应用,如豆瓣、google和百度,它们都是用get方法进行搜索,看来这个是无法避免的问题。
  2. 库和辅助函数的最佳载入点应该在哪里?我现在是需要的时候才载入,这样可以使得一个模块对其它模块的依赖性降低,但是整个程序变得挺难看的,东一块西一块。
  3. 对MVC架构将模型和视图分开的考虑还不够,数据查出来就直接放到view中使用了。
  4. 目前是将每个view的内容全部用echo命令输出,但事实上view应该写成html中嵌入php代码还是全部用echo好呢?尽管html模板的可读性更强,可是php程序的效率应该高一些;如果学习某种模板语言,也许像分页功能这种就又成为一个新问题了。
  5. 比起原来的python程序,php速度变慢了很多,暂时未知瓶颈在哪里。

Python Helps Python帮上忙了

In my feed updated, there is someone who has grasped all the VeryCD data and made a knock-off abroad. He spent a week on it, applying Python for crawler and web, cron job (maybe to grasp regularly) and so forth, oops!

在我的供稿更新中,有人抓了vc的全部数据然后做了一个山寨版放在国外。他花了一个星期用Python做了爬虫和网站,也用到了时钟守护任务(也许是定期抓数据)等。~\(≧▽≦)/~

I’m doing the same for Acfun! But what he did must be much greater. What’s more, I only indexed Acfun, but he duplicated VeryCD. What makes sense lies in that we both used Python. The urllib2 is a good guy.

我也正在为ac做同样的事!不过他做的事伟大得多。此外,我只是做了ac的索引,而他复制了vc。比较有意义的在于我们都用了Python。urllib2是好东西。

Python’s excellent designed, I found as I slightly dived in to it. It’s not easy for me whose foundation of coding is bad to develop well-structured applet, but I still want to continue because I expect that it will benefit.

Python的设计非常赞,这是我稍微深入了解了一下之后发现的。但对于没有良好的写代码基础的我来说,写一个结构良好的小程序很不容易,不过我将继续努力,因为我希望它能带来好处。