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

/utility/permalink.py

http://ihere-blog.googlecode.com/
Python | 82 lines | 78 code | 3 blank | 1 comment | 4 complexity | 9e1c753b51850bcf383d5d7d29c7ffaa MD5 | raw file
Possible License(s): LGPL-2.0, LGPL-3.0
  1. # coding=UTF-8
  2. import os
  3. import re
  4. import datetime
  5. import logging
  6. import urllib
  7. from django.http import HttpResponseServerError
  8. from django.http import HttpResponseRedirect,Http404, HttpResponseForbidden,HttpResponse,HttpResponseNotFound
  9. import translate
  10. from google.appengine.ext import db
  11. from django.shortcuts import render_to_response
  12. from google.appengine.api import urlfetch
  13. from django.utils.encoding import force_unicode,smart_str
  14. from django.contrib.sites.models import Site
  15. def call_slug_service_demo(request):
  16. if 'slug_text' not in request.REQUEST:
  17. return HttpResponseNotFound()
  18. slug_text=request.REQUEST['slug_text']
  19. slug_text=force_unicode(urllib.unquote(smart_str(slug_text)))
  20. result= get_slug_from_service(slug_text)
  21. return render_to_response('slug_service_demo.html',{'result':force_unicode(urllib.unquote(smart_str(result)))})
  22. def get_slug_from_service(slug_text):
  23. BASE_URL='http://%s' % (Site.objects.get_current().domain)
  24. page = urlfetch.fetch(
  25. url=BASE_URL+"/slug/service/?"+urllib.quote(smart_str(slug_text)),
  26. payload=urllib.urlencode({'slug_text': urllib.quote(smart_str(slug_text)) ,}),
  27. method=urlfetch.POST,
  28. headers={'Content-Type': 'application/x-www-form-urlencoded'}
  29. )
  30. if page.status_code == 200:
  31. result= page.content
  32. else:
  33. result= ""
  34. return result
  35. def slug_service(request):
  36. if 'slug_text' not in request.REQUEST:
  37. return HttpResponseNotFound()
  38. slug_text=request.REQUEST['slug_text']
  39. slug_text=force_unicode(urllib.unquote(smart_str(slug_text)))
  40. # logging.info('slug_text=%s'%slug_text)
  41. result=get_slug(slug_text)
  42. if result is None:
  43. return HttpResponseNotFound()
  44. else:
  45. return HttpResponse(result)
  46. def get_slug(title):
  47. # logging.info('title=%s'%title)
  48. translated_text=translate.translate_ajax('zh-CN','en', title)
  49. if translated_text is None:
  50. return None
  51. logging.info('translated_text=%s'%translated_text)
  52. try:
  53. slug = get_friendly_url(translated_text)
  54. # logging.info('slug=%s'%slug)
  55. except:
  56. slug = translated_text
  57. from blog.models import Post
  58. search_blog = db.GqlQuery("select * from %s where slug >= :1 and slug < :2 order by slug desc"%Post.kind(),slug, slug+u"\xEF\xBF\xBD").get()
  59. # logging.info('search_blog=%s'%search_blog)
  60. if search_blog is not None:
  61. slug = search_blog.slug+"i"
  62. # logging.info('slug=%s'%slug)
  63. return slug
  64. def get_friendly_url(title):
  65. return re.sub('-+', '-', re.sub('[^\w-]', '', re.sub('\s+', '-', removepunctuation(title).strip()))).lower()
  66. def removepunctuation(str):
  67. punctuation = re.compile(r'[.?!,":;]')
  68. str = punctuation.sub("", str)
  69. return str
  70. def u(s, encoding):
  71. if isinstance(s, unicode):
  72. return s
  73. else:
  74. return unicode(s, encoding)