正在加载...

Shellex Blog Here

Python+GTK校内相册下载工具。

您可能也对这些感兴趣

仅仅是批量下载很容易的,这种东西嘛,要不要GUI都无所谓的。但是大家知道有很多MM是用WIndows的,而用WIndows的MM是不会用终端的,所以要我写一下GUI也无所谓。

但是由于大菠萝的缘故,我今天…卡卡,才把GUI写了。给…

但是问题就在这里,那就是,我折腾了一个小时也没成功把py2exe做的包运行起来。所以我没有做Windows的安装包咯…真是晕。哪位同学帮我做一下,感激不尽。

如果您使用Windows或者Mac,而且想用这个工具,在某人做出安装包前,请自行安装python和GTK和pyGTK。

如果您是MM我可以亲手教您如何安装….

如果您使用Linux就自己折腾吧。

源码下载: http://www.box.net/shared/ufsbulheb0

下面分别是Linux下和WIndows下的截图:
这是Linux下的:

这是Windows下的:

下面是代码。但是你可能还是需要去上面下载glade文件。

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/python
# -*- coding: utf-8 -*-
# by shellex [www.sxnsx.com]
import re
import os
import sys
import gtk
import gtk.glade
import cookielib
import urllib, urllib2
import threading
 
class xn_photo_downloader(threading.Thread):
	def __init__(self):
		threading.Thread.__init__(self, name='downloader')
		self.cookies = cookielib.CookieJar()
		self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookies))
		self.save_path = '/home/shellex/Desktop/xnphotosd/d'
		self.target_url = ''
		self.usr = ''
		self.pwd = ''
		self.page_cnt = 0
		self.pbar = None
 
	def verify(self):
		verify_url = 'http://login.xiaonei.com/Login.do'
		verify_data= urllib.urlencode(
			{'email':self.usr,
			 'password': self.pwd,
			 'origURL':'http://www.xiaonei.com/SysHome.do'
			 })
		self.opener.open(verify_url, verify_data)
		print '[!]verify finish.'
 
	def go(self, target):
		rep = self.opener.open(target)
		return rep.read()
 
	def enmu_page_url(self):
		reg1 = '<div class="pager-bottom">[\s\S]*</ol';
		m = re.compile(reg1).search(self.go(self.target_url))
		if m == None or m.group().find('li') == -1:
			return [self.target_url]
		else:
			reg2 = '<li.*href="(.*?)"'
			params = re.findall(reg2, m.group())
			params = params[:-1]
			base_url = 'http://photo.xiaonei.com/'
			return [ base_url + each for each in params]
 
 
 
	def enmu_photo_url(self, url):
		reg = '<td class="photoPan">\s*<a href="(.*)">'
		result = re.compile(reg).findall(self.go(url))
		return result
 
	def download_photo(self, url):
		reg = '<div class="photo">\s*<img .* src="(.*?)" '
		photo_url = re.compile(reg).search(self.go(url)).group(1)
		print '[!]download:' + photo_url
		buf = self.opener.open(photo_url, 'wb').read()
		head, tail = os.path.split(photo_url)
		file = open(self.save_path + '/' + tail, 'w+')
		file.write(buf)
		file.close()
 
	def run(self):
		self.verify()
		pages = self.enmu_page_url()
		self.page_cnt = len(pages)
 
		loop1, loop2 = 1, 1
		for page_url in pages:
			print "[!]enter page:" +  page_url
			photos = self.enmu_photo_url(page_url)
			self.photo_cnt = len(photos)
			loop2 = 1
			for url in photos:
				progress_txt = 'Page %s/%s: Photo %s/%s' % (loop1, self.page_cnt, loop2, self.photo_cnt) 
				self.download_photo(url)
				self.pbar.set_text(progress_txt)
				self.pbar.set_fraction((0.0 + loop2)/self.photo_cnt)
				loop2 += 1
			loop1 += 1
		self.pbar.set_text("Done!")
 
