1 from datetime import date
3 from django.conf import settings
4 from librarian.functions import lang_code_3to2
5 from librarian.html import transform_abstrakt
6 from librarian.builders import EpubBuilder, MobiBuilder
7 from librarian.cover import LegimiCornerCover, LegimiCover
13 "Książka, którą czytasz, pochodzi z <a href=\"https://wolnelektury.pl/\">Wolnych Lektur</a>. Naszą misją jest wspieranie dzieciaków w dostępie do lektur szkolnych oraz zachęcanie ich do czytania. Miło Cię poznać!",
14 "Podoba Ci się to, co robimy? Jesteśmy organizacją pożytku publicznego. Wesprzyj Wolne Lektury drobną wpłatą: <a href=\"https://wolnelektury.pl/towarzystwo/\">wolnelektury.pl/towarzystwo/</a>",
15 "Przyjaciele Wolnych Lektur otrzymują dostęp do prapremier wcześniej niż inni. Zadeklaruj stałą wpłatę i dołącz do Towarzystwa Przyjaciół Wolnych Lektur: <a href=\"https://wolnelektury.pl/towarzystwo/\">wolnelektury.pl/towarzystwo/</a>",
16 "Informacje o nowościach w naszej bibliotece w Twojej skrzynce mailowej? Nic prostszego, zapisz się do newslettera. Kliknij, by pozostawić swój adres e-mail: <a href=\"https://wolnelektury.pl/newsletter/zapisz-sie/\">wolnelektury.pl/newsletter/zapisz-sie/</a>",
17 "Przekaż 1% podatku na Wolne Lektury.<br/>\nKRS: 0000070056<br/>\nNazwa organizacji: Fundacja Nowoczesna Polska<br/>\nKażda wpłacona kwota zostanie przeznaczona na rozwój Wolnych Lektur."
21 #BASE_URL = 'https://wydawca.legimi.com'
22 BASE_URL = 'https://panel.legimi.pl'
23 LOGIN_URL = BASE_URL + '/publishers/membership'
24 UPLOAD_URL = BASE_URL + '/administration/upload/start'
25 CREATE_URL = BASE_URL + '/publishers/publications/create'
26 EDIT_URL = BASE_URL + '/publishers/publications/edit/%s'
27 EDIT_FILES_URL = BASE_URL + '/publishers/publications/editfiles/%s'
29 def __init__(self, username, password, publisher_id):
30 self.username = username
31 self.password = password
32 self.publisher_id = publisher_id
37 if self._session is None:
38 session = requests.Session()
39 response = session.post(
42 'ValidationTrue': 'true',
43 'UserName': self.username,
44 'Password': self.password,
46 self._session = session
50 return self.session.get('https://wydawca.legimi.com/publishers/publications')
52 def upload(self, content):
53 response = self.session.post(
58 model = response.json()['model']
60 "name": model['Name'],
61 "token": model['Token'],
72 def send_book(self, book):
73 wlbook = book.wldocument(librarian2=True)
76 cover = LegimiCornerCover(meta, width=1200).output_file()
77 epub_file = EpubBuilder(cover=LegimiCover, fundraising=fundraising).build(wlbook).get_file()
78 mobi_file = MobiBuilder(cover=LegimiCover, fundraising=fundraising).build(wlbook).get_file()
82 "Author": ", ".join(p.readable() for p in meta.authors),
83 "Year": meta.created_at[:4],
85 'GenreId': '11', # TODO
87 'LanguageLocale': lang_code_3to2(meta.language),
89 'Description': '<p>—</p>',
93 if isbn.upper().startswith('ISBN '):
96 book_data['Isbn'] = isbn
100 abstract = wlbook.tree.find('.//abstrakt')
101 if abstract is not None:
102 book_data['Description'] = transform_abstrakt(abstract)
105 cover_data = self.upload(
106 (meta.url.slug + '.jpg', cover.get_file(), 'image/jpeg')
109 "Cover.Name": cover_data['name'],
110 "Cover.Token": cover_data['token'],
111 "Cover.Url": cover_data['url'],
114 epub_data = self.upload(
115 (meta.url.slug + '.epub', epub_file, 'application/epub+zip')
118 'BookEpub.Token': epub_data['token'],
119 'BookEpub.Name': epub_data['name'],
122 mobi_data = self.upload(
123 (meta.url.slug + '.mobi', mobi_file, 'application/x-mobipocket-ebook')
126 'BookMobi.Token': mobi_data['token'],
127 'BookMobi.Name': mobi_data['name'],
140 legimi_id = self.create_book(book_data, files_data)
142 book.legimi_id = legimi_id
143 book.save(update_fields=['legimi_id'])
145 def create_book(self, book_data, files_data):
147 'createValidationTrue': 'true',
148 'PublisherId': self.publisher_id,#3609954
149 'IsLibraryPass': 'False',
151 'SamplesGenerationType': 'Quantity',
152 'SamplesGenerationPercent': '10',
154 'EnterToTheMarketType': 'No',
155 'EnterToTheMarketDate': date.today().strftime('%d.%m.%Y'),
157 'SalesNoLimitOption': 'false',
158 'SalesNoLimitKindle': 'false',
159 'SalesInStoreEbookGrossValue': '0,00',
160 'SalesPromotion': 'False',
161 'SalesPromotionGrossValue': '0,00',
162 'SalesPromotionDatesRange.DateStart': '',
163 'SalesPromotionDatesRange.DateEnd': '',
166 for form in 'Epub', 'Mobi', 'Pdf':
168 f'Book{form}.Token': '',
169 f'Book{form}.Name': '',
170 f'Book{form}.StorageName': '',
171 f'Book{form}.Order': '',
173 f'Sample{form}Type': 'Files',
174 f'Sample{form}.Token': '',
175 f'Sample{form}.Name': '',
176 f'Sample{form}.StorageName': '',
177 f'Sample{form}.Order': '',
180 data.update(book_data)
181 data.update(files_data)
183 response = self.session.post(self.CREATE_URL, data=data)
184 m = re.search(r'/(\d+)$', response.url)
188 def edit(self, legimi_id, data):
190 'ValidationTrue': 'true',
197 self.EDIT_URL % legimi_id,
201 def edit_files(self, legimi_id, files_data):
203 'ValidationTrue': 'true',
205 'SamplesGenerationType': 'Quantity',
206 'SamplesGenerationPercent': '10',
209 for form in 'Epub', 'Mobi', 'Pdf':
211 f'Book{form}.Token': '',
212 f'Book{form}.Name': '',
213 f'Book{form}.StorageName': '',
214 f'Book{form}.Order': '',
216 f'Sample{form}.Type': 'Files',
217 f'Sample{form}.Token': '',
218 f'Sample{form}.Name': '',
219 f'Sample{form}.StorageName': '',
220 f'Sample{form}.Order': '',
223 current.update(files_data)
225 response = self.session.post(
226 self.EDIT_FILES_URL % legimi_id,
232 settings.LEGIMI_USERNAME,
233 settings.LEGIMI_PASSWORD,
234 settings.LEGIMI_PUBLISHER_ID,