API-dokumentation för recept

API:n för skriva recept är definierade av BasicNewsRecipe

class calibre.web.feeds.news.BasicNewsRecipe(options, log, progress_reporter)[source]

Grundklass som innehåller logik behövs i alla recept. Genom att åsidosätta gradvis mer av funktionaliteten i den här klassen kan du göra allt mer anpassade/kraftfulla recept. För en handledningsintroduktion till att skapa recept, se Lägga till din favorit nyhetswebbplats.

abort_article(msg=None)[source]

Anropa denna metod inuti någon av förbehandlingsmetoderna för att avbryta hämtningen av den aktuella artikeln. Användbart att hoppa över artiklar som innehåller olämpligt innehåll, såsom hela videoklippsartiklar.

abort_recipe_processing(msg)[source]

Orsakar att recepthämtningssystemet avbryter hämtningen av detta recept, visning av ett enkelt återkopplingsmeddelande till användaren.

add_toc_thumbnail(article, src)[source]

Anropa detta från populate_article_metadata med attributet src för en <img>-tagg från artikeln som är lämplig att använda som miniatyrbild som representerar artikeln i innehållsförteckningen. Huruvida miniatyrbilden faktiskt används är enhetsberoende (används för närvarande endast av Kindle-läsenheter). Observera att den refererade bilden måste vara en som hämtats ner, annars kommer den att ignoreras.

classmethod adeify_images(soup)[source]

Om ditt recept vid konvertering till EPUB har problem med bilderna när de visas i Adobe Digital Editions, anropa den här metoden inifrån postprocess_html().

canonicalize_internal_url(url, is_link=True)[source]

Returnera en uppsättning kanoniska representationer av url. Standardimplementeringen använder bara serverns värdnamn och sökväg för webbadressen, utan att ignorerar eventuella frågeparametrar, fragment o.s.v. De kanoniska representationerna måste vara unika för alla webbadresser för den här nyhetskällan. Om de inte är det kan interna länkar lösas felaktigt.

Parametrar:

is_link – Är True om webbadressen kommer från en intern länk i en HTML-fil. False om webbadressen är webbadressen som används för att hämta en artikel.

cleanup()[source]

Anropas efter alla artiklar har hämtats. Använd den för att göra godtycklig sanering som att logga ut från prenumerationsplatser o.s.v.

clone_browser(br)[source]

Klona webbläsaren br. Klonade webbläsare används för flertrådade hämtningar, eftersom mechanize (mekanisera) inte är trådsäkert. Standard kloningsrutinerna ska fånga de flesta webbläsaranpassningar, men om du gör något exotiskt i ditt recept, ska du åsidosätta den här metoden i ditt recept och klona manuellt.

Klonade webbläsarinstanser använder samma, trådsäkra CookieJar som standard, såvida du inte har anpassad hantering av kakor.

default_cover(cover_file)[source]

Skapa ett generiskt omslag för recept som inte har ett omslag

download()[source]

Hämta och förbearbeta alla artiklar från flödena i detta recept. Denna metod bör endast anropas en gång för en viss receptinstans. Att anropa den mer än en gång kommer att leda till odefinierat beteende. :return: Sökväg till index.html

extract_readable_article(html, url)[source]

Extraherar huvudartikelinnehållet från ’html’, rensas upp och returneras som en (artikel_html, extraherad_titel) tupel. Baserat på den ursprungliga läsbarhetsalgoritmen från Arc90.

get_article_url(article)[source]

Åsidosätt i en underklass för att anpassa extraheringen av URL som hänvisar till innehållet för varje artikel. Returnera artikelwebbadressen. Den anropas med article, ett objekt som representerar en analyserad artikel från ett flöde. Se feedparser. Normalt söker den efter den ursprungliga länken (till flöde syndikerade via en tjänst som FeedBurner eller Pheedo) och om den hittas, returnerar detta eller annars returneras article.link.

get_browser(*args, **kwargs)[source]

Returnera en webbläsarinstans som används för att hämta dokument från webben. Som standard returneras en mechanize (mekanisera) webbläsarinstans som stöder kakor, ignorerar robots.txt, hanterar uppdateringar och har en Mozilla Firefox-användaragent.

Om ditt recept kräver att du loggar in först, åsidosätt denna metod i din underklass. Till exempel används följande kod i receptet New York Times för att logga in för full åtkomst:

