TwistedでRedTubeのビデオをダウンロードする
次、一部でアツいRedTube。
問題はidの所なんだけど解析してるひとがいたのでそのままパクリです。
from twisted.web import client from twisted.internet import reactor URL = 'http://dl.redtube.com/_videos_t4vn23s9jc5498tgj49icfj4678/%s/%s.flv' map = ["R", "1", "5", "3", "4", "2", "O", "7", "K", "9", "H", "B", "C", "D", "X", "F", "G", "A", "I", "J", "8", "L", "M", "Z", "6", "P", "Q", "0", "S", "T", "U", "V", "W", "E", "Y", "N"] def get_video_id(id): dir_id = str(int(id / 1000)).zfill(7) id = str(id).zfill(7) my_int = 0 for x in xrange(7): my_int = my_int + int(id[x]) * (x + 1) my_char = str(my_int) my_int = 0 for x in my_char: my_int = my_int + int(x) new_char = str(my_int).zfill(2) mapping = '' mapping = mapping + map[ord(id[3]) - 48 + my_int + 3] mapping = mapping + new_char[1] mapping = mapping + map[ord(id[0]) - 48 + my_int + 2] mapping = mapping + map[ord(id[2]) - 48 + my_int + 1] mapping = mapping + map[ord(id[5]) - 48 + my_int + 6] mapping = mapping + map[ord(id[1]) - 48 + my_int + 5] mapping = mapping + new_char[0] mapping = mapping + map[ord(id[4]) - 48 + my_int + 7] mapping = mapping + map[ord(id[6]) - 48 + my_int + 4] return dir_id, mapping def downloadFlv(id, file): def finish(data): reactor.stop() def err(e): print e reactor.stop() url = URL % get_video_id(id) print url client.downloadPage(url, file).addCallback(finish).addErrback(err); if __name__ == '__main__': downloadFlv(3707, '/tmp/temp.flv') reactor.run()
idをintで指定して落とすようにしたのはxrange(9000)とかで全ファイルをダウンロードできるようにしたかったから。
ってわけじゃあないよ!決して!
やりたいひとはfinishでreactor止めなければいいよ。
参考:
Welcome to IESCRIPTS.ORG
うくく。