Teraz jest 18 kwi 2024 3:21:37




Utwórz nowy wątek Ten wątek jest zamknięty. Nie możesz w nim pisać ani edytować postów.  [ Posty: 242 ]  Przejdź na stronę Poprzednia strona  1 ... 12, 13, 14, 15, 16, 17  Następna strona
Polskie treści w calibre - komentarze 
Autor Wiadomość
Użytkownik

Dołączył(a): 21 mar 2011 17:12:46
Posty: 517
Lokalizacja: Gdańsk
eCzytnik: K3, K4, KT, KPW, M92B, Galaxy Note
Post Re: Polskie treści w calibre - komentarze
@brawurka2011, nie musisz pisać wielkimi literami.

Recepta działa poprawnie, a nie pobiera nowych numerów dlatego, że te z 2012 są jeszcze zablokowane.

Tutaj moja poprawka na ostatnie numery z 2011

Kod:

#!/usr/bin/env  python

__license__   = 'GPL v3'
__copyright__ = '2010, matek09, matek09@gmail.com'
__copyright__ = 'Modified 2011,  Mariusz Wolek <mariusz_dot_wolek @ gmail dot com>'

from calibre.web.feeds.news import BasicNewsRecipe
import re

class Wprost(BasicNewsRecipe):
        EDITION = 0
        FIND_LAST_FULL_ISSUE = True
        EXCLUDE_LOCKED = True
        ICO_BLOCKED = 'http://www.wprost.pl/G/icons/ico_blocked.gif'

        title = u'Wprost'
        __author__ = 'matek09'
        description = 'Weekly magazine'
        encoding = 'ISO-8859-2'
        no_stylesheets = True
        language = 'pl'
        remove_javascript = True

        remove_tags_before = dict(dict(name = 'div', attrs = {'id' : 'print-layer'}))
        remove_tags_after = dict(dict(name = 'div', attrs = {'id' : 'print-layer'}))

        '''keep_only_tags =[]
        keep_only_tags.append(dict(name = 'table', attrs = {'id' : 'title-table'}))
        keep_only_tags.append(dict(name = 'div', attrs = {'class' : 'div-header'}))
        keep_only_tags.append(dict(name = 'div', attrs = {'class' : 'div-content'}))
        keep_only_tags.append(dict(name = 'div', attrs = {'class' : 'def element-autor'}))'''

        preprocess_regexps = [(re.compile(r'style="display: none;"'), lambda match: ''),
        (re.compile(r'display: block;'), lambda match: ''),
        (re.compile(r'\<td\>\<tr\>\<\/table\>'), lambda match: ''),
        (re.compile(r'\<table .*?\>'), lambda match: ''),
        (re.compile(r'\<tr>'), lambda match: ''),
        (re.compile(r'\<td .*?\>'), lambda match: '')]

        remove_tags =[]
        remove_tags.append(dict(name = 'div', attrs = {'class' : 'def element-date'}))
        remove_tags.append(dict(name = 'div', attrs = {'class' : 'def silver'}))
        remove_tags.append(dict(name = 'div', attrs = {'id' : 'content-main-column-right'}))

        extra_css = '''
                                        .div-header {font-size: x-small; font-weight: bold}
                                        '''
#h2 {font-size: x-large; font-weight: bold}
        def is_blocked(self, a):
                if a.findNextSibling('img') is None:
                        return False
                else:
                        return True



        def find_last_issue(self):
                soup = self.index_to_soup('http://www.wprost.pl/archiwum/?Y=2011')
                a = 0
                if self.FIND_LAST_FULL_ISSUE:
                        ico_blocked = soup.findAll('img', attrs={'src' : self.ICO_BLOCKED})
                        a = ico_blocked[-1].findNext('a', attrs={'title' : re.compile('Zobacz spis tre.ci')})
                else:
                        a = soup.find('a', attrs={'title' : re.compile('Zobacz spis tre.ci')})
                self.EDITION = a['href'].replace('/tygodnik/?I=', '')
                self.cover_url = a.img['src']



        def parse_index(self):
                self.find_last_issue()
                soup = self.index_to_soup('http://www.wprost.pl/tygodnik/?I=' + self.EDITION)
                feeds = []
                for main_block in soup.findAll(attrs={'class':'main-block-s3 s3-head head-red3'}):
                        articles = list(self.find_articles(main_block))
                        if len(articles) > 0:
                                section = self.tag_to_string(main_block)
                                feeds.append((section, articles))
                return feeds

        def find_articles(self, main_block):
                for a in main_block.findAllNext( attrs={'style':['','padding-top: 15px;']}):
                        if a.name in "td":
                                break
                        if self.EXCLUDE_LOCKED & self.is_blocked(a):
                                continue
                        yield {
                                'title' : self.tag_to_string(a),
                                'url'   : 'http://www.wprost.pl' + a['href'],
                                'date'  : '',
                                'description' : ''
                                }

_________________


12 sty 2012 18:19:45
Zobacz profil WWW
Użytkownik

Dołączył(a): 09 sty 2012 15:04:50
Posty: 5
eCzytnik: Kindle Touch
Post Re: Polskie treści w calibre - komentarze
Dziękuje za odpowiedź !!!


13 sty 2012 1:28:58
Zobacz profil
Użytkownik

