PageRenderTime 43ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/apps/life/adapters/twitter.py

https://bitbucket.org/resplin/byteflow
Python | 76 lines | 49 code | 11 blank | 16 comment | 8 complexity | 7d3f94a984ba9a22a15ae3063025b21c MD5 | raw file
Possible License(s): BSD-3-Clause
  1. import re
  2. import urlparse
  3. from django.utils.html import urlize
  4. USER_SUB = (
  5. re.compile(r'(^|\s)@(.+?)\b'),
  6. '\\1<a href="http://twitter.com/\\2">@\\2</a>')
  7. KEYWORD_SUB = (
  8. re.compile(r'(^|\s)#(.+?)\b'),
  9. '\\1<a href="http://twitter.com/#search?q=%23\\2">#\\2</a>')
  10. def _make_links(tweet):
  11. """
  12. Got tweet text and make links to @users and #keywords
  13. >>> _make_links('@yurevich looks good')
  14. '<a href="http://twitter.com/yurevich">@yurevich</a> looks good'
  15. >>> _make_links('example for @yurevich')
  16. 'example for <a href="http://twitter.com/yurevich">@yurevich</a>'
  17. >>> _make_links('examples for @yurevich and @ingspree.')
  18. 'examples for <a href="http://twitter.com/yurevich">@yurevich</a> and <a href="http://twitter.com/ingspree">@ingspree</a>.'
  19. >>> _make_links('let\\'s got to #rupyru')
  20. 'let\\'s got to <a href="http://twitter.com/#search?q=%23rupyru">#rupyru</a>'
  21. >>> _make_links('let\\'s got to #rupyru')
  22. 'let\\'s got to <a href="http://twitter.com/#search?q=%23rupyru">#rupyru</a>'
  23. >>> _make_links('@ingspree, let\\'s got to #rupyru')
  24. '<a href="http://twitter.com/ingspree">@ingspree</a>, let\\'s got to <a href="http://twitter.com/#search?q=%23rupyru">#rupyru</a>'
  25. """
  26. for pattern, repl in (USER_SUB, KEYWORD_SUB):
  27. tweet = re.sub(pattern, repl, tweet)
  28. return tweet
  29. def _clean_name(tweet):
  30. """
  31. Remove amibgous user name from feed
  32. >>> _clean_name('yurevich: jibjib works!')
  33. u'jibjib works!'
  34. """
  35. return tweet.split(u': ', 1)[1]
  36. def _get_tweet_number(tweet_url):
  37. """
  38. Return tweet number by it's url
  39. >>> _get_tweet_number('http://twitter.com/yurevich/statuses/1808292157')
  40. '#1808292157'
  41. >>> _get_tweet_number('http://twitter.com/ingspree/status/1808006316')
  42. '#1808006316'
  43. """
  44. path = urlparse.urlparse(tweet_url)[2]
  45. number = path.split('/')[-1]
  46. return '#%s' % (number,)
  47. def adapt_tweet(feedpost):
  48. """
  49. Adapt Twitter update from feed to appropriate form
  50. """
  51. tweet = feedpost['title']
  52. for action in (_make_links, _clean_name, urlize):
  53. tweet = action(tweet)
  54. feedpost['title'] = _get_tweet_number(feedpost['link'])
  55. feedpost['body'] = u'<p>%s</p>' % tweet
  56. return feedpost
  57. if __name__ == '__main__':
  58. import doctest
  59. doctest.testmod()