PageRenderTime 51ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/diy/server.py

https://bitbucket.org/macfri/tornado-openshift-realtime-facebook
Python | 160 lines | 131 code | 27 blank | 2 comment | 1 complexity | bc7f027dc34573e35a2dbf24f10b6c74 MD5 | raw file
Possible License(s): LGPL-2.1
  1. #!/usr/bin/env python
  2. import os
  3. here = os.path.dirname(os.path.abspath(__file__))
  4. os.environ['PYTHON_EGG_CACHE'] = os.path.join(
  5. here, '..', 'misc/virtenv/lib/python2.6/site-packages')
  6. virtualenv = os.path.join(here, '..', 'misc/virtenv/bin/activate_this.py')
  7. execfile(virtualenv, dict(__file__=virtualenv))
  8. import settings
  9. import logging
  10. import tornado.ioloop
  11. from tornado.web import RequestHandler, Application
  12. from sqlalchemy.orm import sessionmaker
  13. from sqlalchemy import create_engine
  14. from models import Dictionary
  15. import urllib
  16. facebook_url = 'https://graph.facebook.com/'
  17. callback_url = 'http://tornado-macfri.rhcloud.com/facebook'
  18. app_id = '143551124125'
  19. app_key = '230871743633613'
  20. app_secret = 'f0013fd2162b433e0c6bf49e93b704c0'
  21. #verify_token = app_secret
  22. verify_token = 'abc'
  23. real_time_url = '%s%s/subscriptions' % (facebook_url, app_id)
  24. url_get_access_token = '%s/oauth/access_token?client_id=%s&client_secret=%s&grant_type=client_credentials' % (
  25. facebook_url, app_key, app_secret)
  26. session = sessionmaker(create_engine(settings.DATABASE_DNS))()
  27. templates = 'templates/dictionary'
  28. class MainHandler(RequestHandler):
  29. def get(self):
  30. self.render('index.html')
  31. class DictionaryClass(RequestHandler):
  32. def get(self):
  33. queryset = session.query(Dictionary).all()
  34. self.render('%s/%s' % (templates, 'list.html'), queryset=queryset)
  35. class DictionaryAddClass(RequestHandler):
  36. def get(self, **kwargs):
  37. status_code = None
  38. if 'status_code' in kwargs:
  39. status_code = kwargs['status_code']
  40. self.render('%s/%s' % (templates, 'add.html'), status_code=status_code)
  41. def post(self):
  42. status_code = 0
  43. title_en = self.get_argument('title_en', '')
  44. title_es = self.get_argument('title_es', '')
  45. if len(title_en) < 1 or len(title_es) < 1:
  46. status_code = 1
  47. else:
  48. dictionary = Dictionary()
  49. dictionary.title_en = title_en
  50. dictionary.title_es = title_es
  51. session.add(dictionary)
  52. try:
  53. session.commit()
  54. except Exception as exc:
  55. logging.error(exc)
  56. status_code = 2
  57. else:
  58. self.redirect('/dictionary')
  59. return
  60. logging.error('status_code: %s' % status_code)
  61. self.get(status_code=status_code)
  62. class Facebook(RequestHandler):
  63. def get(self):
  64. hub_mode = self.get_argument('hub.mode', None)
  65. hub_verify_token = self.get_argument('hub.verify_token', None)
  66. hub_challenge = self.get_argument('hub.challenge', None)
  67. logging.error('hub_mode: %s' % hub_mode)
  68. logging.error('hub_verify_token: %s' % hub_verify_token)
  69. logging.error('hub_challenge: %s' % hub_challenge)
  70. if hub_verify_token == verify_token and hub_mode == 'subscribe':
  71. logging.error('ok verification!')
  72. self.finish(hub_challenge)
  73. def post(self):
  74. body = self.get_argument('body', None)
  75. logging.error('body: %s' % body)
  76. access_token = urllib.urlopen(
  77. url_get_access_token).read().split('=')[1]
  78. logging.error('access_token: %s' % access_token)
  79. response = urllib.urlopen(
  80. '%s?access_token=%s' % (real_time_url, access_token)).read()
  81. logging.error(response)
  82. class FacebookData(RequestHandler):
  83. def get(self):
  84. access_token = urllib.urlopen(
  85. url_get_access_token).read().split('=')[1]
  86. params = urllib.urlencode({
  87. 'access_token': access_token,
  88. 'object': 'page',
  89. 'fields': 'feed, likes',
  90. 'callback_url': callback_url + '?access_token=' + access_token,
  91. 'verify_token': verify_token})
  92. self.finish(dict(url=real_time_url, params=params))
  93. application = Application([
  94. (r"/", MainHandler),
  95. (r"/dictionary", DictionaryClass),
  96. (r"/dictionary/add", DictionaryAddClass),
  97. (r"/facebook/data", FacebookData),
  98. (r"/facebook", Facebook),
  99. ], debug=True)
  100. if __name__ == "__main__":
  101. try:
  102. address = os.environ['OPENSHIFT_INTERNAL_IP']
  103. except:
  104. address = '127.0.0.1'
  105. logging.error(address)
  106. application.listen(8080, address)
  107. tornado.ioloop.IOLoop.instance().start()