Dołączył(a): 17 maja 2011 20:06:17
Posty: 4
eCzytnik: kindle 3
Post Re: Polskie treści w calibre - komentarze
Czy mógłby mi ktoś wytłumaczyć jak napisać receptę używając funkcji parse_index, albo zrobić receptę do strony mp.pl ?
Byłbym bardzo wdzięczny.


19 sty 2012 22:34:18
Zobacz profil
Użytkownik

Dołączył(a): 11 cze 2010 12:08:10
Posty: 126
eCzytnik: Kindle Paperwhite 2, Onyx Boox M92
Post Re: Polskie treści w calibre - komentarze
soxymora napisał(a):
Tutaj moja poprawka na ostatnie numery z 2011

Jednak samiusieńkiego ostatniego numeru to nie chce ugryźć, więc zrobiłem taką podmiankę metody (oczywiście to też tylko chwilowe):
Kod:
        def find_last_issue(self):
                soup = self.index_to_soup('http://www.wprost.pl/archiwum/')
                a = 0
                if self.FIND_LAST_FULL_ISSUE:
                        soup = self.index_to_soup('http://www.wprost.pl/archiwum/?Y=2011')
                        ico_blocked = soup.findAll('img', attrs={'src' : self.ICO_BLOCKED})
                        if len(ico_blocked) > 0:
                                a = ico_blocked[-1].findNext('a', attrs={'title' : re.compile('Zobacz spis tre.ci')})
                        else:
                                a = soup.find('a', attrs={'title' : re.compile('Zobacz spis tre.ci')})
                else:
                        a = soup.find('a', attrs={'title' : re.compile('Zobacz spis tre.ci')})
                self.EDITION = a['href'].replace('/tygodnik/?I=', '')
                self.cover_url = a.img['src']



24 sty 2012 20:36:47
Zobacz profil
Użytkownik

Dołączył(a): 07 lis 2011 11:21:17
Posty: 20
eCzytnik: Nook ST, Kindle 4
Post Re: Polskie treści w calibre - komentarze
nowa recepta na Duży Format
https://raw.github.com/luka6000/kalibra ... mat.recipe

Nie używa gazetowego, kiepskiego RSSa tylko parsuje bezpośrednio www. Pobiera również bieżącą okładkę, decyzja o pobraniu artykułu pobierana jest na podstawie daty ostatniej aktualizacji. Wyborcza ma tę stronę mało stabilną, więc mogą być zmiany.

Oprócz tego, polecam zaktualizowaną Politykę
https://raw.github.com/luka6000/kalibra ... yka.recipe

oraz Atrament i Dwutygodnik
https://raw.github.com/luka6000/kalibra ... ent.recipe
https://raw.github.com/luka6000/kalibra ... nik.recipe

Pobieranie tych ostatnich zrobione jest w taki sposób, że niezależnie od formatu źródłowego (w tym wypadku epub), magazyn do biblioteki calibre trafia w zdefiniowanym przez użytkownika preferowanym formacie.

_________________
https://github.com/luka6000/kalibrator moje recepty calibre


28 sty 2012 1:54:26
Zobacz profil
Użytkownik

Dołączył(a): 21 mar 2011 17:12:46
Posty: 517
Lokalizacja: Gdańsk
eCzytnik: K3, K4, KT, KPW, M92B, Galaxy Note
Post Re: Polskie treści w calibre - komentarze
Krytyka Polityczna :
https://raw.github.com/t3d/kalibrator/f ... /kp.recipe

Res Publica Nowa:
https://raw.github.com/t3d/kalibrator/m ... ica.recipe

MyApple.pl
https://raw.github.com/t3d/kalibrator/m ... _pl.recipe

_________________


31 sty 2012 7:55:11
Zobacz profil WWW
SwiatCzytnikow.pl
Avatar użytkownika

Dołączył(a): 14 sie 2010 11:00:21
Posty: 1873
eCzytnik: kindle, onyx, nook, kobo, pb, ipad
Post Re: Polskie treści w calibre - komentarze
luka6000 napisał(a):
nowa recepta na Duży Format
https://raw.github.com/luka6000/kalibra ... mat.recipe

Nie używa gazetowego, kiepskiego RSSa tylko parsuje bezpośrednio www. Pobiera również bieżącą okładkę, decyzja o pobraniu artykułu pobierana jest na podstawie daty ostatniej aktualizacji. Wyborcza ma tę stronę mało stabilną, więc mogą być zmiany.


Właśnie poczytałem przy śniadaniu, wszystko w porządku, jest troszkę śmieci (jak znaki </> na poczatku artykułu), ale o niebo lepiej niż przy starej wersji. :-)
Nie ma ilustracji, no ale DF jest teraz już w oficjalnej wersji GW w Amazonie, więc komu brakuje, może kupić.

_________________
http://swiatczytnikow.pl (dawniej: Świat Kindle)
http://ebooki.swiatczytnikow.pl - (prawie) wszystkie polskie e-booki w jednym miejscu, czyli porównywarka ofert księgarni.


31 sty 2012 8:24:54
Zobacz profil WWW
Użytkownik

Dołączył(a): 21 mar 2011 17:12:46
Posty: 517
Lokalizacja: Gdańsk
eCzytnik: K3, K4, KT, KPW, M92B, Galaxy Note
Post Re: Polskie treści w calibre - komentarze
Wysokie Obcasy:
https://raw.github.com/t3d/kalibrator/m ... asy.recipe

_________________


