PageRenderTime 60ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/cn-version/twi_service.py

http://twitalker.googlecode.com/
Python | 1914 lines | 1714 code | 95 blank | 105 comment | 163 complexity | 9a2c2c61fc0987641f68e02adbfa537a MD5 | raw file
Possible License(s): MIT
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. # TwiTalker - Tweet it easy with your GTalk
  5. # Copyright 2009-2010 Kavin Gray
  6. # See LICENSE for details.
  7. #
  8. #
  9. import re
  10. import base64
  11. import httplib, urllib,urllib2
  12. from django.utils import simplejson
  13. from google.appengine.ext import webapp
  14. from google.appengine.api import xmpp
  15. from apptwitter import AppEngineTwitter
  16. from db_service import DBService
  17. import config
  18. DATABASE={1:"TwiDbA",2:"TwiDbB",3:"TwiDbC",4:"TwiDbD",5:"TwiDbE",6:"TwiDbF",7:"TwiDbG",8:"TwiDbH",9:"TwiDbI",10:"TwiDbJ"}
  19. UNBINDING_MSG="????????????????????? http://twitalker.appspot.com/ ?????????\
  20. ??????????????: *-v ?? ??? ?? ??*\n????????: http://twitalker.appspot.com/faq:\n\n"
  21. class TService():
  22. def __init__(self):
  23. self.oauth_key = config.OAUTH_KEY # app oauth_key
  24. self.oauth_secret = config.OAUTH_SECRET # app oauth_secret
  25. self.bot_acount= config.ACCOUNT # bot account
  26. self._results = None # result for the querying user
  27. def isCommand(self,msg):
  28. '''
  29. Check for Commands
  30. Command => Retrun True
  31. Not a command => Return False
  32. '''
  33. if(len(msg)<=1):
  34. if(msg=='-'):
  35. return True
  36. else:
  37. return False
  38. elif(msg.lower()=='help' or (msg[0]=='-' and msg[1]<>'-')):
  39. return True
  40. else:
  41. return False
  42. def parseCommand(self,msg,add):
  43. '''
  44. Check and execute command
  45. Account unbinded => Retrun UNBINDING_MSG
  46. Invalid command => Retrun ERROR Msg
  47. Command => Execute funciton and return the respon
  48. '''
  49. command=msg.lower()
  50. param=command.split(' ')
  51. db_ser=DBService(add)
  52. # check if the gtalk user have already binded to the account
  53. if(not db_ser.isUser()):
  54. # command to bind to a new account
  55. if(len(param)==3 and param[0]=='-v'):
  56. return self.setOauth(msg.split(' ')[1],msg.split(' ')[2],add)
  57. return UNBINDING_MSG
  58. self._results=db_ser.getQuery()
  59. # Proccess and execute the commands
  60. if(command=='-help' or command=='-h' or command=='help' or command=='-?'):
  61. return self.getHelp()
  62. elif(command=='-all'):
  63. return self.getCommands()
  64. elif(command=='-tool'):
  65. return self.getTool()
  66. elif(command=='-on'):
  67. return self.setMode('on')
  68. elif(command=='-self'):
  69. return self.setMode('self')
  70. elif(command=='-live'):
  71. return self.setMode('live')
  72. elif(command=='-off'):
  73. return self.setMode('off')
  74. elif(command=='-idon'):
  75. return self.setMode('idon')
  76. elif(command=='-idoff'):
  77. return self.setMode('idoff')
  78. elif(command=='-status' or command=='-st'):
  79. return self.getStatus()
  80. elif(command=='-@'):
  81. return self.getMention()
  82. elif(command=='-d'):
  83. return self.getDM()
  84. elif(command=='-r' or command=='-rt'):
  85. return self.getRT()
  86. elif(command=='-fav'):
  87. return self.getFav()
  88. elif(command=='-me' or command=='-tl'):
  89. return self.getTL()
  90. elif(command=='-home' or command=='-ho'):
  91. return self.getHomeTL()
  92. elif(command=='-del'):
  93. return self.delMsg()
  94. elif(command=='-mlist' or command=='-mt'):
  95. return self.getIList()
  96. elif(command=='-list' or command=='-lt'):
  97. return self.getList()
  98. elif(command=='-listed' or command=='-ld'):
  99. return self.getListed()
  100. elif(command=='-bind'):
  101. return self.getMultiUser()
  102. elif(command=='-remove'):
  103. return self.removeUser()
  104. elif(command=='-update'):
  105. return self.updateUser()
  106. # command which have a arg
  107. elif(len(param)==2):
  108. if(param[0]=='-rt'):
  109. if(param[1].isdigit()):
  110. return self.setRT(param[1])
  111. else:
  112. return self.getRT(param[1])
  113. elif(param[0]=='-r'):
  114. if(param[1].isdigit()):
  115. return self.setNewRT(param[1])
  116. else:
  117. return self.getRT(param[1])
  118. elif(param[0]=='-del'):
  119. return self.delMsg(param[1])
  120. elif(param[0]=='-status' or param[0]=='-st'):
  121. return self.getStatus(param[1])
  122. elif(param[0]=='-@'):
  123. return self.getMention(param[1])
  124. elif(param[0]=='-d'):
  125. return self.getDM(param[1])
  126. elif(param[0]=='-fav'):
  127. if(param[1].isdigit()):
  128. return self.setFav(param[1])
  129. else:
  130. return self.getFav(param[1])
  131. elif(param[0]=='-unfav'):
  132. return self.unFav(param[1])
  133. elif(param[0]=='-me'):
  134. return self.getTL(param[1])
  135. elif(param[0]=='-tl'):
  136. return self.getUserTL(param[1])
  137. elif(param[0]=='-home' or param[0]=='-ho'):
  138. return self.getHomeTL(param[1])
  139. elif(param[0]=='-follow' or param[0]=='-fo'):
  140. return self.setFollow(param[1])
  141. elif(param[0]=='-unfollow' or param[0]=='-uf' or param[0]=='-unfo'):
  142. return self.setUnFollow(param[1])
  143. elif(param[0]=='-if'):
  144. return self.isFollow(param[1])
  145. elif(param[0]=='-block'):
  146. return self.setBlock(param[1])
  147. elif(param[0]=='-msg'):
  148. return self.getMsg(param[1])
  149. elif(param[0]=='-time' or param[0]=='-t'):
  150. return self.setTime(param[1])
  151. elif(param[0]=='-mlist' or param[0]=='-mt'):
  152. return self.getIList(param[1])
  153. elif(param[0]=='-list' or param[0]=='-lt'):
  154. return self.getList(param[1])
  155. elif(param[0]=='-listed' or param[0]=='-ld'):
  156. return self.getListed(param[1])
  157. elif(param[0]=='-s'):
  158. return self.getSearch(param[1])
  159. elif(param[0]=='-switch' or param[0]=='-sw' ):
  160. return self.switchMultiUser(param[1])
  161. elif(param[0]=='-unbind'):
  162. return self.removeMultiUser(param[1])
  163. # command which have two arg
  164. elif(len(param)>=3):
  165. if(param[0]=='-@'):
  166. return self.setReply(param[1],msg)
  167. elif(param[0]=='-d'):
  168. return self.setDM(msg.split(' ')[1],msg)
  169. elif(param[0]=='-rt' or param[0]=='-r'):
  170. return self.setRT(param[1],msg)
  171. elif(param[0]=='-live'):
  172. return self.setMode('live',param[1],param[2])
  173. elif(param[0]=='-tl'):
  174. return self.getUserTL(param[1],param[2])
  175. elif(param[0]=='-s'):
  176. p = re.compile("p\d+$")
  177. if(p.match(param[-1].encode('utf-8'))):
  178. return self.getSearch(' '.join(param[1:-1]),param[-1])
  179. else:
  180. return self.getSearch(' '.join(param[1:]))
  181. elif(param[0]=='-list'):
  182. if(len(param)==3):
  183. return self.getListTL(param[1],param[2])
  184. else:
  185. return self.getListTL(param[1],param[2],param[3])
  186. elif(param[0]=='-v'):
  187. return self.updateOauth(msg.split(' ')[1],msg.split(' ')[2])
  188. elif(param[0]=='-bind'):
  189. return self.addMultiUser(msg.split(' ')[1],msg.split(' ')[2])
  190. return '????????????????????????????-help????'
  191. # =======================================================================
  192. #
  193. # Methods to proccess and execute the commands
  194. #
  195. # =======================================================================
  196. def getHelp(self):
  197. '''
  198. Command: -help/-h
  199. Return help lists
  200. '''
  201. return '''????TwiTalker V2.0.3?\
  202. ????????????? http://twitalker.appspot.com/ ?????\
  203. ???TwiTalker??????????-all??????\n\n\
  204. ? *???????140????????*\n\
  205. ? ?????-v ??? ??\n\
  206. ? ????????(?????????)?-on\n\
  207. ? ????????(???@??????)?-self\n\
  208. ? ????????(??????)?-off\n\
  209. ? ????????(????????)?-live\n\
  210. ? ????????-d ??? ????\n\
  211. ? *?????@??? ??*\n\
  212. ? ?????-follow ??? ? -fo ???\n\
  213. ? ??????: -unfollow ??? ? -uf ???\n\
  214. ? ??????ID???-idon\n\
  215. ? ??????ID???-idoff\n\
  216. ? ???????-bind ??? ??\n\
  217. ? *???????-all*\n\n\
  218. ???????????Follow????Twi_Talker( https://twitter.com/twi_talker )??????? ^ ^'''
  219. def getCommands(self):
  220. '''
  221. Command: -all
  222. List all the commands of twitalker
  223. '''
  224. return '''\
  225. TwiTalker V2.0.3?????\n\n\
  226. ? *???????140????????*\n\
  227. ? ?????-v ??? ??\n\
  228. ? ?????-remove\n\
  229. ? ??TwiTalker???-status ? -st\n\
  230. ? ?????-tool\n\n\
  231. ? ????????(?????????)?-on\n\
  232. ? ????????(???@??????)?-self\n\
  233. ? ????????(??????)?-off\n\
  234. ? *????????(????????)?-live*\n\
  235. ? *???????????-live ???????? ??????ID?* _(?:-live kavin_gray test)_\n\
  236. ? ???????????-time ??? _(???1?5???)_\n\n\
  237. ? ?????-fav ?? _(??????????????P??-fav p2)_\n\
  238. ? ?????-d ?? _(??????????????P??-d p2)_\n\
  239. ? @????-@ ?? _(??????????????P??-@ p2)_\n\
  240. ? ??RT???-rt ?? _(??????????????P??-rt p2)_\n\
  241. ? ????????-me ?? _(??????????????P??-me p2)_\n\
  242. ? ???????-home ?? ? -ho ?? _(??????????????P??-ho p2)_\n\
  243. ? ???????-tl ??? ?? _(??????????????P??-tl twi_talker p2)_\n\
  244. ? ?????-s ??? ?? _(??????????????P??-s twitalker p1)_\n\
  245. ? ???????-list ????? ??????ID ?? ? -lt ????? ??????ID ?? _(??????????????P)_\n\n\
  246. ? ???????-mlist next/pre ? -mt next/pre _(next?pre??????????next?pre?????????)_\n\
  247. ? ???????-list next/pre ? -lt next/pre _(next?pre??????????next?pre?????????)_\n\
  248. ? ???????-listed next/pre ? -ld next/pre _(next?pre??????????next?pre?????????)_\n\n\
  249. ? *?????@??? ??*\n\
  250. ? ???????-@ ??id? ????\n\
  251. ? ???????-msg ??id?\n\
  252. ? ????????????-del\n\
  253. ? ????????-del ??id?\n\
  254. ? ????????-d ??? ????\n\
  255. ? ?????-fav ??id?\n\
  256. ? ???????-unfav ??id?\n\
  257. ? ??RT?-rt ??id? ????(???????)\n\
  258. ? ??RT?-r ??id?\n\n\
  259. ? ???????-status ??? ? -st ???\n\
  260. ? ?????-follow ??? ? -fo ???\n\
  261. ? ??????: -unfollow ??? ? -uf ???\n\
  262. ? ????: -block ???\n\
  263. ? ???????: -if ??\n\n\
  264. ? ??????ID???-idon\n\
  265. ? ??????ID???-idoff\n\n\
  266. ? ????????: -bind\n\
  267. ? ????????-bind ??? ?? \n\
  268. ? ?????????-unbind ???\n\
  269. ? ?????-switch ??? ? -sw ???\n\n'''
  270. def getTool(self):
  271. '''
  272. Command: -tool
  273. List all the commands of twitalker
  274. '''
  275. return '''\
  276. TwiTalker???\n\n\
  277. ? TwiTalker FAQ?http://twitalker.appspot.com/faq \n\n\
  278. ? ??????http://longurl.org/expand\n\n\
  279. ? ?????http://www.mobypicture.com\n\n'''
  280. def setMode(self,mode,name='',list='0'):
  281. '''
  282. Command: -on/-off/-self/-live/-live name list/-idon/-idoff
  283. Set the mode for receiving tweets
  284. '''
  285. db_ser = DBService()
  286. for user in self._results:
  287. if(mode==user.mode and name==''):
  288. return '?????????'+mode+'???\n\n'
  289. if(mode=='on'):
  290. db_ser.setMode(user,'on')
  291. return '???????????????????????????:)\n\n'
  292. elif(mode=='self'):
  293. db_ser.setMode(user,'self')
  294. return '?????????????????????@??????:)\n\n'
  295. elif(mode=='live'):
  296. # -live
  297. if(list=='0'):
  298. if(user.list=='null' or user.list==''):
  299. return '????????????? *-live ???????? ??????ID* ??????\n\n'
  300. else:
  301. db_ser.setMode(user,'live')
  302. return '?????Live???????????'+user.list.replace('/lists/',':').encode('utf-8')+'???:)\n\n'
  303. # -live name list
  304. else:
  305. actoken=user.actoken
  306. actokense=user.actokense
  307. tww = AppEngineTwitter()
  308. tww.set_oauth(self.oauth_key,
  309. self.oauth_secret,
  310. actoken,
  311. actokense)
  312. try:
  313. statecode=tww.getListInfo(name,list)
  314. except:
  315. statecode=400
  316. if(statecode==200):
  317. live=name+'/lists/'+str(list)
  318. db_ser.setMode(user,'live',live)
  319. return '?????Live???????????'+live.replace('/lists/',':').encode('utf-8')+'???:)\n\n'
  320. else:
  321. return '?????????????????????????????????????????\n\n'
  322. elif(mode=='off'):
  323. db_ser.setMode(user,'off')
  324. return '??????????????????????:)\n\n'
  325. elif(mode=='idon'):
  326. db_ser.setMode(user,'idon')
  327. return '?????????ID?????:)\n\n'
  328. elif(mode=='idoff'):
  329. db_ser.setMode(user,'idoff')
  330. return '?????????ID?????:)\n\n'
  331. def getStatus(self,name=''):
  332. '''
  333. Command: -status/-st/-status name/-st name
  334. Return the status of the user
  335. '''
  336. for user in self._results:
  337. actoken=user.actoken
  338. actokense=user.actokense
  339. tww = AppEngineTwitter()
  340. tww.set_oauth(self.oauth_key,
  341. self.oauth_secret,
  342. actoken,
  343. actokense)
  344. retry=2 # set the retry times
  345. statecode=400 # init status code
  346. for times in range(retry):
  347. try:
  348. if(name==''):
  349. statecode=tww.getUserInfo(user.name.encode("utf-8"))
  350. else:
  351. statecode=tww.getUserInfo(name.encode("utf-8"))
  352. if(statecode==200):
  353. break
  354. except:
  355. pass
  356. if(statecode==404):
  357. return '?????????????????????????\n\n'
  358. elif(statecode<>200):
  359. return '?????????????ERROR:'+str(statecode)+'\n\n'
  360. # parsing info for users
  361. content = simplejson.loads(tww.getContent())
  362. respon="??????\n\n"
  363. respon=respon+"???? "+content['screen_name'].encode("utf-8")+"\n\n"
  364. respon=respon+"??? "+content['name'].encode("utf-8")+"\n\n"
  365. respon=respon+"???: "+content['location'].encode("utf-8")+"\n\n"
  366. respon=respon+"???: "+str(content['statuses_count'])+"\n\n"
  367. respon=respon+"???: "+str(content['friends_count'])+"\n\n"
  368. respon=respon+"???: "+str(content['followers_count'])+"\n\n"
  369. respon=respon+"????: "+content['description'].encode("utf-8")+"\n\n"
  370. respon=respon+"????: "+content['status']['text'].encode("utf-8")+"\n\n"
  371. # -st/-status.show more info
  372. if(name==''):
  373. respon=respon+"??????: "
  374. if(user.mode=='self'):
  375. respon=respon+"-self ??????????"
  376. elif(user.mode=='on'):
  377. respon=respon+"-on ??????????"
  378. elif(user.mode=='off'):
  379. respon=respon+"-off ??????????"
  380. else:
  381. respon=respon+"-live ?Live?????????:"+user.list.replace('/lists/',':').encode("utf-8")+")"
  382. respon=respon+"\n\n????????: "+str(user.settime)+"??"
  383. respon=respon+"\n\n??ID??: "
  384. if(user.rt==True):
  385. respon=respon+"????"
  386. else:
  387. respon=respon+"????"
  388. respon=respon+"\n\n"
  389. return respon
  390. def getMention(self,page='p0'):
  391. '''
  392. Command: -@/-@ page
  393. Return tweets from mentions timeline.
  394. '''
  395. for user in self._results:
  396. actoken=user.actoken
  397. actokense=user.actokense
  398. tww = AppEngineTwitter()
  399. tww.set_oauth(self.oauth_key,
  400. self.oauth_secret,
  401. actoken,
  402. actokense)
  403. pg=self._parsePage(page)
  404. if(pg==-1):
  405. return '????????????????p??-@ p1????????\n\n'
  406. if(pg==-2):
  407. return '?????????????????????\n\n'
  408. retry=2 # set the retry times
  409. statecode=400 # init status code
  410. for times in range(retry):
  411. try:
  412. statecode=tww.mentions(0,pg)
  413. except:
  414. pass
  415. if(statecode==200):
  416. break
  417. if(statecode<>200):
  418. return '?????????????ERROR:'+str(statecode)+'\n\n'
  419. contents = simplejson.loads(tww.getContent())
  420. respon=''
  421. respon=self._formatMsg(contents,'ment',user) # get tweets
  422. if(respon<>''):
  423. if(pg==0):
  424. respon='???????? \n\n'+respon
  425. else:
  426. respon='???? (Page '+str(pg)+')? \n\n'+respon
  427. else:
  428. respon='Oops..???????\n\n'
  429. return respon
  430. def getDM(self,page='p0'):
  431. '''
  432. Command: -d/-d page
  433. Return the direct messages.
  434. '''
  435. for user in self._results:
  436. actoken=user.actoken
  437. actokense=user.actokense
  438. tww = AppEngineTwitter()
  439. tww.set_oauth(self.oauth_key,
  440. self.oauth_secret,
  441. actoken,
  442. actokense)
  443. pg=self._parsePage(page)
  444. if(pg==-1):
  445. return '????????????????p??-d p1????????\n\n'
  446. if(pg==-2):
  447. return '?????????????????????\n\n'
  448. retry=2 # set the retry times
  449. statecode=400 # init status code
  450. for times in range(retry):
  451. try:
  452. statecode=tww.getDMessage(0,pg)
  453. except:
  454. pass
  455. if(statecode==200):
  456. break
  457. if(statecode<>200):
  458. return '?????????????ERROR:'+str(statecode)+'\n\n'
  459. contents = simplejson.loads(tww.getContent())
  460. respon=''
  461. respon=self._formatMsg(contents,'dm',user)
  462. if(respon<>''):
  463. if(pg==0):
  464. respon='???????? \n\n'+respon
  465. else:
  466. respon='????? (Page '+str(pg)+')? \n\n'+respon
  467. else:
  468. respon='Oop..???????\n\n'
  469. return respon
  470. def getFav(self,page='p0'):
  471. '''
  472. Command: -fav/-fav page
  473. Return the timeline of ur favorite tweets
  474. '''
  475. for user in self._results:
  476. actoken=user.actoken
  477. actokense=user.actokense
  478. tww = AppEngineTwitter()
  479. tww.set_oauth(self.oauth_key,
  480. self.oauth_secret,
  481. actoken,
  482. actokense)
  483. pg=self._parsePage(page)
  484. if(pg==-1):
  485. return '????????????????p??-fav p1????????\n\n'
  486. if(pg==-2):
  487. return '?????????????????????\n\n'
  488. retry=2 # set the retry times
  489. statecode=400 # init status code
  490. for times in range(retry):
  491. try:
  492. statecode=tww.getFav(pg)
  493. except:
  494. pass
  495. if(statecode==200):
  496. break
  497. if(statecode<>200):
  498. return '?????????????ERROR:'+str(statecode)+'\n\n'
  499. contents = simplejson.loads(tww.getContent())
  500. respon=''
  501. respon=self._formatMsg(contents,'fav',user)
  502. if(respon<>''):
  503. if(pg==0):
  504. respon='????????? \n\n'+respon
  505. else:
  506. respon='?????? (Page '+str(pg)+')? \n\n'+respon
  507. else:
  508. respon='Oop..??????\n\n'
  509. return respon
  510. def getRT(self,page='p0'):
  511. '''
  512. Command: -r/-rt
  513. Return the timeline of ur friends' retweets
  514. '''
  515. for user in self._results:
  516. actoken=user.actoken
  517. actokense=user.actokense
  518. tww = AppEngineTwitter()
  519. tww.set_oauth(self.oauth_key,
  520. self.oauth_secret,
  521. actoken,
  522. actokense)
  523. pg=self._parsePage(page)
  524. if(pg==-1):
  525. return '????????????????p??????RT\n\n'
  526. if(pg==-2):
  527. return '?????????????????????\n\n'
  528. retry=2 # set the retry times
  529. statecode=400 # init status code
  530. for times in range(retry):
  531. try:
  532. statecode=tww.getRt2Me(pg)
  533. except:
  534. pass
  535. if(statecode==200):
  536. break
  537. if(statecode<>200):
  538. return '?????????????ERROR:'+str(statecode)+'\n\n'
  539. contents = simplejson.loads(tww.getContent())
  540. respon=''
  541. respon=self._formatMsg(contents,'r',user)
  542. if(respon<>''):
  543. if(pg==0):
  544. respon='?????RT??? \n\n'+respon
  545. else:
  546. respon='???RT?? (Page '+str(pg)+')? \n\n'+respon
  547. else:
  548. respon='Oop.?????RT??\n\n'
  549. return respon
  550. def getTL(self,page='p0'):
  551. '''
  552. Command: -me/-me page
  553. Return the user timeline
  554. '''
  555. for user in self._results:
  556. actoken=user.actoken
  557. actokense=user.actokense
  558. tww = AppEngineTwitter()
  559. tww.set_oauth(self.oauth_key,
  560. self.oauth_secret,
  561. actoken,
  562. actokense)
  563. pg=self._parsePage(page)
  564. if(pg==-1):
  565. return '????????????????p??-me p1????????\n\n'
  566. if(pg==-2):
  567. return '?????????????????????\n\n'
  568. retry=2 # set the retry times
  569. statecode=400 # init status code
  570. for times in range(retry):
  571. try:
  572. statecode=tww.user_timeline(pg)
  573. except:
  574. pass
  575. if(statecode==200):
  576. break
  577. if(statecode<>200):
  578. return '?????????????ERROR:'+str(statecode)+'\n\n'
  579. contents = simplejson.loads(tww.getContent())
  580. respon=''
  581. respon=self._formatMsg(contents,'tl',user)
  582. if(respon<>''):
  583. if(pg==0):
  584. respon='????????? \n\n'+respon
  585. else:
  586. respon='?????? (Page '+str(pg)+')? \n\n'+respon
  587. else:
  588. respon='Oop...??????\n\n'
  589. return respon
  590. def getHomeTL(self,page='p0'):
  591. '''
  592. Command: -home/-home page/-ho/-ho page
  593. Return the user timeline
  594. '''
  595. for user in self._results:
  596. actoken=user.actoken
  597. actokense=user.actokense
  598. tww = AppEngineTwitter()
  599. tww.set_oauth(self.oauth_key,
  600. self.oauth_secret,
  601. actoken,
  602. actokense)
  603. pg=self._parsePage(page)
  604. if(pg==-1):
  605. return '????????????????p??-home p1????????\n\n'
  606. if(pg==-2):
  607. return '?????????????????????\n\n'
  608. retry=2 # set the retry times
  609. statecode=400 # init status code
  610. for times in range(retry):
  611. try:
  612. statecode=tww.home_timeline(0,pg)
  613. except:
  614. pass
  615. if(statecode==200):
  616. break
  617. if(statecode<>200):
  618. return '?????????????ERROR:'+str(statecode)+'\n\n'
  619. contents = simplejson.loads(tww.getContent())
  620. respon=''
  621. respon=self._formatMsg(contents,'htl',user)
  622. if(respon<>''):
  623. if(pg==0):
  624. respon='??????? \n\n'+respon
  625. else:
  626. respon='???? (Page '+str(pg)+')? \n\n'+respon
  627. else:
  628. respon='Oop...??????\n\n'
  629. return respon
  630. def getUserTL(self,name,page='p0'):
  631. '''
  632. Command: -tl username/-tl username page
  633. Return the user timeline
  634. '''
  635. for user in self._results:
  636. actoken=user.actoken
  637. actokense=user.actokense
  638. tww = AppEngineTwitter()
  639. tww.set_oauth(self.oauth_key,
  640. self.oauth_secret,
  641. actoken,
  642. actokense)
  643. pg=self._parsePage(page)
  644. if(pg==-1):
  645. return '????????????????p??-tl twi_talker p1????????\n\n'
  646. if(pg==-2):
  647. return '?????????????????????\n\n'
  648. retry=2 # set the retry times
  649. statecode=400 # init status code
  650. for times in range(retry):
  651. try:
  652. statecode=tww.user_timeline(pg,name)
  653. except:
  654. pass
  655. if(statecode==200):
  656. break
  657. if(statecode<>200):
  658. return '?????????????ERROR:'+str(statecode)+'\n\n'
  659. contents = simplejson.loads(tww.getContent())
  660. respon=''
  661. respon=self._formatMsg(contents,'tl',user)
  662. if(respon<>''):
  663. if(pg==0):
  664. respon='??????? \n\n'+respon
  665. else:
  666. respon='???? (Page '+str(pg)+')? \n\n'+respon
  667. else:
  668. respon='Oop...??????\n\n'
  669. return respon
  670. def getSearch(self,word='',page='p0'):
  671. '''
  672. Command: -s keyword/-s keyword page
  673. Return the timeline
  674. '''
  675. for user in self._results:
  676. actoken=user.actoken
  677. actokense=user.actokense
  678. tww = AppEngineTwitter()
  679. tww.set_oauth(self.oauth_key,
  680. self.oauth_secret,
  681. actoken,
  682. actokense)
  683. pg=self._parsePage(page)
  684. if(pg==-1):
  685. return '????????????????p??-s twitalker p1????????\n\n'
  686. if(pg==-2):
  687. return '?????????????????????\n\n'
  688. retry=2 # set the retry times
  689. statecode=100 # init status code
  690. for times in range(retry):
  691. try:
  692. statecode=tww.searchTweet(word,pg)
  693. except:
  694. pass
  695. if(statecode==200):
  696. break
  697. if(statecode<>200):
  698. return '?????????????ERROR:'+str(statecode)+'\n\n'
  699. contents = simplejson.loads(tww.getContent())
  700. respon=''
  701. respon=self._formatMsg(contents['results'],'s',user)
  702. if(respon<>''):
  703. if(pg==0):
  704. respon='????? \n\n'+respon
  705. else:
  706. respon='???? (Page '+str(pg)+')? \n\n'+respon
  707. else:
  708. respon='Oop...??????\n\n'
  709. return respon
  710. def getListTL(self,name,list,page='p0'):
  711. '''
  712. Command: -list name list /-list name list page
  713. Return the list timeline
  714. '''
  715. for user in self._results:
  716. actoken=user.actoken
  717. actokense=user.actokense
  718. tww = AppEngineTwitter()
  719. tww.set_oauth(self.oauth_key,
  720. self.oauth_secret,
  721. actoken,
  722. actokense)
  723. pg=self._parsePage(page)
  724. if(pg==-1):
  725. return '????????????????p??-list kavin_gray test p1????????\n\n'
  726. if(pg==-2):
  727. return '?????????????????????\n\n'
  728. url=name+'/lists/'+list
  729. retry=2 # set the retry times
  730. statecode=400 # init status code
  731. for times in range(retry):
  732. try:
  733. statecode=tww.list_timeline(url,0,pg)
  734. except:
  735. pass
  736. if(statecode==200):
  737. break
  738. if(statecode<>200):
  739. return '???????????????????????????\n\n'
  740. contents = simplejson.loads(tww.getContent())
  741. respon=''
  742. respon=self._formatMsg(contents,'lt',user)
  743. if(respon<>''):
  744. if(pg==0):
  745. respon='??????? \n\n'+respon
  746. else:
  747. respon='???? (Page '+str(pg)+')? \n\n'+respon
  748. else:
  749. respon='Oop...??????\n\n'
  750. return respon
  751. def getIList(self,page=''):
  752. '''
  753. Command: -mlist/-mt
  754. Return the list The user've created
  755. '''
  756. db_ser = DBService()
  757. for user in self._results:
  758. actoken=user.actoken
  759. actokense=user.actokense
  760. tww = AppEngineTwitter()
  761. tww.set_oauth(self.oauth_key,
  762. self.oauth_secret,
  763. actoken,
  764. actokense)
  765. # get listcursor
  766. if(page.lower()=='next'):
  767. cr=user.mlistcursor[1].encode('utf-8')
  768. elif(page.lower()=='pre'):
  769. cr=user.mlistcursor[0].encode('utf-8')
  770. elif(page==''):
  771. cr='-1'
  772. else:
  773. return '?????-mlist?????next?pre????????????????\n\n'
  774. retry=2 # set the retry times
  775. statecode=400 # init status code
  776. for times in range(retry):
  777. try:
  778. statecode=tww.getLists(user.name,cr)
  779. except:
  780. pass
  781. if(statecode==200):
  782. break
  783. if(statecode<>200):
  784. return '?????????????ERROR:'+str(statecode)+'\n\n'
  785. contents = simplejson.loads(tww.getContent())
  786. respon=''
  787. for content in reversed(contents['lists']):
  788. respon=respon+'*'+content['user']['screen_name'].encode('utf8')+' '
  789. respon=respon+content['slug'].encode('utf8')+'* : '
  790. respon=respon+'???: '+content['slug'].encode('utf8')+' '
  791. respon=respon+'ID: '+str(content['id'])+' '
  792. respon=respon+'???:'+str(content['member_count'])+' '
  793. respon=respon+'??:'+content['description'].encode('utf8')+'\n\n'
  794. if(respon<>''):
  795. respon=respon.replace("&lt;","<")
  796. respon=respon.replace("&gt;",">")
  797. respon='??????? \n\n'+respon
  798. # setting the listcursor
  799. db_ser.setMListcursor(user,contents['previous_cursor_str'],contents['next_cursor_str'])
  800. else:
  801. respon='Oop.???????\n\n'
  802. return respon
  803. def getList(self,page=''):
  804. '''
  805. Command: -list/-lt
  806. Return the list The user've followed
  807. '''
  808. db_ser = DBService()
  809. for user in self._results:
  810. actoken=user.actoken
  811. actokense=user.actokense
  812. tww = AppEngineTwitter()
  813. tww.set_oauth(self.oauth_key,
  814. self.oauth_secret,
  815. actoken,
  816. actokense)
  817. # get listcursor
  818. if(page.lower()=='next'):
  819. cr=user.listcursor[1].encode('utf-8')
  820. elif(page.lower()=='pre'):
  821. cr=user.listcursor[0].encode('utf-8')
  822. elif(page==''):
  823. cr='-1'
  824. else:
  825. return '?????-list?????next?pre????????????????\n\n'
  826. retry=2 # set the retry times
  827. statecode=400 # init status code
  828. for times in range(retry):
  829. try:
  830. statecode=tww.getSubscriptions(user.name,cr)
  831. except:
  832. pass
  833. if(statecode==200):
  834. break
  835. if(statecode<>200):
  836. return '?????????????ERROR:'+str(statecode)+'\n\n'
  837. contents = simplejson.loads(tww.getContent())
  838. respon=''
  839. for content in reversed(contents['lists']):
  840. respon=respon+'*'+content['user']['screen_name'].encode('utf8')+' '
  841. respon=respon+content['slug'].encode('utf8')+'* : '
  842. respon=respon+'???: '+content['slug'].encode('utf8')+' '
  843. respon=respon+'ID: '+str(content['id'])+' '
  844. respon=respon+'???:'+content['user']['screen_name'].encode('utf8')+' '
  845. respon=respon+'???:'+str(content['member_count'])+' '
  846. respon=respon+'??:'+content['description'].encode('utf8')+'\n\n'
  847. if(respon<>''):
  848. respon=respon.replace("&lt;","<")
  849. respon=respon.replace("&gt;",">")
  850. respon='??????? \n\n'+respon
  851. # setting the listcursor
  852. db_ser.setListcursor(user,contents['previous_cursor_str'],contents['next_cursor_str'])
  853. else:
  854. respon='Oop.????????\n\n'
  855. return respon
  856. def getListed(self,page=''):
  857. '''
  858. Command: -listed/-ld
  859. Return the lists that following the user
  860. '''
  861. db_ser = DBService()
  862. for user in self._results:
  863. actoken=user.actoken
  864. actokense=user.actokense
  865. tww = AppEngineTwitter()
  866. tww.set_oauth(self.oauth_key,
  867. self.oauth_secret,
  868. actoken,
  869. actokense)
  870. # get listcursor
  871. if(page.lower()=='next'):
  872. cr=user.listedcursor[1].encode('utf-8')
  873. elif(page.lower()=='pre'):
  874. cr=user.listedcursor[0].encode('utf-8')
  875. elif(page==''):
  876. cr='-1'
  877. else:
  878. return '?????-listed?????next?pre????????????????\n\n'
  879. retry=2 # set the retry times
  880. statecode=400 # init status code
  881. for times in range(retry):
  882. try:
  883. statecode=tww.getMemberships(user.name,cr)
  884. except:
  885. pass
  886. if(statecode==200):
  887. break
  888. if(statecode<>200):
  889. return '?????????????ERROR:'+str(statecode)+'\n\n'
  890. contents = simplejson.loads(tww.getContent())
  891. respon=''
  892. for content in reversed(contents['lists']):
  893. respon=respon+'*'+content['user']['screen_name'].encode('utf8')+' '
  894. respon=respon+content['slug'].encode('utf8')+'* : '
  895. respon=respon+'???: '+content['slug'].encode('utf8')+' '
  896. respon=respon+'ID: '+str(content['id'])+' '
  897. respon=respon+'???:'+content['user']['screen_name'].encode('utf8')+' '
  898. respon=respon+'???:'+str(content['member_count'])+' '
  899. respon=respon+'??:'+content['description'].encode('utf8')+'\n\n'
  900. if(respon<>''):
  901. respon=respon.replace("&lt;","<")
  902. respon=respon.replace("&gt;",">")
  903. respon='??????? \n\n'+respon
  904. # setting the listcursor
  905. db_ser.setListedcursor(user,contents['previous_cursor_str'],contents['next_cursor_str'])
  906. else:
  907. respon='Oop.????????\n\n'
  908. return respon
  909. def getMsg(self,msgid):
  910. '''
  911. Command: -msg msgid
  912. Return the info of the tweet
  913. '''
  914. for user in self._results:
  915. actoken=user.actoken
  916. actokense=user.actokense
  917. tww = AppEngineTwitter()
  918. tww.set_oauth(self.oauth_key,
  919. self.oauth_secret,
  920. actoken,
  921. actokense)
  922. retry=2 # set the retry times
  923. statecode=400 # init status code
  924. for times in range(retry):
  925. try:
  926. statecode=tww.rtMsg(msgid)
  927. except:
  928. pass
  929. if(statecode==200):
  930. break
  931. if(statecode<>200):
  932. return '????????????id???????????? ERROR:'+str(statecode)+'\n\n'
  933. content = simplejson.loads(tww.getContent())
  934. rex='<a href=.*?>(.*)</a>'
  935. respon='??????: *'+content['user']['screen_name'].encode('utf8')+': '
  936. respon=respon+content['text'].encode('utf8')+'*\n'
  937. # Attach info to the target tweet
  938. respon=respon+self._attachID(content)
  939. respon=respon+'\n\n'
  940. # check for in reply status
  941. in_reply=content['in_reply_to_status_id']
  942. count=0
  943. statecode=400
  944. # get the thread(lateset three tweets) for the tweet
  945. while(count<>3 and str(in_reply).lower()<>'none'):
  946. count+=1
  947. try:
  948. statecode=tww.rtMsg(in_reply)
  949. except:
  950. pass
  951. if(statecode==200):
  952. reply_content = simplejson.loads(tww.getContent())
  953. respon=respon+'????: '+reply_content['user']['screen_name'].encode('utf8')+': '
  954. respon=respon+reply_content['text'].encode('utf8')
  955. # Attach info to the tweet
  956. respon=respon+'\n'+self._attachID(reply_content)
  957. respon=respon+'\n\n'
  958. in_reply=reply_content['in_reply_to_status_id']
  959. else:
  960. break
  961. return respon
  962. def delMsg(self,msgid='0'):
  963. '''
  964. Command: -del/-del msgid
  965. Delete the tweet
  966. '''
  967. for user in self._results:
  968. actoken=user.actoken
  969. actokense=user.actokense
  970. tww = AppEngineTwitter()
  971. tww.set_oauth(self.oauth_key,
  972. self.oauth_secret,
  973. actoken,
  974. actokense)
  975. retry=2 # set the retry times
  976. statecode=400 # init status code
  977. for times in range(retry):
  978. try:
  979. if(msgid=='0'):
  980. # -del command,get the lateset tweet's id
  981. statecode=tww.user_timeline()
  982. else:
  983. # -del msgid
  984. statecode=tww.delMsg(msgid)
  985. except:
  986. pass
  987. if(statecode==200):
  988. break
  989. if(statecode==403):
  990. return '?????????????????????????\n\n'
  991. elif(statecode<>200):
  992. return '?????????????ERROR:'+str(statecode)+'\n\n'
  993. if(msgid<>'0'):
  994. return '???????:)\n\n'
  995. else:
  996. contents = simplejson.loads(tww.getContent())
  997. statecode=400 # init status code
  998. for times in range(retry):
  999. try:
  1000. statecode=tww.delMsg(str(contents[0]['id']))
  1001. except:
  1002. pass
  1003. if(statecode==200):
  1004. return '???????:)\n\n'
  1005. return '?????????????ERROR:'+str(statecode)+'\n\n'
  1006. def setFollow(self,name):
  1007. '''
  1008. Command: -fo name/-follow name
  1009. Follow other user
  1010. '''
  1011. for user in self._results:
  1012. actoken=user.actoken
  1013. actokense=user.actokense
  1014. tww = AppEngineTwitter()
  1015. tww.set_oauth(self.oauth_key,
  1016. self.oauth_secret,
  1017. actoken,
  1018. actokense)
  1019. retry=2 # set the retry times
  1020. statecode=400 # init status code
  1021. for times in range(retry):
  1022. try:
  1023. statecode=tww.follow(name)
  1024. except:
  1025. pass
  1026. if(statecode==200):
  1027. break
  1028. if(statecode<>200):
  1029. respon='?????????????????????????????????????\n\n'
  1030. else:
  1031. respon='????,???????'+name.encode('utf8')+' :)\n\n'
  1032. return respon
  1033. def setUnFollow(self,name):
  1034. '''
  1035. Command: -uf name/-unfollow name
  1036. Unfollow other user
  1037. '''
  1038. for user in self._results:
  1039. actoken=user.actoken
  1040. actokense=user.actokense
  1041. tww = AppEngineTwitter()
  1042. tww.set_oauth(self.oauth_key,
  1043. self.oauth_secret,
  1044. actoken,
  1045. actokense)
  1046. retry=2 # set the retry times
  1047. statecode=400 # init status code
  1048. for times in range(retry):
  1049. try:
  1050. statecode=tww.unfollow(name)
  1051. except:
  1052. pass
  1053. if(statecode==200):
  1054. break
  1055. if(statecode<>200):
  1056. respon='???????????????????????????????????????\n\n'
  1057. else:
  1058. respon='????,?????????'+name.encode('utf8')+' :)\n\n'
  1059. return respon
  1060. def isFollow(self,name):
  1061. '''
  1062. Command: -if name
  1063. Check if other user is following u
  1064. '''
  1065. for user in self._results:
  1066. actoken=user.actoken
  1067. actokense=user.actokense
  1068. tww = AppEngineTwitter()
  1069. tww.set_oauth(self.oauth_key,
  1070. self.oauth_secret,
  1071. actoken,
  1072. actokense)
  1073. retry=2 # set the retry times
  1074. statecode=400 # init status code
  1075. for times in range(retry):
  1076. try:
  1077. if(tww.is_following(name)==True):
  1078. statecode=200
  1079. respon=name.encode('utf8')+' ??????\n\n'
  1080. break
  1081. elif(tww.is_following(name)==False):
  1082. statecode=200
  1083. respon=name.encode('utf8')+' ???????\n\n'
  1084. break
  1085. except:
  1086. pass
  1087. if(statecode<>200):
  1088. respon='??????????????????????????????\n\n'
  1089. return respon
  1090. def setBlock(self,name):
  1091. '''
  1092. Command: -block name
  1093. Block user
  1094. '''
  1095. for user in self._results:
  1096. actoken=user.actoken
  1097. actokense=user.actokense
  1098. tww = AppEngineTwitter()
  1099. tww.set_oauth(self.oauth_key,
  1100. self.oauth_secret,
  1101. actoken,
  1102. actokense)
  1103. retry=2 # set the retry times
  1104. statecode=400 # init status code
  1105. for times in range(retry):
  1106. try:
  1107. statecode=tww.block(name)
  1108. except:
  1109. pass
  1110. if(statecode==200):
  1111. break
  1112. if(statecode==404):
  1113. respon='????????? \n\n'
  1114. elif(statecode<>200):
  1115. respon='?????????????ERROR:%s \n\n'%(str(statecode))
  1116. else:
  1117. respon='????,??????'+name.encode('utf8')+'????? \n\n'
  1118. return respon
  1119. def setFav(self,msgid):
  1120. '''
  1121. Command: -fav msgid
  1122. Set tweet to ur favorite
  1123. '''
  1124. for user in self._results:
  1125. actoken=user.actoken
  1126. actokense=user.actokense
  1127. tww = AppEngineTwitter()
  1128. tww.set_oauth(self.oauth_key,
  1129. self.oauth_secret,
  1130. actoken,
  1131. actokense)
  1132. retry=2 # set the retry times
  1133. statecode=400 # init status code
  1134. for times in range(retry):
  1135. try:
  1136. statecode=tww.addFav(msgid)
  1137. except:
  1138. pass
  1139. if(statecode==200):
  1140. break
  1141. if(statecode<>200):
  1142. return '????????????????????id???????????\n\n'
  1143. return '???????:)\n\n'
  1144. def unFav(self,msgid):
  1145. '''
  1146. Command: -unfav msgid
  1147. delete ur favorite tweets
  1148. '''
  1149. for user in self._results:
  1150. actoken=user.actoken
  1151. actokense=user.actokense
  1152. tww = AppEngineTwitter()
  1153. tww.set_oauth(self.oauth_key,
  1154. self.oauth_secret,
  1155. actoken,
  1156. actokense)
  1157. retry=2 # set the retry times
  1158. statecode=400 # init status code
  1159. for times in range(retry):
  1160. try:
  1161. statecode=tww.unFav(msgid)
  1162. except:
  1163. pass
  1164. if(statecode==200):
  1165. break
  1166. if(statecode<>200):
  1167. return '????????????????????id???????????\n\n'
  1168. return '???????:)\n\n'
  1169. def setReply(self,msgid,tweet):
  1170. '''
  1171. Command: -@ msgid tweet
  1172. Reply to a particular tweet
  1173. '''
  1174. for user in self._results:
  1175. actoken=user.actoken
  1176. actokense=user.actokense
  1177. tww = AppEngineTwitter()
  1178. tww.set_oauth(self.oauth_key,
  1179. self.oauth_secret,
  1180. actoken,
  1181. actokense)
  1182. rex='.*?'+msgid+' (.*)'
  1183. text=re.findall(rex,tweet)
  1184. if(text==[]):
  1185. return '?????????????????????\n\n'
  1186. length=len(unicode(text[0].encode('utf8'),"utf8"))
  1187. if(length>140):
  1188. return '????????????'+str(length)+'?????140?????\n\n'
  1189. retry=3 # set the retry times
  1190. statecode=400 # init status code
  1191. for times in range(retry):
  1192. try:
  1193. statecode=tww.rtMsg(msgid)
  1194. except:
  1195. pass
  1196. if(statecode==200):
  1197. break
  1198. if(statecode<>200):
  1199. return '??????????????????????id???????????\n\n'
  1200. content = simplejson.loads(tww.getContent())
  1201. msg="@"+content['user']['screen_name'].encode('utf8')+" "
  1202. msg=msg+text[0].encode('utf8')
  1203. statecode=400 # init status code
  1204. for times in range(retry):
  1205. try:
  1206. statecode=tww.update(msg,msgid)
  1207. except:
  1208. pass
  1209. if(statecode==200):
  1210. break
  1211. if(statecode==200):
  1212. return '???? '+content['user']['screen_name'].encode('utf8')+' :)\n\n'
  1213. return '?????????\n\n'
  1214. def setDM(self,name,tweet):
  1215. '''
  1216. Command: -d msgid tweet
  1217. Set tweet to ur favorite
  1218. '''
  1219. for user in self._results:
  1220. actoken=user.actoken
  1221. actokense=user.actokense
  1222. tww = AppEngineTwitter()
  1223. tww.set_oauth(self.oauth_key,
  1224. self.oauth_secret,
  1225. actoken,
  1226. actokense)
  1227. rex='.*?'+name+' (.*)'
  1228. text=re.findall(rex,tweet)
  1229. if(text==[]):
  1230. return '?????????????????????\n\n'
  1231. length=len(unicode(text[0].encode('utf8'),"utf8"))
  1232. if(length>140):
  1233. return '????????????'+str(length)+'?????140?????\n\n'
  1234. retry=3 # set the retry times
  1235. statecode=400 # init status code
  1236. for times in range(retry):
  1237. try:
  1238. statecode=tww.sentDMessage(name,text[0].encode('utf8'))
  1239. except:
  1240. pass
  1241. if(statecode==200):
  1242. break
  1243. if(statecode<>200):
  1244. if(statecode==403):
  1245. respon='Oops....??????????????????TA\n\n'
  1246. else:
  1247. respon='???????????????????????\n\n'
  1248. else:
  1249. respon='??????:)\n\n'
  1250. return respon
  1251. def setRT(self,msgid,tweet=''):
  1252. '''
  1253. Command: -rt msgid tweet/-rt msgid
  1254. Old Retweet
  1255. '''
  1256. for user in self._results:
  1257. actoken=user.actoken
  1258. actokense=user.actokense
  1259. tww = AppEngineTwitter()
  1260. tww.set_oauth(self.oauth_key,
  1261. self.oauth_secret,
  1262. actoken,
  1263. actokense)
  1264. if(tweet<>''):
  1265. rex='.*?'+msgid+' (.*)'
  1266. text=re.findall(rex,tweet)
  1267. if(text==[]):
  1268. return '????????RT???????????'
  1269. # get the content of tweet
  1270. retry=3 # set the retry times
  1271. statecode=400 # init status code
  1272. for times in range(retry):
  1273. try:
  1274. statecode=tww.rtMsg(msgid)
  1275. except:
  1276. pass
  1277. if(statecode==200):
  1278. break
  1279. if(statecode<>200):
  1280. return '??????????????????ID??????????\n\n'
  1281. content = simplejson.loads(tww.getContent())
  1282. msg=''
  1283. # attach comment to this tweet
  1284. if(tweet<>''):
  1285. msg=msg+text[0].encode('utf8')+' '
  1286. msg=msg+"RT @"+content['user']['screen_name'].encode('utf8')+": "
  1287. msg=msg+content['text'].encode('utf8')
  1288. try:
  1289. msg=self._urlShorter(msg) # is.gd url shorter
  1290. except:
  1291. pass
  1292. length=len(unicode(msg,"utf8"))
  1293. if(length>140):
  1294. msg='%s...'%msg.decode('utf-8')[:135].encode('utf-8')
  1295. msg=msg+"\n\n"
  1296. statecode=400
  1297. for times in range(retry):
  1298. try:
  1299. statecode=tww.update(msg)
  1300. except:
  1301. pass
  1302. if(statecode==200):
  1303. break
  1304. if(statecode<>200):
  1305. return '?????????????????????\n\n'
  1306. return 'RT????:)'
  1307. def setNewRT(self,msgid):
  1308. '''
  1309. Command: -r msgid
  1310. New Retweet
  1311. '''
  1312. for user in self._results:
  1313. actoken=user.actoken
  1314. actokense=user.actokense
  1315. tww = AppEngineTwitter()
  1316. tww.set_oauth(self.oauth_key,
  1317. self.oauth_secret,
  1318. actoken,
  1319. actokense)
  1320. retry=3 # set the retry times
  1321. statecode=400 # init status code
  1322. for times in range(retry):
  1323. try:
  1324. statecode=tww.rtMsg(msgid)
  1325. except:
  1326. pass
  1327. if(statecode==200):
  1328. break
  1329. if(statecode<>200):
  1330. return '??????????????????ID??????????\n\n'
  1331. content = simplejson.loads(tww.getContent())
  1332. if(content.has_key('retweeted_status')):
  1333. msgid=str(content['retweeted_status']['id'])
  1334. statecode=400
  1335. for times in range(retry):
  1336. try:
  1337. statecode=tww.newRTMsg(msgid)
  1338. except:
  1339. pass
  1340. if(statecode==200):
  1341. break
  1342. if(statecode<>200):
  1343. if(statecode==403):
  1344. respon='?????????????????RT????????\n\n'
  1345. else:
  1346. respon='?????????????????????\n\n'
  1347. else:
  1348. respon='RT????:)\n\n'
  1349. return respon
  1350. def setTime(self,stime):
  1351. '''
  1352. Command: -time stime
  1353. Set refresh rate
  1354. '''
  1355. db_ser = DBService()
  1356. for user in self._results:
  1357. if(not stime.isdigit()):
  1358. return '?????????????-time????????1?5???????????????\n\n'
  1359. settime=int(stime)
  1360. if(settime<1 or settime>5):
  1361. respon='??????????????1?5??(??5??)?????????\n\n'
  1362. else:
  1363. db_ser.setTime(user,settime)
  1364. respon='????????????'+str(settime)+'??:)\n\n'
  1365. return respon
  1366. def setOauth(self,actoken,actokense,add):
  1367. '''
  1368. Command: -v actoken actokense
  1369. Bind to a new account
  1370. '''
  1371. tww = AppEngineTwitter()
  1372. tww.set_oauth(self.oauth_key,
  1373. self.oauth_secret,
  1374. actoken,
  1375. actokense)
  1376. retry=2 # set the retry times
  1377. statecode=400 # init status code
  1378. db_ser = DBService(add)
  1379. for times in range(retry):
  1380. try:
  1381. statecode=tww.verify()
  1382. except:
  1383. pass
  1384. if(statecode==200):
  1385. break
  1386. if(statecode<>200):
  1387. return '???????????????????????:-v ?? ??? ?? ??\n\n'
  1388. else:
  1389. db_ser.setQuery('TwiCount')
  1390. twiNum=db_ser.getQuery()
  1391. num=twiNum.count()
  1392. if(num==0):
  1393. # create counter
  1394. db_ser.createCounter()
  1395. # create user
  1396. db_ser.createUser(1,tww,actoken,actokense)
  1397. return '???????????????????TwiTalker?? ??-help??????????follow????Twi_Talker???????????Enjoy:)\n\n'
  1398. for en in twiNum:
  1399. twiCount=en.count
  1400. if(twiCount>=250):
  1401. return '??????????????? http://twitalker.appspot.com/list ??????????TwiTalker??\n\n'
  1402. # update counter
  1403. cursor=1
  1404. while(cursor<=10):
  1405. db_ser.setQuery(DATABASE[cursor])
  1406. point = db_ser.getQuery()
  1407. if(point.count()<25):
  1408. counter=(cursor-1)*25+point.count()
  1409. # create user
  1410. db_ser.createUser(cursor,tww,actoken,actokense)
  1411. # update counter
  1412. db_ser.setCounter(en,counter+1)
  1413. return '???????????????????TwiTalker?? ??-help??????????follow????Twi_Talker???????????Enjoy:)\n\n'
  1414. cursor=cursor+1
  1415. if(cursor==11):
  1416. return '??????????????? http://twitalker.appspot.com/list ??????????TwiTalker??\n\n'
  1417. def updateOauth(self,actoken,actokense):
  1418. '''
  1419. Command: -v actoken actokense
  1420. Update to a new account
  1421. '''
  1422. db_ser = DBService()
  1423. for user in self._results:
  1424. tww = AppEngineTwitter()
  1425. tww.set_oauth(self.oauth_key,
  1426. self.oauth_secret,
  1427. actoken,
  1428. actokense)
  1429. retry=2 # set the retry times
  1430. statecode=400 # init status code
  1431. for times in range(retry):
  1432. try:
  1433. statecode=tww.verify()
  1434. except:
  1435. pass
  1436. if(statecode==200):
  1437. break
  1438. if(statecode<>200):
  1439. return '???????????????????????:-v ?? ??? ?? ??\n\n'
  1440. try:
  1441. db_ser.defaultUser(user,tww,actoken,actokense)
  1442. return '????????????????:)\n\n'
  1443. except:
  1444. return '??????????\n\n'
  1445. def getMultiUser(self):
  1446. '''
  1447. Command: -bind
  1448. Get lists of the bindding account
  1449. '''
  1450. for user in self._results:
  1451. actoken=user.actoken
  1452. actokense=user.actokense
  1453. tww = AppEngineTwitter()
  1454. tww.set_oauth(self.oauth_key,
  1455. self.oauth_secret,
  1456. actoken,
  1457. actokense)
  1458. try:
  1459. users_dict = simplejson.loads(user.mutilusers)
  1460. new_username=tww.getName()
  1461. respon='?????? :\n\n*%s (????)*\n'%new_username.encode('utf-8')
  1462. for account in users_dict:
  1463. respon=respon+account.encode('utf-8')+'\n'
  1464. respon=respon+'\n?? *-switch ???* ????\n\n'
  1465. return respon
  1466. except:
  1467. return '??????????'
  1468. def addMultiUser(self,actoken,actokense):
  1469. '''
  1470. Command: -bind actoken actokense
  1471. Binding a new account
  1472. '''
  1473. db_ser = DBService()
  1474. for user in self._results:
  1475. tww = AppEngineTwitter()
  1476. tww.set_oauth(self.oauth_key,
  1477. self.oauth_secret,
  1478. actoken,
  1479. actokense)
  1480. retry=2 # set the retry times
  1481. statecode=400 # init status code
  1482. for times in range(retry):
  1483. try:
  1484. statecode=tww.verify()
  1485. except:
  1486. pass
  1487. if(statecode==200):
  1488. break
  1489. if(statecode<>200):
  1490. return '???????????????????????:-bind ?? ??? ?? ??\n\n'
  1491. users_dict = simplejson.loads(user.mutilusers)
  1492. new_username=tww.getName()
  1493. if(users_dict.has_key(new_username.lower()) or new_username.lower()==user.name.lower()):
  1494. return '???????%s???-bind????????\n\n'%new_username
  1495. try:
  1496. db_ser.addMultiUser(user,users_dict,tww,actoken,actokense)
  1497. return '??????????????%s???-bind????????:)\n\n'%new_username.encode('utf-8')
  1498. except:
  1499. return '??????????\n\n'
  1500. def removeMultiUser(self,name):
  1501. '''
  1502. Command: -unbind name
  1503. unbinding a account
  1504. '''
  1505. db_ser = DBService()
  1506. for user in self._results:
  1507. actoken=user.actoken
  1508. actokense=user.actokense
  1509. tww = AppEngineTwitter()
  1510. tww.set_oauth(self.oauth_key,
  1511. self.oauth_secret,
  1512. actoken,
  1513. actokense)
  1514. users_dict = simplejson.loads(user.mutilusers)
  1515. if(name.lower()==user.name.lower()):
  1516. return '?????????????????????\n\n'
  1517. elif(not users_dict.has_key(name.lower())):
  1518. return '????????????????-bind????????\n\n'
  1519. else:
  1520. try:
  1521. db_ser.removeMultiUser(user,users_dict,name)
  1522. return '?????????????%s??????-bind????????:)\n\n'% name.encode('utf-8')
  1523. except:
  1524. return '??????????\n\n'
  1525. def switchMultiUser(self,name):
  1526. '''
  1527. Command: -switch name
  1528. Switch user
  1529. '''
  1530. db_ser = DBService()
  1531. for user in self._results:
  1532. actoken=user.actoken
  1533. actokense=user.actokense
  1534. tww = AppEngineTwitter()
  1535. tww.set_oauth(self.oauth_key,
  1536. self.oauth_secret,
  1537. actoken,
  1538. actokense)
  1539. users_dict = simplejson.loads(user.mutilusers)
  1540. if(name.lower()==user.name.lower()):
  1541. return '?????????\n\n'
  1542. elif(not users_dict.has_key(name.lower())):
  1543. return '????????????????????????????\n\n'
  1544. try:
  1545. db_ser.switchMultiUser(user,users_dict,name.lower())
  1546. return '?????????????%s:)\n\n'% name.encode('utf-8')
  1547. except:
  1548. return '??????????\n\n'
  1549. def updateUser(self):
  1550. '''
  1551. Command: -update
  1552. '''
  1553. db_ser = DBService()
  1554. for user in self._results:
  1555. actoken=user.actoken
  1556. actokense=user.actokense
  1557. tww = AppEngineTwitter()
  1558. tww.set_oauth(self.oauth_key,
  1559. self.oauth_secret,
  1560. actoken,
  1561. actokense)
  1562. retry=4 # set the retry times
  1563. statecode=400 # init status code
  1564. for times in range(retry):
  1565. try:
  1566. statecode=tww.verify()