class main_win():
	def start_btn_clicked_cb(self, widget):
		downloader = xn_photo_downloader()
		downloader.save_path = self.ui.get_widget('brower_btn').get_current_folder()
		downloader.usr = self.ui.get_widget('usr_box').get_text()
		downloader.pwd = self.ui.get_widget('pwd_box').get_text()
		downloader.target_url = self.ui.get_widget('album_url_box').get_text()
		downloader.pbar = self.ui.get_widget('progressbar_main')
		downloader.setDaemon(True)
		downloader.start()
 
	def __init__(self):
		# load ui and connect signals
		self.ui = gtk.glade.XML('ui.glade')
		self.ui.signal_autoconnect(self)
		self.win = self.ui.get_widget('main_win')
		self.win.show()
		self.win.connect("destroy", gtk.main_quit)
		self.ui.get_widget('exit_btn').connect("clicked", gtk.main_quit)
		try:
			gtk.main()
		except:
			print "Shit. A fucking exception caught. Dying a death."
			sys.exit(1)
 
if __name__ == '__main__':
	gtk.gdk.threads_init()
	mw = main_win()

完了。忘记说了,本Code以GPLv2协议发放。

喜欢这篇文章?点下面的按钮分享到:Google/豆瓣/鲜果/校内/饭否...
  • Google
  • douban
  • xianguo
  • xiaonei
  • fanfou
  • Facebook
  • del.icio.us
  • Digg
  • Technorati
  • TwitThis
  • Slashdot
  • Live
  • Reddit
  • StumbleUpon

无流言,不YD。来,留个流言吧!

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

有 20 个流言 关于 “Python+GTK校内相册下载工具。”

vvoody Using Opera Opera 9.51 on Linux Linux Says:

嘿嘿,100行啊。

你小子做这个动机不纯啊,哈哈。

Reply(回复)

shellex Using Mozilla Firefox Mozilla Firefox 3.0.1 on Linux Linux Says:

[quote comment="363"]嘿嘿,100行啊。

你小子做这个动机不纯啊,哈哈。[/quote]
哪有哦,我纯洁得很呢。

Reply(回复)

山猫 Using Mozilla Firefox Mozilla Firefox 3.0.1 on Linux Linux Says:

猫猫啊,未必一定 py2exe,
不然你每个程序都带一套独立的 python + gtk, 你服务的 mm 的电脑要爆掉啦~

反正这种程序都是要有网络才能用的,
不如做个包装,
运行时检查是否有 python、pyGtk,
没有就自动下载自动无提示安装 pyGtk 到系统

Reply(回复)

shellex Using Mozilla Firefox Mozilla Firefox 3.0.1 on Windows Windows XP Says:

[quote comment="377"]猫猫啊,未必一定 py2exe,
不然你每个程序都带一套独立的 python + gtk, 你服务的 mm 的电脑要爆掉啦~

反正这种程序都是要有网络才能用的,
不如做个包装,
运行时检查是否有 python、pyGtk,
没有就自动下载自动无提示安装 pyGtk 到系统[/quote]

还得再写个Win32程序, 麻烦. 我用Fx插件搞定咯…

Reply(回复)

白痴一个 Using Mozilla Firefox Mozilla Firefox 3.0.1 on Windows Windows XP Says:

我想改成pyqt的……
郁闷了……想用QT4+C++做……可怎么也不会……

Reply(回复)

shellex Using Mozilla Firefox Mozilla Firefox 3.0.1 on Windows Windows XP Says:

[quote comment="380"]我想改成pyqt的……
郁闷了……想用QT4+C++做……可怎么也不会……[/quote]
代码都在…应该很容易吧..

Reply(回复)

白痴一个 Using Mozilla Firefox Mozilla Firefox 3.0.1 on Windows Windows XP Says:

pyqt4的改完了……打好包了……好大……10M…………

给人用去了……

