source: products/quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/browser/keywords.py @ 2889

Last change on this file since 2889 was 2889, checked in by mylan, 14 years ago

Added 'external_keywords_test' option to configlet, refs #233

  • Property svn:eol-style set to native
File size: 2.5 KB
Line 
1import re, commands
2from xml.dom import Node
3
4from zope.interface import implements
5from Products.Five.browser import BrowserView
6
7from Products.CMFPlone.utils import safe_unicode, getSiteEncoding
8from Products.CMFCore.utils import getToolByName
9
10from interfaces import IValidateSEOKeywordsView
11from quintagroup.seoptimizer import SeoptimizerMessageFactory as _
12
13from pyquery import PyQuery as pq
14
15class ValidateSEOKeywordsView(BrowserView):
16
17    implements(IValidateSEOKeywordsView)
18
19    def validateKeywords(self):
20        """ see interface """
21        text = self.request.get('text')
22        ts = getToolByName(self.context, 'translation_service')
23        # extract keywords from text
24        enc = getSiteEncoding(self.context)
25        if text.lower().strip():
26            keywords = filter(None, map(lambda x: safe_unicode(x.strip(), enc),
27                                         text.lower().strip().split('\n')))
28        else:
29            return ts.utranslate(domain='quintagroup.seoptimizer',
30                                 msgid=_(u'Keywords list is empty!'),
31                                 context=self.context)
32        # request html page of context object
33        url = '%s?without_metatag_keywords=1' % self.context.absolute_url()
34
35        # extract words from url page using lynx browser (test page by 'url'
36        # randered without metatag keywords)
37        #import pdb;pdb.set_trace()
38        page_text = commands.getoutput('lynx --dump --nolist %s' % url).lower()
39        if page_text and page_text != 'sh: lynx: command not found':
40            page_text = safe_unicode(page_text, 'utf-8')
41        else:
42            return ts.utranslate(domain='quintagroup.seoptimizer',
43                                 msgid=_(u'Could not find lynx browser!'),
44                                 context=self.context)
45
46        # html = self.context()
47        # page_text = pq("body", html).text()
48
49        # check every keyword on appearing in body of html page
50        result = []
51        for keyword in keywords:
52            keyword_on_page = unicode(len(re.findall(u'\\b%s\\b' % keyword, page_text, re.I|re.U)))
53            result.append(' - '.join((keyword, keyword_on_page)))
54        return ts.utranslate(domain='quintagroup.seoptimizer',
55                             msgid=_(u'number_keywords',
56                               default=u'Number of keywords at page:\n${result}',
57                               mapping={'result':'\n'.join(result)}),
58                             context=self.context)
Note: See TracBrowser for help on using the repository browser.