source: products/quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/adapters.py @ 1647

Last change on this file since 1647 was 1647, checked in by liebster, 14 years ago

Added Filter keywords by content and tests

  • Property svn:eol-style set to native
File size: 2.7 KB
Line 
1import re, commands
2from zope.interface import implements
3from zope.component import queryMultiAdapter
4from Products.CMFCore.utils import getToolByName
5
6from quintagroup.seoptimizer.interfaces import IMetaKeywords, IMappingMetaTags
7from quintagroup.seoptimizer.util import SortedDict
8
9
10class MetaKeywordsAdapter(object):
11    implements(IMetaKeywords)
12
13    def __init__(self, context):
14        self.context = context
15
16    def getMetaKeywords(self):
17        """ See interface.
18        """
19        request = self.context.REQUEST
20        meta_keywords = ''
21        filtered_keywords = []
22        portal_props = getToolByName(self.context, 'portal_properties')
23        seo_props = getToolByName(portal_props, 'seo_properties', None)
24        seo_context = queryMultiAdapter((self.context, request), name='seo_context')
25        if seo_context:
26            filter_keywords_by_content = seo_props.getProperty('filter_keywords_by_content', None)
27            meta_keywords = list(seo_context.meta_keywords())
28            is_test = self.context.REQUEST.get('without_metatag_keywords', None)
29            if filter_keywords_by_content and meta_keywords and is_test is None:
30                # extract words from url page using lynx browser (test page randered without metatag keywords)
31                text = commands.getoutput('lynx --dump --nolist %s?without_metatag_keywords=1' % self.context.absolute_url()).lower()
32
33                # for tests package
34                if text and 'lynx: can\'t access startfile http://nohost/plone/my_doc?without_metatag_keywords=1' in text:
35                    text = self.context.getText()
36
37                if text and text != 'sh: lynx: command not found':
38                    text = text.decode('utf8')
39                    for meta_keyword in meta_keywords:
40                        if re.compile(u'\\b%s\\b' % meta_keyword.decode('utf8').lower(), re.I|re.U).search(text):
41                            filtered_keywords.append(meta_keyword)
42                    meta_keywords = filtered_keywords
43        return ', '.join(meta_keywords)
44
45
46class MappingMetaTags(object):
47    implements(IMappingMetaTags)
48
49    def __init__(self, context):
50        self.context = context
51        self.portal_props = getToolByName(self.context, 'portal_properties')
52        self.seo_props = getToolByName(self.portal_props, 'seo_properties', None)
53
54    def getMappingMetaTags(self):
55        """ See interface.
56        """
57        metadata_name = SortedDict()
58        if self.seo_props:
59            pmn = self.seo_props.getProperty('metatags_order')
60            pmn = pmn and pmn or ''
61            for mt in [mt.split(' ') for mt in pmn if len(mt.split(' '))==2]:
62                metadata_name[mt[0]] = mt[1]
63        return metadata_name
Note: See TracBrowser for help on using the repository browser.