LINUX.ORG.RU

RSS


0

0

#!/usr/bin/python
# -*- coding: koi8-r -*-
#
# скрипт вытаскивает новости с главной страницы LOR и 
# делает из них нормальный rss. несложно доработать
# для других сайтов.
#
# автор anonymous
# лицензия GPL2
#

import sys, os, re

BASEDIR="/var/www/"

HEAD="""<?xml version="1.0" encoding="%s"?>

<rss version="0.91">
<channel>
<description>%s</description>
<link>%s</link>
"""

ITEM="""<item>
<title>%s</title>
<link>%s</link>
<description>%s</description>
</item>"""

TAIL="""</channel>
</rss>"""

class SiteDump:
        url=""
        out=""
        title="Untitled"
        encoding="ISO-8859-1"

        def __init__(self):
                self.links={}
                self.text=""

        def dump(self,basedir=""):
                data=os.popen("lynx -dump %s"%self.url).read()
                # split references section
                i=data.rindex("\nReferences\n")
                self.text=data[:i]
                self.links.clear()
                for l in data[i:].splitlines():
                        if re.match('^\s*\d{1,}. ',l):
                                id,link=l.split('. ',1)
                                self.links[int(id)]=link

                out = self.out and open(self.out,'w') or sys.stdout
                print >> out, HEAD%(self.encoding,self.title,self.url)
                for s in self.split_items():
                        print >> out, ITEM%self.parse_item(s)
                print >> out, TAIL
                out.flush()

        def split_items(self):
                "yield sequence of text pieces"
                pass
                pass
        def parse_item(self,text):
                "return (title,link,description) or None"
                pass

        def find_links(self,text):
                "return list of links found and text with removed references"
                ids=[]
                add=lambda m: ids.append(int(m.groups()[0])) and ''
                text= re.sub('\[(\d{1,})\]', add, text)
                links = filter(None, [ self.links.get(id,'') for id in ids ])
                return links, text

class LOR(SiteDump):
        url="http://linux.org.ru"
        out=BASEDIR+"linux-org-ru.rss"
        title="Русская информация об ОС LINUX"
        encoding="koi8-r"

        def split_items(self):
                return re.split('_{50,}',self.text)[1:-2]

        def parse_item(self,s):
                links, s = self.find_links(s)
                ll=[l.strip() for l in s.splitlines()]
                title=ll[2]
                description = '\n'.join(ll[4:])
                link = len(links) and links[0] or ''
                return title, link, description

if __name__=='__main__':
        LOR().dump()
anonymous

Ответ на: Re: RSS от jackill

Re: Re: RSS

тот что есть он без текстов новостей

anonymous ()
Ответ на: Re: Re: RSS от anonymous

Re: Re: Re: RSS

Если бы ты догадался воспользоваться поиском, то узнал бы, что текста новостей нет не потому, что тут все убогие, а потому, что maxcom считает, что это снизит посещаемость на сайте.

jackill ★★★★★ ()
Ответ на: Re: Re: Re: RSS от jackill

Re: Re: Re: Re: RSS

все обсуждения про rss я читал, но лично мне удобнее rss
с полным текстом новостей.

поскольку скрипт использует lynx для загрузки сайта, на
посещаемость это никак не влияет, вне зависимости от того
что понимается под посещаемостью.

с другой стороны, если существующий rss предназначен в первую
очередь для live bookmarks в firefox, смысла в помещении
туда текстов новостей действительно нет.

anonymous ()
Ответ на: Re: Re: Re: RSS от jackill

Re: Re: Re: Re: RSS

> а потому, что maxcom считает, что это снизит посещаемость на сайте.

А чего так трястись над посещаемостью?

anonymous ()
Ответ на: Re: Re: Re: Re: RSS от anonymous

Re: Re: Re: Re: Re: RSS

Хз. Я рекламы тут не вижу. Может хиты на mail.ru дабы пропиарить хостера?

Я бы тоже от текста не отказался.

jackill ★★★★★ ()
Ответ на: Re: Re: Re: Re: Re: RSS от jackill

Re: Re: Re: Re: Re: Re: RSS

лучше сделать еще один вариант экспорта, пусть народ выбирает из этих двух.

axiz ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.