def get_browser(self):
    br = BasicNewsRecipe.get_browser(self)
    if self.username is not None and self.password is not None:
        br.open('https://www.nytimes.com/auth/login')
        br.select_form(name='login')
        br['USERID']   = self.username
        br['PASSWORD'] = self.password
        br.submit()
    return br
get_cover_url()[source]

Returnera en URL till omslagsbild för den här utgåvan eller None. Som standard returneras värdet av elementet self.cover_url som normalt är None. Om du vill att ditt recept för att hämtar ett omslag för e-boken åsidosätter den här metoden i din underklass, eller ställa medlemsvariabeln self.cover_url innan denna metod anropas.

get_extra_css()[source]

Som standard returneras self.extra_css. Åsidosätt om du vill programmässigt skapa extra_css.

get_feeds()[source]

Returnera en lista med RSS-flöden att hämta för den här profilen. Varje element i listan måste vara ett 2-elements tupel av formen (titel, url). Om titeln är None eller en tom sträng, används titeln från flödet. Denna metod är användbar om du receptet behöver göra en del bearbetning för att räkna ut lista med inlägg för att hämtar. Om så är fallet, åsidosätt i din underklass.

get_masthead_title()[source]

Åsidosätt i underklass för att använda något annat än recepttiteln

get_masthead_url()[source]

Returnera en URL till redaktionsloggan för denna utgåva eller None. Som standard returneras värdet på medlemmen self.masthead_url som normalt är None. Om du vill att ditt recept ska hämta en redationslogga för e-boken åsidosätter du denna metod i din underklass, eller ställer in medlemsvariabeln self.masthead_url innan denna metod anropas. Redaktionsloggor används i Kindle MOBI-filer.

get_obfuscated_article(url)[source]

Om du ställer in articles_are_obfuscated anropas denna metod med varje artikelwebbadress. Den ska returnera sökvägen till en fil i filsystemet som innehåller artikel-HTML:n. Filen bearbetas av den rekursiva HTML-hämtningsmotorn, så den kan innehålla länkar till sidor/bilder på webben.

Denna metod är oftast användbart för webbplatser som försöker göra det svårt att komma åt artikelns innehåll automatiskt.

classmethod image_url_processor(baseurl, url)[source]

Perform some processing on image urls (perhaps removing size restrictions for dynamically generated images, etc.) and return the precessed URL. Return None or an empty string to skip fetching the image.

index_to_soup(url_or_raw, raw=False, as_tree=False, save_raw=None)[source]

Bekväm metod som använder en webbadress som indexsida och returnerar en BeautifulSoup av den.

url_or_raw: Antingen en webbadress eller den hämtade indexsidan som en sträng

Returnera True om länken ska följas eller False annars. Som standard höjer NotImplementedError som orsakar hämtningen att ignorera det.

Parametrar:
  • url – Webbadressen som ska följas

  • tag – Taggen för vilken URL erhölls

parse_feeds()[source]

Skapa en lista med artiklar från listan med flöden som returneras av BasicNewsRecipe.get_feeds(). returnerar en lista med Feed objekt.

parse_index()[source]

Denna metod bör implementeras på recept för att analysera en webbplats istället för flöden skapar en lista med artiklar. Typiska användningsområden är för nyhetskällor som har en ”tryckt upplaga”-webbplats som listar alla artiklar i den aktuella tryckupplagan. Om denna funktion implementeras kommer den att användas istället för BasicNewsRecipe.parse_feeds().

Det måste returnera en lista. Varje element i listan måste vara ett 2-inslag tupel av formen ("flödestitel", lista med artiklar).

Varje lista med artiklar måste innehålla ordböcker av formen:

{
'title'       : article title,
'url'         : URL of print version,
'date'        : The publication date of the article as a string,
'description' : A summary of the article
'content'     : The full article (can be an empty string). Obsolete
                do not use, instead save the content to a temporary
                file and pass a file:///path/to/temp/file.html as
                the URL.
}

Till exempel, se receptet för hämtning av The Atlantic. Dessutom kan du lägga till ’författare’ till författaren till artikeln.

Om du vill avbryta behandlingen av någon anledning och låta calibre visa användaren ett enkelt budskap istället för ett fel, anropa abort_recipe_processing().