C++的还是搞不定…………

Reply(回复)

shellex Using Mozilla Firefox Mozilla Firefox 3.0.1 on Linux Linux Says:

[quote comment="394"]pyqt4的改完了……打好包了……好大……10M…………

给人用去了……

C++的还是搞不定…………[/quote]

看看上面山猫的留言吧。

Reply(回复)

白痴一个 Using Mozilla Firefox Mozilla Firefox 3.0.1 on Windows Windows XP Says:

看了……
但 有多少人会为一个软件而去装python和GUI的环境呢?

Reply(回复)

山猫 Using Mozilla Firefox Mozilla Firefox 3.0.1 on Linux Linux Says:

楼上的,是第一次点击运行后,自动下载,自动安装,
对用户只提示是“正在系统更新/安全升级/优化你的系统/调优你的计算机”之类,
不主动告诉他们是在安装 PyGtk。

Reply(回复)

白痴一个 Using Mozilla Firefox Mozilla Firefox 3.0.1 on Windows Windows XP Says:

加一块20多M……还什么都不告诉用户……

微软还提示装.net

不能连微软都不如啊……

用户有权知道干什么了……这太不负责任了吧…………

Reply(回复)

Hooopo (Using Chrome 1.0.154.48 on Windows Windows XP) reply on March 22nd, 2009 8:42 am:

@白痴一个, 应该提示的吧,就像AIR运行的时候一样吧?如果没有安装会提示下载。。

Reply(回复)

山猫 Using Mozilla Firefox Mozilla Firefox 3.0.1 on Linux Linux Says:

用户是傻瓜,
你不能告诉他额外的东西。

看现在的 google chrome_installer.exe
安装也是不用问任何多余问题的。

Reply(回复)

山猫 Using Mozilla Firefox Mozilla Firefox 3.0.1 on Linux Linux Says:

那些多余的东西,你问了用户又怎么样,有哪个傻瓜会真的去看么,
还不是下意识使劲点击[下一步]、[确定]。
少一问方便一步。

亏某些人还说 win 下某些 XX 软件安装多方便,连续按回车就装好了,
也不想想这几十个回车有什么意义

Reply(回复)

山猫 Using Mozilla Firefox Mozilla Firefox 3.0.1 on Linux Linux Says:

对了, PyGtk 20M 是解压缩后的,
7z 压缩就只有几M 了,
用 7z 做自解压程序很简单的

Reply(回复)

shellex Using Mozilla Firefox Mozilla Firefox 3.0.1 on Linux Linux Says:

嗯,就是这样子。

Reply(回复)

amoblin Using Safari Safari 525.1 on Linux Linux Says:

能像dropbox那样上传相片到校内相册吗?

Reply(回复)

shellex (Using Mozilla Firefox Mozilla Firefox 3.5.0.0 on Gentoo Linux Gentoo Linux) reply on May 26th, 2009 9:00 am:

@amoblin,
dropbox还能上传到校内? 。。。。
不能。只从校内提供了批量上传我就取消了这个功能

Reply(回复)

amoblin (Using Mozilla Firefox Mozilla Firefox 3.0.10 on Ubuntu Linux Ubuntu Linux) reply on May 26th, 2009 12:47 pm:

@shellex, 我不是说dropbox上传到校内。我是说能不能监视一个相片文件夹,然后上传此文件夹下的相片到校内?
“只从校内提供了批量上传我就取消了这个功能”是什么意思呢?

Reply(回复)

shellex (Using Mozilla Firefox Mozilla Firefox 3.5.0.0 on Gentoo Linux Gentoo Linux) reply on May 26th, 2009 4:01 pm:

@amoblin,
哦。是这个意思哈。
当然可以。用inotify监视文件系统事件就可以了。当然啦,我这个很简单,木有这个功能。

>>至于这个 ““只从校内提供了批量上传我就取消了这个功能”是什么意思呢?”
貌似是我穿越了…我错了。