31 sty 2012 17:49:50
Zobacz profil WWW
Użytkownik

Dołączył(a): 03 maja 2011 16:20:28
Posty: 8
eCzytnik: Kindle
Post Re: Polskie treści w calibre - komentarze
Ackbar napisał(a):
Pytanie 1.

Coś dalej nie tak z receptą Nowej Fantastyki pod Kindle 3. Jak nie działała, tak nie działa, nawet po konwersji.
Da się temu jakoś zaradzić?


Bo Kindle bardzo nie lubi stron obłożonych tagami <table></table> a poza tym tam jest jeszcze formatowanie <center> i mnóstwo obrazków. Na szybko:
Kod:
# -*- coding: utf-8 -*-
from calibre.web.feeds.news import BasicNewsRecipe
import re

class Nowa_Fantastyka(BasicNewsRecipe):
    title          = u'Nowa Fantastyka'
    oldest_article = 7
    __author__        = 'fenuks'
    __modified_by__   = 'zaslav'
    language       = 'pl'
    encoding='latin2'
    description ='site for fantasy readers'
    category='fantasy'
    max_articles_per_feed = 100
    INDEX='http://www.fantastyka.pl/'
    no_stylesheets=True
    needs_subscription = 'optional'
    remove_tags_before=dict(attrs={'class':'naglowek2'})
    #remove_tags_after=dict(name='span', attrs={'class':'naglowek-oceny'})
    remove_tags_after=dict(name='td', attrs={'class':'belka1-bot'})
    remove_tags=[dict(attrs={'class':'avatar2'}), dict(name='span', attrs={'class':'alert-oceny'}), dict(name='img', attrs={'src':['obrazki/sledz1.png', 'obrazki/print.gif', 'obrazki/mlnf.gif']}), dict(name='b', text='Dodaj komentarz'),dict(name='a', attrs={'href':'http://www.fantastyka.pl/10,1727.html'})]
    preprocess_regexps = [(re.compile(r'style="display: none;"'), lambda match: ''),
    (re.compile(r'display: block;'), lambda match: ''),
    (re.compile(r'\<td\>\<tr\>\<\/table\>'), lambda match: ''),
    (re.compile(r'\<table .*?\>'), lambda match: ''),
    (re.compile(r'\<tr>'), lambda match: ''),
    (re.compile(r'\<td .*?\>'), lambda match: ''),
    (re.compile(r'\<img .*?\>'), lambda match: ''),
    (re.compile(r'\<center\>'), lambda match: ''),
    (re.compile(r'\<div align=\"center\" .*?\>'), lambda match: '')]



    def find_articles(self, url):
        articles = []
        soup=self.index_to_soup(url)
        tag=soup.find(attrs={'class':'belka1-tlo-m'})
        art=tag.findAll(name='a', attrs={'class':'a-box'})
        for i in art:
            title=i.string
            url=self.INDEX+i['href']
            #date=soup.find(id='footer').ul.li.string[41:-1]
            articles.append({'title' : title,
                   'url'   : url,
                   'date'  : '',
                   'description' : ''
                    })
        return articles

    def parse_index(self):
         feeds = []
         feeds.append((u"Opowiadania", self.find_articles('http://www.fantastyka.pl/3.html')))
         feeds.append((u"Publicystyka", self.find_articles('http://www.fantastyka.pl/6.html')))
         feeds.append((u"Hype Park", self.find_articles('http://www.fantastyka.pl/9.html')))

         return feeds


    def get_cover_url(self):
        soup = self.index_to_soup('http://www.fantastyka.pl/1.html')
        cover=soup.find(name='img', attrs={'class':'okladka'})
        self.cover_url=self.INDEX+ cover['src']
        return getattr(self, 'cover_url', self.cover_url)

    def get_browser(self):
        br = BasicNewsRecipe.get_browser()
        if self.username is not None and self.password is not None:
            br.open('http://www.fantastyka.pl/')
            br.select_form(nr=0)
            br['login']   = self.username
            br['pass'] = self.password
            br.submit()
        return br




Nie jest elegancko, tagi <div> nie parsują się po tej rzeźni ale działa. Przynajmniej u mnie.


Ostatnio edytowano 31 sty 2012 23:37:04 przez zaslav, łącznie edytowano 2 razy



31 sty 2012 22:43:36
Zobacz profil
Admin

Dołączył(a): 13 cze 2008 14:47:02
Posty: 2835
Lokalizacja: Gdańsk
eCzytnik: kindle
Post Re: Polskie treści w calibre - komentarze
chociaż dodaj siebie jako autora, bo Ci fenuks proces o podszywanie się pod niego wytoczy :P

_________________
Zgred - Rafał Ziemkiewicz napisał(a):
Dziś trzeba pisać o mieczach, czarach, toporach i wojowniczkach w blaszanych bikini, wszystko inne to już jest nisza w niszy. Albo o nastoletnich wampirach.
Porównywarka cen ebooków


31 sty 2012 22:49:00
Zobacz profil WWW
Użytkownik

Dołączył(a): 03 maja 2011 16:20:28
Posty: 8
eCzytnik: Kindle
Post Re: Polskie treści w calibre - komentarze
Dodałem :) ale ta receptura wymaga dopracowania. Jak ktoś ma ochotę to zapraszam :)


31 sty 2012 22:58:53
Zobacz profil
Użytkownik