populate_article_metadata(article, soup, first)[source]

Anropas när varje HTML-sida som tillhör artikel hämtas. Avsedd att användas för att få artikelns metadata som författare/sammanfattning/o.s.v. från den analyserad HTML:n (soap).

Parametrar:
  • article – Ett objekt av klass calibre.web.feeds.Article. Om du ändrar sammanfattningen, kom ihåg att också ändra text_summary

  • soup – Analyserad HTML tillhör den här artikeln

  • first – True iff analyserade HTML är den första sidan av artikeln.

postprocess_book(oeb, opts, log)[source]

Kör någon behövd efterbehandling på den analyserade hämtade e-boken.

Parametrar:
  • oeb – Ett OEBBook-objekt

  • opts – Konverteringsalternativ

postprocess_html(soup, first_fetch)[source]

Denna metod anropas med källan för varje hämtad HTML-fil, efter att den har analyserats för länkar och bilder. Den kan användas för att göra godtyckligt kraftfull efterbearbetning på HTML. Den bör returnera soup efter bearbetatning.

Parametrar:
  • soup – En BeautifulSoup instans innehållande hämtad HTML.

  • first_fetch – True om detta är första sidan av en artikel.

preprocess_html(soup)[source]

Denna metod anropas med källan till varje hämtad HTML-fil, innan den analyseras för länkar och bilder. Den anropas efter rensningen som specificerats av remove_tags o.s.v. Det kan användas för att göra godtyckligt kraftfull förbearbetning av HTML. Det ska returnera soup efter bearbetning.

soup: En BeautifulSoup instans innehållande hämtad HTML.

preprocess_image(img_data, image_url)[source]

Utför viss bearbetning av hämtade bilddata. Denna anropas på rådata innan någon storleksändring görs. Måste returnera bearbetade rådata. Returnera None för att hoppa över bilden.

preprocess_raw_html(raw_html, url)[source]

Denna metod anropas med källa av varje hämtad HTML-fil, innan den analyseras i ett objektträd. raw_html är en unicode sträng som representerar råa HTML-hämtning från webben. url är URL från vilken HTML:n var hämtad.

Observera att den här metoden agerar före preprocess_regexps.

Denna metod måste returnera den bearbetade raw_html som ett unicode-objekt.

classmethod print_version(url)[source]

Ta en url som hänvisar till en webbplats med artikelinnehåll och returnerar URL som hänvisar till en utskrivbar version av artikeln. Som standard gör ingenting. TIll exempel:

def print_version(self, url):
    return url + '?&pagewanted=print'
publication_date()[source]

Använd den här metoden för att ställa in datumet då detta nummer publicerades. Standard till hämtningsögonblicket. Måste returnera ett datetime.datetime-objekt.

skip_ad_pages(soup)[source]

Denna metod anropas med källan till varje hämtad HTML-fil, innan någon av rensningsattribut som remove_tags, keep_only_tags tillämpas. Observera att preprocess_regexps kommer redan ha använts. Det är tänkt att låta receptet att hoppa över annonssidor. Om soup är en annonssida, returnera HTML av den verkliga sidan. Annars returneras None.

soup: En BeautifulSoup instans innehållande hämtad HTML.

sort_index_by(index, weights)[source]

