PageRenderTime 32ms CodeModel.GetById 21ms 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

Large files files are truncated, but you can click here to view the full file

  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

Large files files are truncated, but you can click here to view the full file