Dołączył(a): 21 mar 2011 17:12:46
Posty: 517
Lokalizacja: Gdańsk
eCzytnik: K3, K4, KT, KPW, M92B, Galaxy Note
Post Re: Polskie treści w calibre - komentarze
Racjonalista.pl
https://raw.github.com/t3d/kalibrator/m ... sta.recipe

Poradnia Językowa PWN
https://raw.github.com/t3d/kalibrator/m ... pwn.recipe

Antyweb.pl
https://raw.github.com/t3d/kalibrator/m ... web.recipe

_________________


05 lut 2012 0:48:23
Zobacz profil WWW
Użytkownik

Dołączył(a): 16 lip 2011 14:21:10
Posty: 133
eCzytnik: Kindle 3
Post Re: Polskie treści w calibre - komentarze
Dzięki zaslav za poprawki, po dokonaniu ostatecznych szlifów kod receptury to:
Spoiler!
Kod:
# -*- coding: utf-8 -*-
from calibre.web.feeds.news import BasicNewsRecipe
import re

class Nowa_Fantastyka(BasicNewsRecipe):
    title          = u'Nowa Fantastyka'
    oldest_article = 7
    __author__        = 'fenuks'
    __modified_by__   = 'zaslav'
    language       = 'pl'
    encoding='latin2'
    description ='site for fantasy readers'
    category='fantasy'
    masthead_url='http://farm5.static.flickr.com/4133/4956658792_7ba7fbf562.jpg'
    #extra_css='.tytul {font-size: 20px;}' #not working
    max_articles_per_feed = 100
    INDEX='http://www.fantastyka.pl/'
    no_stylesheets=True
    needs_subscription = 'optional'
    remove_tags_before=dict(attrs={'class':'naglowek2'})
    #remove_tags_after=dict(name='span', attrs={'class':'naglowek-oceny'})
    remove_tags_after=dict(name='form', attrs={'name':'form1'})
    remove_tags=[dict(attrs={'class':['avatar2', 'belka-margin', 'naglowek2']}), dict(name='span', attrs={'class':'alert-oceny'}), dict(name='img', attrs={'src':['obrazki/sledz1.png', 'obrazki/print.gif', 'obrazki/mlnf.gif']}), dict(name='b', text='Dodaj komentarz'),dict(name='a', attrs={'href':'http://www.fantastyka.pl/10,1727.html'}), dict(name='form')]
    preprocess_regexps = [
    (re.compile(r'\<table .*?\>'), lambda match: ''),
    (re.compile(r'\<td.*?\>'), lambda match: ''),
    (re.compile(r'\<center\>'), lambda match: '')]




    def find_articles(self, url):
        articles = []
        soup=self.index_to_soup(url)
        tag=soup.find(attrs={'class':'belka1-tlo-m'})
        art=tag.findAll(name='a', attrs={'class':'a-box'})
        for i in art:
            title=i.string
            url=self.INDEX+i['href']
            #date=soup.find(id='footer').ul.li.string[41:-1]
            articles.append({'title' : title,
                   'url'   : url,
                   'date'  : '',
                   'description' : ''
                    })
        return articles

    def parse_index(self):
         feeds = []
         feeds.append((u"Opowiadania", self.find_articles('http://www.fantastyka.pl/3.html')))
         feeds.append((u"Publicystyka", self.find_articles('http://www.fantastyka.pl/6.html')))
         feeds.append((u"Hype Park", self.find_articles('http://www.fantastyka.pl/9.html')))

         return feeds


    def get_cover_url(self):
        soup = self.index_to_soup('http://www.e-kiosk.pl/nowa_fantastyka')
        self.cover_url='http://www.e-kiosk.pl' + soup.find(name='a', attrs={'class':'img'})['href']
        return getattr(self, 'cover_url', self.cover_url)

    def get_browser(self):
        br = BasicNewsRecipe.get_browser()
        if self.username is not None and self.password is not None:
            br.open('http://www.fantastyka.pl/')
            br.select_form(nr=0)
            br['login']   = self.username
            br['pass'] = self.password
            br.submit()
        return br

    def preprocess_html(self, soup):       
        for item in soup.findAll(style=True):
            del item['style']
        for item in soup.findAll(font=True):
            del item['font']
        for item in soup.findAll(align=True):
            del item['align']
        for item in soup.findAll(name='tr'):
            item.name='div'
        title=soup.find(attrs={'class':'tytul'})
        if title:
            title['style']='font-size: 20px; font-weight: bold;'
        self.log.warn(soup)
        return soup

Za jakiś czas zgłoszę poprawki do calibre, w tym czasie zainteresowani mogą użyć powyższego kodu.
Ponadto napisałem kilka nowych recept i jeszcze więcej starych poprawiłem, z grubsza je przetestowałem, ale z racji na niemałą ich ilość mogło mi coś umknąć, więc zamieszczam je prewencyjnie pod tym odnośnikiem do dogłębniejszych testów dla wszystkich chętnych.


05 lut 2012 16:19:34
Zobacz profil
Użytkownik

Dołączył(a): 21 lut 2012 12:16:19
Posty: 11
eCzytnik: Kindle 3
Post Re: Polskie treści w calibre - komentarze
Witam,
Od kilku miesięcy używam Kindla a zafascynowany jestem możliwosciami calibre. Obserwuje co dzieje się w sprawie polskich zródeł newsów, sam napisałem kilka(nascie) recept którymi się chętnie podzielę.

