changeset 60:610bbe1824ef

basic Python login script
author kevin@localhost.localdomain
date Tue, 21 Oct 2008 16:14:45 +0800
parents b40f87f16263
children a4c364888197
files pyikb/ikariam.py
diffstat 1 files changed, 129 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pyikb/ikariam.py	Tue Oct 21 16:14:45 2008 +0800
@@ -0,0 +1,129 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+import os,sys,re,string
+import cookielib,urllib2,urllib # for urlencode
+import time
+from sgmllib import SGMLParser  
+
+class ContentParser(SGMLParser):
+    def __init__(self):
+        SGMLParser.__init__(self)
+        self.anchor =  {'link':'', 'title':''}
+        self.anchorlist = []
+	self.liattr={}
+        self.inside_elements=['site']
+	self.pat=re.compile('\r|\t|\n')
+
+    def start_a(self, attributes):
+        """For each anchor tag, pay attention to the href and title attributes."""
+        href, title = '', ''
+        for name, value in attributes:
+            if name.lower() == 'href': href = value
+            if name.lower() == 'title': title = value
+        self.anchor['link'] = href
+        self.anchor['title'] = title
+        self.inside_elements.append('anchor')
+
+    def end_a(self):
+        self.anchorlist.append(self.anchor) # store the anchor in a list 
+        self.anchor = {'link':'', 'title':''}   # reset the dictionary,  
+        self.inside_elements.pop()
+
+    def handle_data(self, text):
+        if self.inside_elements[-1]=='anchor':
+            self.anchor['title'] = text
+	if self.inside_elements[-1]=='li':
+	    text=self.pat.sub(' ',text)
+	    text=string.split(text," ")
+	    if self.liattcl in self.liattr:
+	    	self.liattr[self.liattcl]=self.liattr[self.liattcl]+text
+	    else:
+	        self.liattr[self.liattcl]=text
+
+    def start_li(self,attributes):
+	self.liattcl=''
+        attrs = dict(attributes)
+	if attrs.has_key('class'):
+	     	self.liattcl=attrs['class']
+		self.inside_elements.append('li')
+
+    def end_li(self):
+	if self.inside_elements[-1]=='li':
+	    self.inside_elements.pop()
+	
+
+class connection(object):
+    def __init__(self):
+	self.page=''
+	self.server='s2.ikariam.tw'
+	self.baseurl='http://'+self.server
+        self.COOKIEFILE = '/tmp/ikcookies.lwp'
+	self.cj = cookielib.LWPCookieJar()
+	if os.path.isfile(self.COOKIEFILE):
+	    self.cj.load(self.COOKIEFILE)
+	opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cj))
+	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')]
+	urllib2.install_opener(opener)
+
+    def login(self):
+        if not os.path.isfile(self.COOKIEFILE):
+	    print "create cookie file"+self.COOKIEFILE
+	    # /index.php?action=loginAvatar&function=login
+            params = {"universe":self.server, "name":'username', "password":'passwd'}
+            data = urllib.urlencode(params)
+            self.page=urllib2.urlopen(self.baseurl+'/index.php?action=loginAvatar&function=login',data).read()
+	self.cj.save(self.COOKIEFILE)
+	return 1
+
+    def parser(self):
+        parser=ContentParser()
+        parser.feed(self.page)
+        parser.close
+	for x in parser.liattr.keys():
+	    print x,parser.liattr[x]
+	#parser.anchorlist:
+
+    def logout(self):
+        logout=urllib2.urlopen(self.baseurl+'/index.php?action=loginAvatar&function=logout').read()
+	os.remove(self.COOKIEFILE)
+	return 1
+
+    def plunder(self):
+    	'/index.php?view=plunder&destinationCityId=1978'
+
+
+    def upgradetest(self):
+        urllib2.urlopen(self.baseurl+'/index.php?view=academy&id=117257&position=9').read()
+	params = {"action":'CityScreen', \
+	          "function":'upgradeBuilding', \
+		  "id":'117257',\
+		  "position":'9',\
+		  "level":'7',\
+		  "oldView":'academy'}
+	print urllib2.urlopen(self.baseurl+'/index.php?view=townHall&id=117257&position=0#upgrade',urllib.urlencode(params)).read()
+	return 1
+
+def help():
+        print ("Usage: %s [Option] [Channel] [second]") % os.path.basename(sys.argv[0])
+        print ("Option: ")
+	helplist=[
+	("-h","--help","show this usage message."),
+	("-g","--game","Login to the game")
+	]
+	helplist.sort()
+	for x in helplist:
+	    print ("\t%2s, %-25s %s" % x)
+
+if __name__=='__main__':
+    if len(sys.argv) == 1:
+	help()
+	sys.exit(2) # common exit code for syntax error
+    else:
+	arglist=sys.argv[1:]
+	if arglist[0] in ('--game','-g'):
+	     gc=connection()
+	     gc.login()
+	     gc.parser()
+	     gc.logout()
+
+