60
|
1 #!/usr/bin/python
|
|
2 # -*- coding: utf-8 -*-
|
|
3 import os,sys,re,string
|
|
4 import cookielib,urllib2,urllib # for urlencode
|
|
5 import time
|
|
6 from sgmllib import SGMLParser
|
|
7
|
|
8 class ContentParser(SGMLParser):
|
|
9 def __init__(self):
|
|
10 SGMLParser.__init__(self)
|
|
11 self.anchor = {'link':'', 'title':''}
|
|
12 self.anchorlist = []
|
|
13 self.liattr={}
|
|
14 self.inside_elements=['site']
|
|
15 self.pat=re.compile('\r|\t|\n')
|
|
16
|
|
17 def start_a(self, attributes):
|
|
18 """For each anchor tag, pay attention to the href and title attributes."""
|
|
19 href, title = '', ''
|
|
20 for name, value in attributes:
|
|
21 if name.lower() == 'href': href = value
|
|
22 if name.lower() == 'title': title = value
|
|
23 self.anchor['link'] = href
|
|
24 self.anchor['title'] = title
|
|
25 self.inside_elements.append('anchor')
|
|
26
|
|
27 def end_a(self):
|
|
28 self.anchorlist.append(self.anchor) # store the anchor in a list
|
|
29 self.anchor = {'link':'', 'title':''} # reset the dictionary,
|
|
30 self.inside_elements.pop()
|
|
31
|
|
32 def handle_data(self, text):
|
|
33 if self.inside_elements[-1]=='anchor':
|
|
34 self.anchor['title'] = text
|
|
35 if self.inside_elements[-1]=='li':
|
|
36 text=self.pat.sub(' ',text)
|
|
37 text=string.split(text," ")
|
|
38 if self.liattcl in self.liattr:
|
|
39 self.liattr[self.liattcl]=self.liattr[self.liattcl]+text
|
|
40 else:
|
|
41 self.liattr[self.liattcl]=text
|
|
42
|
|
43 def start_li(self,attributes):
|
|
44 self.liattcl=''
|
|
45 attrs = dict(attributes)
|
|
46 if attrs.has_key('class'):
|
|
47 self.liattcl=attrs['class']
|
|
48 self.inside_elements.append('li')
|
|
49
|
|
50 def end_li(self):
|
|
51 if self.inside_elements[-1]=='li':
|
|
52 self.inside_elements.pop()
|
|
53
|
|
54
|
|
55 class connection(object):
|
|
56 def __init__(self):
|
|
57 self.page=''
|
|
58 self.server='s2.ikariam.tw'
|
|
59 self.baseurl='http://'+self.server
|
|
60 self.COOKIEFILE = '/tmp/ikcookies.lwp'
|
|
61 self.cj = cookielib.LWPCookieJar()
|
|
62 if os.path.isfile(self.COOKIEFILE):
|
|
63 self.cj.load(self.COOKIEFILE)
|
|
64 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cj))
|
|
65 opener.addheaders = [('User-agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-TW; rv:1.8.1.12pre) Gecko/20071220 BonEcho/2.0.0.12pre')]
|
|
66 urllib2.install_opener(opener)
|
|
67
|
|
68 def login(self):
|
|
69 if not os.path.isfile(self.COOKIEFILE):
|
|
70 print "create cookie file"+self.COOKIEFILE
|
|
71 # /index.php?action=loginAvatar&function=login
|
|
72 params = {"universe":self.server, "name":'username', "password":'passwd'}
|
|
73 data = urllib.urlencode(params)
|
|
74 self.page=urllib2.urlopen(self.baseurl+'/index.php?action=loginAvatar&function=login',data).read()
|
|
75 self.cj.save(self.COOKIEFILE)
|
|
76 return 1
|
|
77
|
|
78 def parser(self):
|
|
79 parser=ContentParser()
|
|
80 parser.feed(self.page)
|
|
81 parser.close
|
|
82 for x in parser.liattr.keys():
|
|
83 print x,parser.liattr[x]
|
|
84 #parser.anchorlist:
|
|
85
|
|
86 def logout(self):
|
|
87 logout=urllib2.urlopen(self.baseurl+'/index.php?action=loginAvatar&function=logout').read()
|
|
88 os.remove(self.COOKIEFILE)
|
|
89 return 1
|
|
90
|
|
91 def plunder(self):
|
|
92 '/index.php?view=plunder&destinationCityId=1978'
|
|
93
|
|
94
|
|
95 def upgradetest(self):
|
|
96 urllib2.urlopen(self.baseurl+'/index.php?view=academy&id=117257&position=9').read()
|
|
97 params = {"action":'CityScreen', \
|
|
98 "function":'upgradeBuilding', \
|
|
99 "id":'117257',\
|
|
100 "position":'9',\
|
|
101 "level":'7',\
|
|
102 "oldView":'academy'}
|
|
103 print urllib2.urlopen(self.baseurl+'/index.php?view=townHall&id=117257&position=0#upgrade',urllib.urlencode(params)).read()
|
|
104 return 1
|
|
105
|
|
106 def help():
|
|
107 print ("Usage: %s [Option] [Channel] [second]") % os.path.basename(sys.argv[0])
|
|
108 print ("Option: ")
|
|
109 helplist=[
|
|
110 ("-h","--help","show this usage message."),
|
|
111 ("-g","--game","Login to the game")
|
|
112 ]
|
|
113 helplist.sort()
|
|
114 for x in helplist:
|
|
115 print ("\t%2s, %-25s %s" % x)
|
|
116
|
|
117 if __name__=='__main__':
|
|
118 if len(sys.argv) == 1:
|
|
119 help()
|
|
120 sys.exit(2) # common exit code for syntax error
|
|
121 else:
|
|
122 arglist=sys.argv[1:]
|
|
123 if arglist[0] in ('--game','-g'):
|
|
124 gc=connection()
|
|
125 gc.login()
|
|
126 gc.parser()
|
|
127 gc.logout()
|
|
128
|
|
129
|