Jestem nowy na tym forum i nie wiem jeszcze w jaki sposób publikować recepty. Poeksperymentuje w niniejszym wpisie za co przepraszam jeśli coś mi nie wyjdzie.

Na początek coś dla kobiet - Zwierciadło:
Spoiler!
Kod:
__license__    = 'GPL v3'
__copyright__ = '2012, Krzysk(at)wp.pl'
'''
zwierciadlo.pl
'''
from calibre.web.feeds.news import BasicNewsRecipe
class ZwierciadloRecipe(BasicNewsRecipe):
    title            = u'Zwierciadło'
    description  = u'Zwierciadlo.pl - przestrzeń wolna od presji, stresu, codziennego pędu i  tego wszystkiego, co nie pozwala nam dostrzegać rzeczy ważnych, otwierać się na codzienność. <br>'
    __author__ = u'Krzysk(at)wp.pl'
    __version__ = '1.0'

    oldest_article = 7
    max_articles_per_feed = 100
    category    = u'Kobieta, Psychologia, Moda, Kuchnia, Kultura, Lifestyle, News'
    publisher    = u'Wydawnictwo Zwierciadło Sp. z o.o.'
    masthead_url = 'http://www.jogawparku.pl/wp-content/galerie/loga2008/zwierciadlo-logo-72.jpg'
    publication_type = 'magazine'
    language    =  'pl'

    no_stylesheets     = True
    remove_javascript    = True
    remove_empty_feeds    = True
    use_embedded_content    = False

    keep_only_tags =[]
    keep_only_tags.append(dict(name= 'h1'))
    keep_only_tags.append(dict(name= 'div', attrs={'class':['news-info','news-excerpt MuseoSlab700','news-content']}))

    feeds          = [(u'Psychologia', u'http://zwierciadlo.pl/kategoria/psychologia/feed'),
                          (u'Seks', u'http://zwierciadlo.pl/kategoria/seks/feed'),
                          (u'Trendy i moda', u'http://zwierciadlo.pl/kategoria/trendy-i-moda/feed'),
                          (u'Uroda', u'http://zwierciadlo.pl/kategoria/uroda/feed'),
                          (u'Lifestyle', u'http://zwierciadlo.pl/kategoria/lifestyle/feed'),
                          (u'Zdrowie', u'http://zwierciadlo.pl/kategoria/zdrowie/feed'),
                          (u'Kuchnia', u'http://zwierciadlo.pl/kategoria/kuchnia/feed'),
                          (u'Kultura', u'http://zwierciadlo.pl/kategoria/kultura/feed')]

    conversion_options = {
                             'tags'                : category
                            ,'language'         : language
                            ,'publisher'         : publisher
                         }

    extra_css    = '''   .news-info{font-size: x-small;}
                     .news-excerpt {font-weight: bold;}
                         '''

    def append_page(self, soup, appendtag):   
        apage = soup.find(name='p', attrs={'class':'pages'})
        if apage is not None:
          for nexturl in apage.findAll(name= 'a'):
             if nexturl.string in ['2','3','4','5', '6', '7', '8', '9']:
                soup2 = self.index_to_soup(nexturl['href'])
                pagetext = soup2.findAll(name='div', attrs={'class':'news-content'})
                for tag in pagetext:
                    pos = len(appendtag.contents)
                    appendtag.insert(pos, tag)
        while appendtag.find(name='p', attrs={'class':'pages'}) is not None:
           appendtag.find(name='p', attrs={'class':'pages'}).replaceWith('')

    def preprocess_html(self, soup):
         self.append_page(soup, soup.body)
         return soup

    def get_cover_url(self):   
        soup = self.index_to_soup('http://zwierciadlo.pl/magazyn/zwierciadlo')
        cover_item = soup.find('div', attrs={'class' : 'small-item-front'})
        if cover_item:
           cover_url = cover_item.img['src']
        else:
           cover_url = masthead_url
        return cover_url


