X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/a696802f47205416a28424d2bdab2b2bc8c4d920..eadb2822a6c87ac0f1ad3e529747c8e2cff14ae7:/src/depot/legimi.py diff --git a/src/depot/legimi.py b/src/depot/legimi.py index a41902a5..f61bbfd9 100644 --- a/src/depot/legimi.py +++ b/src/depot/legimi.py @@ -4,7 +4,7 @@ from django.conf import settings from librarian.functions import lang_code_3to2 from librarian.html import transform_abstrakt from librarian.builders import EpubBuilder, MobiBuilder -from librarian.cover import LegimiCornerCover, LegimiCover +from librarian.covers.marquise import MarquiseCover, LabelMarquiseCover import requests from slugify import slugify @@ -29,6 +29,108 @@ class Legimi: CREATE_URL = BASE_URL + '/publishers/publications/create' EDIT_URL = BASE_URL + '/publishers/publications/edit/%s' EDIT_FILES_URL = BASE_URL + '/publishers/publications/editfiles/%s' + EDIT_SALE_URL = BASE_URL + '/publishers/publications/editsale/%s' + + CATEGORIES = { + 'Dla dzieci i mÅodzieży': 94, + 'KsiÄ Å¼ki dla dzieci': 15, + 'Literatura mÅodzieżowa': 24, + 'KryminaÅ': 29, + 'KryminaÅ klasyczny': 31, + 'KryminaÅ wspóÅczesny': 32, + 'KryminaÅ historyczny': 30, + 'default': 8886, + 'Edukacja': 10, + 'SÅowniki i leksykony': 14, + 'Encyklopedie': 13, + 'Lektury': 11, + 'StarożytnoÅÄ': 80, + 'Barok': 83, + 'OÅwiecenie': 84, + 'Dwudziestolecie miÄdzywojenne': 88, + 'Åredniowiecze': 81, + 'WspóÅczesnoÅÄ': 90, + 'Modernizm': 87, + 'Pozytywizm': 86, + 'Renesans': 82, + 'Romantyzm': 85, + 'MÅoda Polska': 89, + 'PodrÄczniki': 52, + 'Fantastyka i sci-fi': 25, + 'Fantastyka': 26, + 'Science fiction': 27, + 'JÄzyki obce': 59, + 'Antyki i kolekcjonerstwo': 53, + 'Astrologia i wróżbiarstwo': 54, + 'Zdrowie i rodzina': 57, + 'Hobby': 55, + 'Medycyna i zdrowie': 58, + 'Psychologiczne': 78, + 'Styl': 56, + 'Humanistyka': 97, + 'Kultura i sztuka': 64, + 'Film': 66, + 'Muzyka': 65, + 'Eseje literackie': 49, + 'Historia': 60, + 'Styl życia': 73, + 'Wakacje i podróże': 69, + 'Dla mÄżczyzn': 79, + 'Sport': 76, + 'Obyczajowe i romanse': 93, + 'Humor': 68, + 'Obyczajowe': 35, + 'PowieÅÄ': 41, + 'PowieÅÄ przygodowa': 42, + 'WspóÅczesna powieÅÄ przygodowa': 44, + 'Historyczna powieÅÄ przygodowa': 43, + 'PowieÅÄ historyczna': 46, + 'PowieÅÄ psychologiczna': 47, + 'PowieÅÄ religijna': 45, + 'Romans': 36, + 'Romans klasyczny': 38, + 'Romans wspóÅczesny': 39, + 'Literatura erotyczna': 40, + 'Romans historyczny': 37, + 'Dla kobiet': 77, + 'Sensacja, thriller, horror': 91, + 'Horror': 28, + 'Sensacja': 33, + 'Thriller': 34, + 'AktualnoÅci': 70, + 'Czasopisma': 71, + 'Literatura faktu, reportaże, biografie': 92, + 'Literatura faktu': 16, + 'Biografie': 17, + 'Publicystyka': 20, + 'Dzienniki': 19, + 'Dokument, esej': 18, + 'Historia literatury i krytyka literacka': 23, + 'Literatura popularnonaukowa': 22, + 'Reportaż': 21, + 'SpoÅeczno-polityczne': 72, + 'Poezja i dramat': 95, + 'Dramat': 48, + 'Poezja': 50, + 'Religia i duchowoÅÄ': 51, + 'Nauka i nowe technologie': 98, + 'Nauka i technika': 61, + 'Nauki ÅcisÅe': 62, + 'Nauki humanistyczne': 63, + 'Technologia i Internet': 75, + 'Specjalistyczne': 99, + 'Biznes i finanse': 1, + 'Ekonomia': 5, + 'Finanse': 6, + 'ZarzÄ dzanie': 3, + 'Marketing': 2, + 'Rozwój osobisty': 7, + 'Kariera i sukces zawodowy': 8, + 'Psychologia, motywacja': 9, + 'PR': 4, + 'Prawo': 67, + 'Branżowe': 74, + } def __init__(self, username, password, publisher_id): self.username = username @@ -66,27 +168,30 @@ class Legimi: "url": model['Url'], } -# name=files[] -# filename -# content-type -# response: json -# success: true -# model.Url - - def send_book(self, book): - wlbook = book.wldocument(librarian2=True) + def send_book(self, book, changes=None): + wlbook = book.wldocument(librarian2=True, changes=changes) meta = wlbook.meta - cover = LegimiCornerCover(meta, width=1200).output_file() - epub_file = EpubBuilder(cover=LegimiCover, fundraising=fundraising).build(wlbook).get_file() - mobi_file = MobiBuilder(cover=LegimiCover, fundraising=fundraising).build(wlbook).get_file() + cover = LabelMarquiseCover(meta, width=1200).output_file() + epub_file = EpubBuilder( + cover=MarquiseCover, + fundraising=fundraising, + base_url='file://' + book.gallery_path() + '/' + ).build(wlbook).get_file() + mobi_file = MobiBuilder( + cover=MarquiseCover, + fundraising=fundraising, + base_url='file://' + book.gallery_path() + '/' + ).build(wlbook).get_file() book_data = { "Title": meta.title, "Author": ", ".join(p.readable() for p in meta.authors), - "Year": meta.created_at[:4], + "Year": str(date.today().year), 'GenreId': str(self.get_genre(wlbook)), + 'themaCategories': ';'.join(meta.thema), + 'thema-search': '', 'Isbn': '', 'LanguageLocale': lang_code_3to2(meta.language), @@ -94,7 +199,7 @@ class Legimi: } if meta.isbn_html: isbn = meta.isbn_html - if isbn.upper().startswith('ISBN '): + if isbn.upper().startswith(('ISBN ', 'ISBN-')): isbn = isbn[5:] isbn = isbn.strip() book_data['Isbn'] = isbn @@ -116,6 +221,7 @@ class Legimi: files_data.update({ 'BookEpub.Token': epub_data['token'], 'BookEpub.Name': epub_data['name'], + 'SampleEpubType': 'Generation', }) mobi_data = self.upload( @@ -185,7 +291,7 @@ class Legimi: if wlbook.meta.audience: description += '
{} to lektura szkolna.'.format(wlbook.meta.title)
- if wlbook.tree.find('//pe'):
+ if wlbook.tree.find('//pe') is not None:
description += '
Ebook {title} zawiera przypisy opracowane specjalnie dla uczennic i uczniów {school}.'.format(
title=wlbook.meta.title,
school='szkoÅy podstawowej' if wlbook.meta.audience == 'SP' else 'liceum i technikum'
@@ -194,23 +300,12 @@ class Legimi:
return description
def get_genre(self, wlbook):
- epoch_map = {
- 'StarożytnoÅÄ': 12,
- 'Åredniowiecze': 16,
- 'Renesans': 20,
- 'Barok': 13,
- 'OÅwiecenie': 14,
- 'Romantyzm': 21,
- 'Pozytywizm': 19,
- 'Modernizm': 18,
- 'Dwudziestolecie miÄdzywojenne': 15,
- 'WspóÅczesnoÅÄ': 17,
- }
-
+ if wlbook.meta.legimi and wlbook.meta.legimi in self.CATEGORIES:
+ return self.CATEGORIES[wlbook.meta.legimi]
for epoch in wlbook.meta.epochs:
- if epoch in epoch_map:
- return epoch_map[epoch]
- return 11
+ if epoch in self.CATEGORIES:
+ return self.CATEGORIES[epoch]
+ return self.CATEGORIES['Lektury']
def create_book(self, book_data, files_data):
data = {
@@ -222,7 +317,7 @@ class Legimi:
'SamplesGenerationPercent': '10',
'EnterToTheMarketType': 'No',
- 'EnterToTheMarketDate': date.today().strftime('%d.%m.%Y'),
+ 'EnterToTheMarketDate': '',
'HidingDate': '',
'SalesNoLimitOption': 'false',
'SalesNoLimitKindle': 'false',
@@ -258,7 +353,7 @@ class Legimi:
def edit(self, legimi_id, data):
current = {
'ValidationTrue': 'true',
- 'Is': legimi_id
+ 'Id': legimi_id
}
current.update(data)
@@ -297,6 +392,42 @@ class Legimi:
data=current
)
+ def edit_sale(self, book):
+ assert book.legimi_id
+
+ words = book.wldocument().get_statistics()['total']['words_with_fn']
+
+ price = settings.LEGIMI_SMALL_PRICE
+ if words > settings.LEGIMI_SMALL_WORDS:
+ price = settings.LEGIMI_BIG_PRICE
+
+ abo = 'true' if words > settings.LEGIMI_BIG_WORDS else 'false'
+
+ data = {
+ 'ValidationTrue': 'true',
+ 'Id': book.legimi_id,
+ 'SalesPromotionId': "0",
+ 'IsLibraryPass': "False",
+ 'OriginalEnterToTheMarketType': "No",
+ 'OriginalHidingDate': "",
+ 'OriginalEnterToTheMarketDate': "",
+ 'EnterToTheMarketType': "Yes",
+ 'EnterToTheMarketDate': "",
+ 'HidingDate': "",
+ 'SalesNoLimitOption': abo,
+ 'SalesNoLimitKindle': abo,
+ 'SalesInStoreEbookGrossValue': f'{price},00',
+ 'SalesPromotion': "False",
+ 'SalesPromotionGrossValue': "0,00",
+ 'SalesPromotionDatesRange.DateStart': "",
+ 'SalesPromotionDatesRange.DateEnd': "",
+ }
+
+ self.session.post(
+ self.EDIT_SALE_URL % book.legimi_id,
+ data=data
+ )
+
legimi = Legimi(
settings.LEGIMI_USERNAME,