Changeset 1624 in products


Ignore:
Timestamp:
Feb 2, 2010 6:11:30 PM (14 years ago)
Author:
liebster
Message:

Changed using the keyword taking into account the presence of at page

Location:
quintagroup.seoptimizer/trunk/quintagroup/seoptimizer
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/__init__.py

    r1463 r1624  
    88from Products.CMFCore.utils import getToolByName 
    99 
    10 from quintagroup.seoptimizer.interfaces import IKeywords, IMappingMetaTags 
     10from quintagroup.seoptimizer.interfaces import IMetaKeywords, IMappingMetaTags 
    1111from quintagroup.seoptimizer.util import SortedDict 
    1212 
     
    5454 
    5555        for key, accessor in metadata_names.items(): 
    56             if accessor == 'seo_keywords': 
    57                 # Set the additional matching keywords, if any 
    58                 adapter = IKeywords(context, None) 
     56            if accessor == 'meta_keywords': 
     57                # Render all the existing keywords for the current content type 
     58                adapter = IMetaKeywords(context, None) 
    5959                if adapter is not None: 
    60                     keywords = adapter.listKeywords() 
     60                    keywords = adapter.getMetaKeywords() 
    6161                    if keywords: 
    6262                        result['keywords'] = keywords 
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/adapters.py

    r1509 r1624  
    44from Products.CMFCore.utils import getToolByName 
    55 
    6 from quintagroup.seoptimizer.interfaces import IKeywords, IMappingMetaTags 
     6from quintagroup.seoptimizer.interfaces import IMetaKeywords, IMappingMetaTags 
    77from quintagroup.seoptimizer.util import SortedDict 
    88 
    99 
    10 class AdditionalKeywords(object): 
    11     implements(IKeywords) 
     10class MetaKeywordsAdapter(object): 
     11    implements(IMetaKeywords) 
    1212 
    1313    def __init__(self, context): 
    1414        self.context = context 
    1515 
    16     def listKeywords(self): 
     16    def getMetaKeywords(self): 
    1717        """ See interface. 
    1818        """ 
     19        request = self.context.REQUEST 
     20        meta_keywords = '' 
     21        filtered_keywords = [] 
    1922        portal_props = getToolByName(self.context, 'portal_properties') 
    2023        seo_props = getToolByName(portal_props, 'seo_properties', None) 
    21  
    22         # now set type is not using because of it unordered behaviour 
    23         #original = set(self.context.qSEO_Keywords()) 
    24         #additional = set(seo_props.additional_keywords) 
    25         #text = set(self.context.SearchableText().split()) 
    26         #keywords = list(additional.intersection(text).union(original)) 
    27  
    28         request = self.context.REQUEST 
    2924        seo_context = queryMultiAdapter((self.context, request), name='seo_context') 
    3025        if seo_context: 
    31             keywords = list(seo_context.seo_keywords()) 
    32             lower_keywords = map(lambda x: x.lower(), keywords) 
    33             additional = seo_props.additional_keywords 
     26            meta_keywords = list(seo_context.meta_keywords()) 
     27            is_test = self.context.REQUEST.get('without_metatag_keywords', None) 
     28            if meta_keywords and is_test is None: 
     29                # extract words from url page using lynx browser (test page randered without metatag keywords) 
     30                text = commands.getoutput('lynx --dump --nolist %s?without_metatag_keywords=1' % self.context.absolute_url()).lower() 
    3431 
    35             is_test = self.context.REQUEST.get('qseo_without_additional_keywords', None) 
     32                # for tests package 
     33                if text and 'lynx: can\'t access startfile http://nohost/plone/my_doc?without_metatag_keywords=1' in text: 
     34                    text = self.context.getText() 
    3635 
    37             if additional and is_test is None: 
    38                 # extract words from url page using lynx browser 
    39                 text = commands.getoutput('lynx --dump --nolist %s?qseo_without_additional_keywords=1' % self.context.absolute_url()).lower() 
    4036                if text and text != 'sh: lynx: command not found': 
    41                     for keyword in additional: 
    42                         if keyword.lower() not in lower_keywords and re.compile(r'\b%s\b' % keyword, re.I).search(text): 
    43                             keywords.append(keyword) 
    44             return ', '.join(keywords) 
    45         return '' 
     37                    for meta_keyword in meta_keywords: 
     38                        if re.compile(r'\b%s\b' % meta_keyword.lower(), re.I).search(text): 
     39                            filtered_keywords.append(meta_keyword) 
     40                    meta_keywords = filtered_keywords 
     41        return ', '.join(meta_keywords) 
    4642 
    4743 
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/browser/keywords.py

    r1491 r1624  
    2323            return ts.utranslate(None, _(u'Keywords list is empty!'), context=self.context) 
    2424        # request html page of context object 
    25         url = '%s?qseo_without_additional_keywords=1' % self.context.absolute_url() 
    26         #try: 
    27             #page = urllib.urlopen(url) 
    28         #except IOError: 
    29             #return _('Could not find requested page') 
     25        url = '%s?without_metatag_keywords=1' % self.context.absolute_url() 
    3026 
    31         #page_html = page.read() 
    32         #if not page_html: 
    33             #return _('Page is empty') 
    34  
    35         # extract words from body from html page 
    36  
    37         # this block work only with valid html 
    38         #doc = minidom.parseString(page_html) 
    39         #rootNode = doc.documentElement 
    40         #bodies = rootNode.getElementsByTagName('body') 
    41         #if len(bodies) > 0: 
    42             #body = bodies[0] 
    43         #else: 
    44             #return _(u'Invalid page html') 
    45         #page_words = [] 
    46         #self.walkTextNodes(body, page_words) 
    47  
    48         # this block work even with invalid html 
    49         #pattern = re.compile('<\s*body[^>]*>(.*?)<\s*/\s*body\s*>', re.S|re.M|re.I) 
    50         #search = pattern.search(page_html) 
    51         #if search: 
    52             #body_html = search.group(1) 
    53         #else: 
    54             #return _('Invalid html code on page') 
    55  
    56         #page_text = self.strip_tags(body_html) 
    57         #page_words = page_text.lower().split() 
    58  
    59         # extract words from url page using lynx browser 
     27        # extract words from url page using lynx browser (test page by 'url' randered without metatag keywords) 
    6028        page_text = commands.getoutput('lynx --dump --nolist %s' % url).lower() 
    6129        if page_text and page_text != 'sh: lynx: command not found': 
    62             #page_words = page_text.lower().split() 
    6330            page_text = page_text.decode('utf8') 
    6431        else: 
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/browser/templates/seo_context_properties.pt

    r1556 r1624  
    5151            Item Properties 
    5252          </legend> 
    53    
     53 
    5454          <div class="field"> 
    5555            <label i18n:translate="label_page_title_tag" for="seo_title"> 
     
    9999              Override 
    100100            </label> 
    101             <br /> 
     101            <br /> 
    102102            <textarea type="text" 
    103103                      id="seo_description" 
     
    131131              Override 
    132132            </label> 
    133             <br /> 
     133            <br /> 
    134134            <textarea id="seo_keywords" 
    135135                      name="seo_keywords:lines" 
     
    189189              Override 
    190190            </label> 
    191             <br /> 
     191            <br /> 
    192192            <input type="text" 
    193193                   id="seo_robots" 
     
    218218              Override 
    219219            </label> 
    220             <br /> 
     220            <br /> 
    221221            <input type="text" 
    222222                   id="seo_distribution" 
     
    250250              Override 
    251251            </label> 
    252             <br /> 
     252            <br /> 
    253253            <div tal:content="error">Validation error output</div> 
    254254            <input type="text" 
     
    282282              Override 
    283283            </label> 
    284             <br /> 
     284            <br /> 
    285285            <table class="custom-metatags-table" 
    286286                   id="datagridwidget-table-seo_custommetatags" 
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/browser/views.py

    r1607 r1624  
    141141        return html_comment and html_comment or ''  
    142142 
    143     def seo_keywords( self ): 
    144         """ Generate Keywords from SEO properties. 
     143    def meta_keywords( self ): 
     144        """ Generate Meta Keywords from SEO properties (global and local) with Subject, 
     145            depending on the options in configlet. 
    145146        """ 
    146147        prop_name = 'qSEO_keywords' 
     
    190191        return keywords 
    191192 
     193    def seo_keywords( self ): 
     194        """ Generate SEO Keywords from SEO properties (global merde local). 
     195        """ 
     196        prop_name = 'qSEO_keywords' 
     197        context = aq_inner(self.context) 
     198        keywords = Set([]) 
     199        pprops = getToolByName(context, 'portal_properties') 
     200        sheet = getattr(pprops, 'seo_properties', None) 
     201 
     202        if sheet: 
     203            settings_use_keywords_sg = sheet.getProperty('settings_use_keywords_sg') 
     204            settings_use_keywords_lg = sheet.getProperty('settings_use_keywords_lg') 
     205            global_keywords = Set(sheet.getProperty('additional_keywords', None)) 
     206            local_keywords = Set(context.getProperty(prop_name, None)) 
     207            keywords = global_keywords | local_keywords 
     208        else: 
     209            keywords = '' 
     210 
     211        return keywords 
     212 
    192213    def seo_canonical( self ): 
    193214        """ Generate canonical URL from SEO properties. 
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/configure.zcml

    r1570 r1624  
    4646  <adapter 
    4747      for="Products.Archetypes.public.BaseObject" 
    48       provides=".interfaces.IKeywords" 
    49       factory=".adapters.AdditionalKeywords" 
     48      provides=".interfaces.IMetaKeywords" 
     49      factory=".adapters.MetaKeywordsAdapter" 
    5050      /> 
    5151 
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/interfaces.py

    r1313 r1624  
    11from zope.interface import Interface 
    22 
    3 class IKeywords(Interface): 
     3class IMetaKeywords(Interface): 
    44    """Handle the available keywords. 
    55    """ 
    6     def listKeywords(): 
     6    def getMetaKeywords(): 
    77        """Returns all the existing keywords for the current content type. 
    88        """ 
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/profiles/default/propertiestool.xml

    r1580 r1624  
    8383   <element value="DC.distribution seo_distribution"/> 
    8484   <element value="description seo_description"/> 
    85    <element value="keywords seo_keywords"/> 
     85   <element value="keywords meta_keywords"/> 
    8686   <element value="robots seo_robots"/> 
    8787   <element value="distribution seo_distribution"/> 
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/tests/testQSEOptimizerAdditionalKeywords.py

    r1608 r1624  
    4949 
    5050    def test_listMetaTags_one(self): 
     51        self.my_doc.setText('<p>foo</p>') 
    5152        self.sp.manage_changeProperties(settings_use_keywords_sg=3, settings_use_keywords_lg=2) 
    5253        self.my_doc.manage_addProperty('qSEO_keywords', ('foo',), 'lines') 
     
    5657 
    5758    def test_listMetaTags_two(self): 
     59        self.my_doc.setText('<p>foo bar</p>') 
    5860        self.sp.manage_changeProperties(settings_use_keywords_sg=3, settings_use_keywords_lg=2) 
    5961        self.my_doc.manage_addProperty('qSEO_keywords', ('foo', 'bar'), 'lines') 
     
    7072 
    7173    def test_additional_keywords_in_listMetaTags_one(self): 
     74        self.my_doc.setText('<p>foo</p>') 
    7275        self.sp.manage_changeProperties(settings_use_keywords_sg=3, settings_use_keywords_lg=2) 
    73         #self.my_doc.setText('<p>foo</p>') # XXX 
    7476        self.sp.additional_keywords = ('foo',) 
    7577        self.html = str(self.publish(self.portal.id+'/my_doc', self.basic_auth)) 
     
    7880 
    7981    def test_additional_keywords_in_listMetaTags_two(self): 
     82        self.my_doc.setText('<p>foo bar</p>') 
    8083        self.sp.manage_changeProperties(settings_use_keywords_sg=3, settings_use_keywords_lg=2) 
    81         #self.my_doc.setText('<p>foo bar</p>') # XXX 
    8284        self.sp.additional_keywords = ('foo', 'bar') 
    8385        self.html = str(self.publish(self.portal.id+'/my_doc', self.basic_auth)) 
     
    8789 
    8890    def setup_testing_render_keywords(self): 
     91        self.my_doc.setText('<p>global local subject</p>') 
    8992        self.sp.additional_keywords = (('global',)) 
    9093        self.my_doc.manage_addProperty('qSEO_keywords', ('local'), 'lines') 
  • quintagroup.seoptimizer/trunk/quintagroup/seoptimizer/tests/testQSEOptimizerResponse.py

    r1609 r1624  
    2727        self.sp.manage_changeProperties(settings_use_keywords_sg=3, settings_use_keywords_lg=2) 
    2828        abs_path = "/%s" % my_doc.absolute_url(1) 
    29         self.form_data = {'seo_description': 'it is description', 'seo_keywords_override:int': 1, 'seo_custommetatags_override:int': 1, 
     29        self.form_data = {'seo_description': 'it is description, test keyword1', 'seo_keywords_override:int': 1, 'seo_custommetatags_override:int': 1, 
    3030                        'seo_robots_override:int': 1, 'seo_robots': 'ALL', 'seo_description_override:int': 1, 'seo_canonical_override:int': 1, 
    3131                        'seo_keywords:list': 'keyword1', 'seo_html_comment': 'no comments', 
     
    6565 
    6666    def testDescription(self): 
    67         m = re.match('.*(<meta\s+(?:(?:name="description"\s*)|(?:content="it is description"\s*)){2}/>)', self.html, re.S|re.M) 
     67        m = re.match('.*(<meta\s+(?:(?:name="description"\s*)|(?:content="it is description, test keyword1"\s*)){2}/>)', self.html, re.S|re.M) 
    6868        self.assert_(m, 'Description not set in') 
    6969 
     
    8888        metatags_order = [t.split(' ')[0] for t in mtop if len(t.split(' '))==2 and t.split(' ')[0] in VIEW_METATAGS] 
    8989        m = re.search('.*'.join(['<meta.*name="%s".*/>' %t for t in metatags_order]), self.html, re.S|re.M) 
     90        #m = re.match('.*'.join(['.*(<meta\s+(?:(?:name="%s"\s*)|(?:content=".*"\s*)){2}/>)' %t for t in metatags_order]), self.html, re.S|re.M) 
    9091        self.assert_(m, "Meta tags order not supported.") 
    9192 
Note: See TracChangeset for help on using the changeset viewer.