Dalej Poradnik domowy:
Spoiler!
Kod:
__license__    = 'GPL v3'
__copyright__ = '2012, Krzysk(at)wp.pl'
'''
http://poradnikdomowy.pl
'''
from calibre.web.feeds.news import BasicNewsRecipe
class PoradnikDomowyRecipe(BasicNewsRecipe):
    title             = u'Poradnik Domowy'
    description   = u'Poradnikdomowy.pl - serwis internetowy magazynu dla kobiet <br>'
    __author__  = u'Krzysk(at)wp.pl'
    __version__ = '1.0'

    oldest_article = 7
    max_articles_per_feed = 100
    category    = u'Kobieta, Zdrowie, Uroda, Kulinaria, Reportaże, Psychologia, Seks, Turystyka'
    publisher    = u'Agora S.A.'
    cover_url    = 'http://bi.gazeta.pl/im/3/10398/m10398213.png'
    publication_type = 'magazine'
    language    = 'pl'

    no_stylesheets         = True
    remove_javascript     = True
    remove_empty_feeds = True

    keep_only_tags =[]
    keep_only_tags.append(dict(name = 'h1', attrs ={'class' : 'artTitle'}))
    keep_only_tags.append(dict(name = 'div', attrs ={'id' : ['gazeta_article_author', 'gazeta_article_image','gazeta_article_lead','gazeta_article_body']}))
    keep_only_tags.append(dict(name = 'div', attrs ={'class' : 'navigation'}))

    remove_tags = []
    remove_tags.append(dict(name= 'div', attrs ={'id' : ['gazeta_article_likes', 'gazeta_article_share']}))
    remove_tags.append(dict(name= 'div', attrs ={'class' : ['bs_seemore0', 'bs_seemore mod_bi_katy4', 'rel_box']}))

    extra_css = '''
     .gazeta_article_author {font-weight: bold}
                      '''
    conversion_options = {
                              'tags'                : category
                            , 'language'         : language
                            , 'publisher'         : publisher}

    def parse_pages(self, soup, section, articles) :
        for h3 in soup.findAll(name = 'h3') :
             if h3.a is not None:
                article = {}
                article['url'] = h3.a['href']
                article['title'] = self.tag_to_string(h3.a)
                article_page = self.index_to_soup(article['url'])
                if article_page.find('div', attrs={'id' : 'gazeta_article_lead'}) is not None :
                    article['description'] = self.tag_to_string(article_page.find('div', attrs={'id' : 'gazeta_article_lead'}))
                else :
                    article['description'] = ''
                if article_page.find('div', attrs={'id' : 'gazeta_article_author'}) is not None :
                    article['author'] = self.tag_to_string(article_page.find('div', attrs={'id' : 'gazeta_article_author'}))
                else :
                    article['author'] = ''
                if article_page.find('div', attrs={'id' : 'gazeta_article_date'}) is not None :
                    article['date'] = self.tag_to_string(article_page.find('div', attrs={'id' : 'gazeta_article_date'}))
                else :
                    article['date'] = ''
                if not articles.has_key(section) :
                    articles[section] = [article]
                else:
                    articles[section].append(article)
        return articles

    def parse_index(self) :
        feeds = []
        articles = {}
        articles = self.parse_pages(self.index_to_soup('http://poradnikdomowy.pl/poradnikdomowy/0,116269.html'), 'Zdrowie', articles)
        articles = self.parse_pages(self.index_to_soup('http://poradnikdomowy.pl/poradnikdomowy/0,116270.html'), 'Uroda', articles)
        articles = self.parse_pages(self.index_to_soup('http://poradnikdomowy.pl/poradnikdomowy/0,116271.html'), 'Kulinaria', articles)
        articles = self.parse_pages(self.index_to_soup('http://poradnikdomowy.pl/poradnikdomowy/0,116278.html'), 'Reportaże', articles)
        articles = self.parse_pages(self.index_to_soup('http://poradnikdomowy.pl/poradnikdomowy/0,116272.html'), 'Psychologia', articles)
        articles = self.parse_pages(self.index_to_soup('http://poradnikdomowy.pl/poradnikdomowy/0,116275.html'), 'Seks', articles)
        articles = self.parse_pages(self.index_to_soup('http://poradnikdomowy.pl/poradnikdomowy/0,116281.html'), 'Turystyka', articles)
        articles = self.parse_pages(self.index_to_soup('http://poradnikdomowy.pl/poradnikdomowy/0,116288.html'), 'Prawo i Finanse', articles)
        for section in articles :
             feeds.append((section, articles[section]))
        return feeds

    def append_page(self, soup, appendtag) :   
        apage = soup.find('div', attrs={'id':'Str'})
        if apage is not None:
          for nexturl in apage.findAll('a') :
             if nexturl.string in ['2','3','4','5', '6', '7', '8', '9']:
                nexturl= 'http://poradnikdomowy.pl' + nexturl['href']
                soup2 = self.index_to_soup(nexturl)
                pagetext = soup2.findAll('div', attrs={'id' : 'gazeta_article_body'})
                for tag in pagetext :
                    pos = len(appendtag.contents)
                    appendtag.insert(pos, tag)
        while appendtag.find('div', attrs={'id':'Str'}) is not None:
            appendtag.find('div', attrs={'id':'Str'}).replaceWith('')

        apage = soup.find('div', attrs={'class':'navigation'})
        while apage is not None:
            nexturl = apage.find('a', attrs={'class' : 'next'})
            if nexturl is not None :
                nexturl= nexturl['href']
                soup2 = self.index_to_soup(nexturl)
                pagetext = soup2.findAll('div', attrs={'id' : 'gazeta_article_body'})
                for tag in pagetext :
                    pos = len(appendtag.contents)
                    appendtag.insert(pos, tag)
                apage = soup2.find('div', attrs={'class':'navigation'})
            else:
                break
        while appendtag.find('div', attrs={'class':'navigation'}) is not None:
            appendtag.find('div', attrs={'class':'navigation'}).replaceWith('')

    def preprocess_html(self, soup) :
         self.append_page(soup, soup.body)
         return soup

    def populate_article_metadata(self, article, soup, first):
        if first and hasattr(self, 'add_toc_thumbnail'):
            picdiv = soup.find('img')
            if picdiv is not None:
                self.add_toc_thumbnail(article,picdiv['src'])

    def get_cover_url(self):
       soup = self.index_to_soup('http://poradnikdomowy.pl/poradnikdomowy/0,0.html')
       tr = soup.find('a', attrs= {'title':'Poprzednie wydania'}).parent.parent.parent.parent.parent.parent
       img = tr.find('img')['src']
       cover_url = img.replace('C.', 'X.')
       return cover_url