Bekväm metod för att sortera titlar i index enligt weights. index` sorteras efter plats. Returnerar index.

index: En lista med titlar.

weights: En ordbok som översätter vikt mot titel. Om något titelindex inte har vikt, antas de ha vikten 0.

classmethod tag_to_string(tag, use_alt=True, normalize_whitespace=True)[source]

Bekväm metod som använder en BeautifulSoup Tagga och extrahera texten från den rekursivt, inklusive godtyckliga CDATA-avsnitt och alt-tagg-attribut. Returnera en eventuellt tom Unicode-sträng.

use_alt: Om True försök använd alt attribut för taggar som inte har något textinnehåll

tagg: BeautifulSoup Tag

articles_are_obfuscated = False

Ställ in till True och implementerar get_obfuscated_article() för att hantera webbplatser som försöker göra det svårt att skrapa fram innehåll.

auto_cleanup = False

Extrahera automatiskt all text från hämtade artikelsidor. Använder algoritmerna från läsbarhetsprojektet. Att ställa in detta till True betyder att du inte behöver oroa dig för att städa upp den hämtade HTML-koden manuellt (även om manuell städning alltid kommer att vara överlägsen).

auto_cleanup_keep = None

Ange element som den automatiska rensningsalgoritmen aldrig ska ta bort. Syntaxen är ett XPath-uttryck. Till exempel:

auto_cleanup_keep = '//div[@id="article-image"]' will keep all divs with
                                               id="article-image"
auto_cleanup_keep = '//*[@class="important"]' will keep all elements
                                            with class="important"
auto_cleanup_keep = '//div[@id="article-image"]|//span[@class="important"]'
                  will keep all divs with id="article-image" and spans
                  with class="important"
center_navbar = True

Om True centreras navigationslisten annars är den vänsterjusterad

compress_news_images = False

Ställ in det här till Falsk för att ignorera alla skalnings- och komprimeringsparametrar och passera bilder igenom omodifierade. Om True och andra komprimeringsparametrar behåller sina standardvärden, skalas JPEG-bilder för att passa in skärmdimensionerna som fastställts av utmatningsprofilen och komprimeras till storlek som mest (b * h)/16 där b x h är de skalade bilddimensionerna.

compress_news_images_auto_size = 16

Faktorn som används vid automatisk komprimering av JPEG-bilder. Om den är inställd på Ingen är automatisk komprimering inaktiverad. Annars kommer bilderna att reduceras i storlek till (b * h) / compress_news_images_auto_size bytes om möjligt genom att minska kvalitetsnivån, där b x h är bilddimensionerna i pixlar. Minsta JPEG-kvalitet är 5/100 så det är möjligt att denna begränsning inte uppfylls. Denna parameter kan åsidosättas av parametern compress_news_images_max_size som ger en fast maximal storlek för bilder. Observera att om du aktiverar skala_nyheter_images_till_utrustning kommer bilden först att skalas och sedan reduceras dess kvalitet tills dess storlek är mindre än (b*h)/faktor där b och h nu är de skalade bilddimensionerna. Med andra ord, denna komprimering sker efter skalning.

compress_news_images_max_size = None

Ställ in JPEG-kvalitet så att bilderna inte överstiger den angivna storleken (i KBytes). Om den är inställd, åsidosättar den här parametern automatisk komprimering via compress_news_images_auto_size. Minsta JPEG-kvalitet kommer att vara 5/100 så det är möjligt att den här begränsningen inte kommer att uppfyllas.

conversion_options = {}

Receptspecifika alternativ för att anpassa konvertering av hämtat innehåll in i en e-bok. Dessa kommer åsidosätta alla användare eller insticksmodul specifika värden, så använd bara om det är absolut nödvändigt. Till exempel:

conversion_options = {
  'base_font_size'   : 16,
  'linearize_tables' : True,
}
cover_margins = (0, 0, '#ffffff')

Som standard används omslagsbilden som returneras av get_cover_url() som omslaget för tidskriften. Att åsidosätta detta i ditt recept instruerar calibre att göra det hämtade omslaget till en ram vars bredd och höjd uttrycks i procent av det hämtade omslaget. cover_margins = (10, 15, ’#ffffff’) fyller omslaget med en vit marginal 10 pixlar till vänster och höger, 15 pixlar på toppen och botten. Färgnamn definieras på här. Observera att vit av någon anledning inte alltid fungerar i Windows. Använd istället #ffffff

delay = 0

Fördröjning mellan konsekutiva hämtningar i sekunder. Argumentet kan vara ett flyttal för att indikera mer exakt tid.

description = ''

Ett par rader som beskriver innehållet detta recept hämtar. Detta kommer främst att användas i ett användargränssnitt som presenterar en lista med recept.

encoding = None

Ange en åsidosättskodning för webbplatser som har en felaktig teckenuppsättningsspecifikation. Det vanligaste är att ange latin1 och använda cp1252. Om None, försök att identifiera kodningen. Om det är en anropbar, anropas den anropsbara med två argument: Receptobjektet och källan som ska avkodas. Det måste returnera den avkodade källan.

extra_css = None

Ange någon extra CSS som bör läggas till hämtade HTML-filer. Det kommer att införas i <style>-taggar, precis före den avslutande </head>-taggen därigenom åsidosätts alla CSS utom det som deklarerats med hjälp av formatattribut på individuella HTML-taggar. Observera att om du vill att programmässigt skapa extra_css åsidosätt get_extra_css() metoden istället. Till exempel:

extra_css = '.heading { font: serif x-large }'
feeds = None

Förteckning över flöden att hämtar. Kan vara antingen [url1, url2, ...] eller [('title1', url1), ('title2', url2),...]

filter_regexps = []

Lista med reguljära uttryck som avgör vilka länkar att ignorera. Om den är tom ignoreras den. Används endast om is_link_wanted inte implementeras. Till exempel:

filter_regexps = [r'ads\.doubleclick\.net']

kommer ta bort alla URL-adresser som har ads.doubleclick.net in sig.

Endast en av BasicNewsRecipe.match_regexps eller BasicNewsRecipe.filter_regexps bör definieras.

handle_gzip = True

Ställ in till False om du inte vill använda gzippade överföringar. Observera att vissa gamla servrar fungerar dåligt med gzip

ignore_duplicate_articles = None

Ignorera dubbletter av artiklar som finns i mer än ett avsnitt. En dubblettartikel är en artikel som har samma titel och/eller webbadress. Att ignorera artiklar med samma titel, ställ in detta till:

ignore_duplicate_articles = {'title'}

För att använda webbadresser istället, ställ in den till:

ignore_duplicate_articles = {'url'}

För att matcha titel eller webbadress, ställ in den till:

ignore_duplicate_articles = {'title', 'url'}
keep_only_tags = []

Håll endast specificerade taggar och deras underkategorier. För formatet för att ange en tagg se BasicNewsRecipe.remove_tags. Om denna lista inte är tom, då blir <body> tagg tom och återfylld med taggar som matchar objekt i denna lista. Till exempel:

keep_only_tags = [dict(id=['content', 'heading'])]

kommer bara ha taggar som har ett id attribut av ”content” eller ”heading”.

language = 'und'

Språket som nyheterna är på. Måste vara en ISO-639-kod, antingen två eller tre tecken lång

masthead_url = None

Som standard använder calibre en standardbild för redaktionsloggan (endast Kindle). Åsidosätt detta i ditt recept för att tillhandahålla en webbadress som du kan använda som redaktionslogga.

match_regexps = []

Lista med reguljära uttryck som avgör vilka länkar att följa. Om den är tom, ignoreras den. Endast användas om is_link_wanted inte implementeras. Till exempel:

match_regexps = [r'page=[0-9]+']

kommer matcha alla URLer som har page=some number i sig.

Endast en av BasicNewsRecipe.match_regexps eller BasicNewsRecipe.filter_regexps bör definieras.

max_articles_per_feed = 100

Högsta antal artiklar att hämta från varje flöde. Den är primärt användbar för flöde som inte har artikeldatum. För de flesta flödes, bör du använda BasicNewsRecipe.oldest_article

needs_subscription = False

Om True kommer gränssnittet att be användaren om ett användarnamn och lösenord för att använda vid hämtning. Om inställningen är ”frivilligt” att använda ett användarnamn och lösenord blir tillval

no_stylesheets = False

Bekväm flagga för att inaktivera laddning av formatmallar för webbplatser som har alltför komplexa formatmallar som är olämpliga för konvertering till e-bokformat. Om True hämtas och bearbetas inte formatmallar

oldest_article = 7.0

Äldsta artikel att hämtar från denna nyhetskälla. I dagar.

preprocess_regexps = []

Lista med regexp substitutionsregler att köras vid hämtning HTML. Varje element i listan bör vara en tupel. Första elementet av tupel bör vara ett kompilerat regujärt uttryck och andra en anropsbar som tar ett matchande objekt och returnerar en sträng för att ersätta träffen. Till exempel:

preprocess_regexps = [
   (re.compile(r'<!--Article ends here-->.*</body>', re.DOTALL|re.IGNORECASE),
    lambda match: '</body>'),
]

kommer ta bort allt från <!–Article ends here–> till </body>.

publication_type = 'unknown'

Publikationstyp inställd till tidning, tidskrift eller blogg. Om inställt till None, kommer ingen publikationstypsmetadata skrivas till OPF-filen.

recipe_disabled = None

Ändra till en icke-tom sträng för att inaktivera detta recept. Strängen kommer att användas som det inaktiverade meddelandet

recursions = 0

Antal nivåer av länkar att följa på en artikelwebbplats

remove_attributes = []

Lista med attribut att ta bort från alla taggar. Till exempel:

remove_attributes = ['style', 'font']
remove_empty_feeds = False

Om True tas tomma flöden bort från utmatningen. Det här alternativet har ingen effekt om parse_index åsidosätts i underklassen. Den är avsedd endast för recept som returnerar en lista med flöden som använder feeds eller get_feeds(). Den används också om du använder alternativet ignore_duplicate_articles.

remove_javascript = True

Bekväm flagga för att ta bort alla JavaScript-taggar från den hämtad HTML-koden

remove_tags = []

Lista med taggar som ska avlägsnas. Angivna taggar tas bort från hämtad HTML. En tagg anges som en ordbok på formen:

{
 name      : 'tag name',   #e.g. 'div'
 attrs     : a dictionary, #e.g. {'class': 'advertisment'}
}

Alla tangenter är valbara. För en fullständig förklaring av sökkriterierna, se Beautiful Soup Ett vanligt exempel:

remove_tags = [dict(name='div', class_='advert')]

Detta tar bort alla <div class=”advert”> taggar och deras underkategorier från hämtade HTML.

remove_tags_after = None

Ta bort alla taggar som förekommer efter angiven tagg. För formatet att ange en tagg se BasicNewsRecipe.remove_tags. Till exempel:

remove_tags_after = [dict(id='content')]

kommer ta bort alla taggar efter första elementet med id=”content”.

remove_tags_before = None

Ta bort alla taggar som förekommer före angiven tagg. För formatet att ange en tagg se BasicNewsRecipe.remove_tags. Till exempel:

remove_tags_before = dict(id='content')

kommer ta bort alla taggar före första elementet med id=”content”.

requires_version = (0, 6, 0)

Lägsta version av calibre som behövs för detta recept

Om den är inställd till True ändras länkar i hämtade artiklar som hänvisar till andra hämtade artiklar ändras till att hänvisa till den hämtade kopian av artikeln istället än dess ursprungliga webbadress. Om du ställer in detta till True, kan du också behöva implementera canonicalize_internal_url() för att fungera med webbadresschemat för din specifika webbplats.

reverse_article_order = False

Vänd om ordningen på artiklar i varje flöde

scale_news_images = None

Största dimensioner (w, h) att skala bilder till. Om scale_news_images_to_device är True så är detta inställt på enhetens skärmmått för utskriftsprofil om det inte finns någon profil som, i vilket fall det är kvar på oavsett värde den har tilldelats (standard None).

scale_news_images_to_device = True

Skala om bilder för att passa enhetens skärmmått inställda av utmatningsprofilen. Ignoreras om ingen utmatningsprofil är angiven.

simultaneous_downloads = 5

Antal samtidiga hämtningar. Ställ in till 1 om servern är kräsen. Sänks automatiskt till 1 om attr:BasicNewsRecipe.delay > 0

summary_length = 500

Högsta antal tecken i den korta beskrivningen

template_css = '\n            .article_date {\n                color: gray; font-family: monospace;\n            }\n\n            .article_description {\n                text-indent: 0pt;\n            }\n\n            a.article {\n                font-weight: bold; text-align:left;\n            }\n\n            a.feed {\n                font-weight: bold;\n            }\n\n            .calibre_navbar {\n                font-family:monospace;\n            }\n    '

CSS som används för att utforma mallar, d.v.s. navigeringsfältet och innehållsförteckningen. Istället för att åsidosätta denna variabel bör du använda extra_css i ditt recept för att anpassa utseende och känsla.

timefmt = ' [%a, %d %b %Y]'

Formatsträngen för datumet som visas på första sidan. Som standard: Day_Name, Day_Number Month_Name Year

timeout = 120.0

Tidsbegränsning för att hämta filer från servern i sekunder

title = 'Okänd nyhetskälla'

Titel att använda för e-boken

use_embedded_content = None

Normalt försöker vi uppskatta om ett flöde har hela artiklar inbäddade i den baserat på längden av inbäddat innehåll. Om None, sedan standard används gissning. Om True då antar vi alltid flöden har inbäddat innehåll och om` False` kan vi alltid utgå från flödet inte har inbäddat innehåll.