Jak wyszło?


21 lut 2012 12:47:47
Zobacz profil
Użytkownik

Dołączył(a): 21 lut 2012 12:16:19
Posty: 11
eCzytnik: Kindle 3
Post Re: Polskie treści w calibre - komentarze
Nowe propozycje

Lotnicza Polska - Lotniczy serwis informacyjny. Można samodzielnie określić jakie tematy chcemy obserwować:
Spoiler!
Kod:
_license__    = 'GPL v3'
__copyright__ = '2012, Krzysk(at)wp.pl'
'''
lotniczapolska.pl
'''
class Lotnicza_Polska(BasicNewsRecipe):
    title      = u'Lotnicza Polska'
    description  = u'Lotniczy serwis informacyjny. Nowości z zakresu lotnictwa awiacji oraz galeria zdjęć i filmów. <br>'
    __author__ = u'Krzysk(at)wp.pl'   
    __version__='1.0'

    oldest_article = 7
    max_articles_per_feed = 30
    category    = u'Lotnictwo, News'
    publisher    = u'lotniczapolska.pl'
    cover_url    = 'http://lotniczapolska.pl/s/lp/i/logo_lp_poziom_new.gif'
# masthead_url = cover_url
    publication_type = 'magazine'
    language    = 'pl'

    remove_javascript    = True
    remove_empty_feeds    = True
    reverse_article_order    = True

    keep_only_tags =[]
    keep_only_tags.append(dict(attrs = {'class' : ['artt', 'artd', 'artdakt', 'artpLf', 'artpLfa', 'artl', 'artx']}))

    extra_css = '''
       h1 {font-size: x-large; font-weight: bold}
                      .artd {font-size: x-small}
                      .artpLfa {font-size: x-small}
                   '''
    conversion_options = {
                              'tags'                : category
                            , 'language'         : language
                            , 'publisher'         : publisher
                          }

    feeds = [
                          (u'Ostatnie',    u'http://lotniczapolska.pl/rss_portal.php?feed=9&type=1'),
                          (u'Z kraju',    u'http://lotniczapolska.pl/rss_portal.php?feed=7&type=1'),
                          (u'Ze świata',    u'http://lotniczapolska.pl/rss_portal.php?feed=8&type=1'),
                          (u'Przegląd mediów',    u'http://lotniczapolska.pl/rss_portal.php?feed=2665&type=1'),
#                          (u'Balony',    u'http://lotniczapolska.pl/rss_portal.php?feed=106&type=1'),
                          (u'Lotnictwo komunikacyjne', u'http://lotniczapolska.pl/rss_portal.php?feed=211&type=1'),
                          (u'Lotnictwo ogólne',    u'http://lotniczapolska.pl/rss_portal.php?feed=240&type=1'),
                          (u'Lotnictwo wojskowe - polskie', u'http://lotniczapolska.pl/rss_portal.php?feed=227&type=1'),
                          (u'Modelarstwo',    u'http://lotniczapolska.pl/rss_portal.php?feed=266&type=1'),
#                          (u'Paralotnie',    u'http://lotniczapolska.pl/rss_portal.php?feed=803&type=1'),
#                          (u'Motolotnie',    u'http://lotniczapolska.pl/rss_portal.php?feed=791&type=1'),
#                          (u'Samoloty ultralekkie', u'http://lotniczapolska.pl/rss_portal.php?feed=830&type=1'),
#                          (u'Spadochrony',    u'http://lotniczapolska.pl/rss_portal.php?feed=325&type=1'),
                          (u'Szybowce',    u'http://lotniczapolska.pl/rss_portal.php?feed=339&type=1'),
#                          (u'Wiatrakowce',    u'http://lotniczapolska.pl/rss_portal.php?feed=346&type=1'),
#                          (u'Wspomnienia o...',    u'http://lotniczapolska.pl/rss_portal.php?feed=2164&type=1'),
#                          (u'Wywiady',    u'http://lotniczapolska.pl/rss_portal.php?feed=2444&type=1'),
#                          (u'Biblioteka lotnika',    u'http://lotniczapolska.pl/rss_portal.php?feed=2688&type=1'),
#                          (u'Internauci piszą',    u'http://lotniczapolska.pl/rss_portal.php?feed=707&type=1'),
#                          (u'Grupy akrobacyjne', u'http://lotniczapolska.pl/rss_portal.php?feed=3460&type=1'),
#                          (u'Wieści z aeroklubów', u'http://lotniczapolska.pl/rss_portal.php?feed=2092&type=1'),
#                          (u'Wieści ze szkół',    u'http://lotniczapolska.pl/rss_portal.php?feed=2141&type=1'),
#                          (u'Wieści ze stowarzyszeń', u'http://lotniczapolska.pl/rss_portal.php?feed=2144&type=1'),
#                          (u'Konkurs fotograficzny', u'http://lotniczapolska.pl/rss_portal.php?feed=1373&type=1'),
#                          (u'Konkurs filmowy',    u'http://lotniczapolska.pl/rss_portal.php?feed=1376&type=1'),
#                          (u'Konkurs specjalny', u'http://lotniczapolska.pl/rss_portal.php?feed=1379&type=1'),
                           ]

    def populate_article_metadata(self, article, soup, first):
        if first and hasattr(self, 'add_toc_thumbnail'):
            picdiv = soup.find('img')
            if picdiv is not None:
                self.add_toc_thumbnail(article,picdiv['src'])



u'LifeStyle Magazine': Spoiler!
Kod:
__license__    = 'GPL v3'
__copyright__ = '2012, Krzysk(at)wp.pl'
'''
http://lifestylemagazine.pl
'''
class LsmRecipe(BasicNewsRecipe):
    title          = u'LifeStyle Magazine'
    description  = u'LifeStyle Magazine kierowany jest do osób aktywnych, dynamicznych, szukających nowych możliwości rozwoju osobistego. <br/>'
    __author__ = u'Krzysk(at)wp.pl'
    __version__ = '1.0'

    oldest_article = 14
    max_articles_per_feed = 100
    category    = u'lifestyle,moda,rozwój osobisty,podróże,finanse,kultura'
    publisher    = u'2012, LifeStyle Magazine'
    cover_url   = u'http://kalendarzsukcesu.pl/img/logo/_c07aac24c3edf2b8853acaeac964c6d1.jpg'
    masthead_url = cover_url
    publication_type = 'magazine'
    language    =  'pl'

    auto_cleanup                 = True
    no_stylesheets     = True
    remove_javascript    = True
    remove_empty_feeds    = True
    reverse_article_order    = True

    #keep_only_tags = [ dict(name= 'div', attrs={'class':'art-content'}) ]
    auto_cleanup_keep = '//*[@class="art-PostHeader"]'

    conversion_options = {
                             'tags'                : category
                            ,'language'         : language
                            ,'publisher'         : publisher
                         }

    extra_css    = ' h2 {font-size: x-large; font-weight: bold;} '

    feeds          = [
#   (u'Home', u'http://lifestylemagazine.pl/index.php?format=feed&type=rss'),
   (u'Lifestyle', u'http://lifestylemagazine.pl/lifestyle?format=feed&type=rss'),
   (u'Wydarzenia', u'http://lifestylemagazine.pl/wydarzenia?format=feed&type=rss'),
   (u'Podr\xf3\u017ce', u'http://lifestylemagazine.pl/podroze?format=feed&type=rss'),
   (u'Moda', u'http://lifestylemagazine.pl/moda?format=feed&type=rss'),
   (u'Kultura', u'http://lifestylemagazine.pl/kultura?format=feed&type=rss'),
   (u'Finanse', u'http://lifestylemagazine.pl/finanse?format=feed&type=rss'),
   (u'LsmTV', u'http://lifestylemagazine.pl/lsmtv?format=feed&type=rss'),
   (u'Felietony', u'http://lifestylemagazine.pl/felietony?format=feed&type=rss'),
   (u'Zdrowie', u'http://lifestylemagazine.pl/zdrowie?format=feed&type=rss'),
   (u'Konkursy', u'http://lifestylemagazine.pl/konkursy?format=feed&type=rss'),
   (u'Patronat', u'http://lifestylemagazine.pl/patronat?format=feed&type=rss'),
   (u'Redakcja', u'http://lifestylemagazine.pl/redakcja?format=feed&type=rss')
   ]

    def populate_article_metadata(self, article, soup, first):
        if first and hasattr(self, 'add_toc_thumbnail'):
            picdiv = soup.find('img')
            if picdiv is not None:
                self.add_toc_thumbnail(article,picdiv['src'])

Z receptą tą związany jest problem: nie we wszystkich artykułach wyświetla się tytuł. Jest to wynik działania auto_cleanup i należałoby przerobić receptę bez użycia tej funkcji (nie chciało mi się). Spróbowałem użyć auto_cleanup_keep = '//*[@class="art-PostHeader"]' ale to nie zadziałało. Dlaczego?

I jeszcze coś dla miłośników gier planszowych GamesFanatic:
Spoiler!
Cytuj:
__license__ = 'GPL v3'
__copyright__ = '2012, Krzysk(at)wp.pl'
'''
www.gamesfanatic.pl
'''
class GamesFanaticRecipe(BasicNewsRecipe):
title = u'GamesFanatic'
description = u'Gry planszowe i karciane, recenzje, zapowiedzi, felietony, wieści i nowości ze świata. <br>'
__author__ = u'Krzysk(at)wp.pl'
__version__ = '1.0'

oldest_article = 15
max_articles_per_feed = 100
publisher = u'gamesfanatic.pl'
category = u'Gry, Gry planszowe, Planszówki, News'
publication_type = 'blog'
cover_url = u'http://www.gamesfanatic.pl/wp-content/uploads/2011/12/gflogo.png'
language = 'pl'

auto_cleanup = True

conversion_options = {
'tags' : category
, 'language' : language
, 'publisher' : publisher
}

feeds = [(u'Artykuły', u'http://www.gamesfanatic.pl/feed/')]

def populate_article_metadata(self, article, soup, first):
if first and hasattr(self, 'add_toc_thumbnail'):
picdiv = soup.find('img')
if picdiv is not None:
self.add_toc_thumbnail(article,picdiv['src'])


21 lut 2012 14:34:45
Zobacz profil
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Ten wątek jest zamknięty. Nie możesz w nim pisać ani edytować postów.  [ Posty: 242 ]  Przejdź na stronę Poprzednia strona  1 ... 12, 13, 14, 15, 16, 17  Następna strona


Kto przegląda forum

Użytkownicy przeglądający to forum: Brak zalogowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów

Skocz do:  
cron