LazyLibrarian

Door Mar2zz op zondag 12 februari 2012 10:09 - Reacties (10)
CategorieŽn: Calibre, Downloaden, Views: 17.571

Ik zat al sinds ik SickBeard en CouchPotato voor het eerst installeerde te wachten tot er zo een programma voor muziek en voor ebooks zou verschijnen. Met Headphones ging die eerste wens in vervulling. De tweede, ebooks, liet maar op zich wachten. Eind vorig jaar heb ik zelf python verkent door een xbmc-plugin te herschrijven en wat installatiestappen van Maraschino makkelijker te maken. Nu had ik begin dit jaar het idee dat het me, met de opgedane kennis, best wel eens zou kunnen lukken zelf een programma voor ebooks te schrijven. Of in ieder geval, een bestaande applicatie te herschrijven voor ebooks. Het resultaat is LazyLibrarian.

Wat is LazyLibrarian?
Ebooks zijn een beetje een apart fenomeen op usenet. De bestanden zijn heel klein, de formaten zijn legio, en er zijn totaal geen afspraken over releasenames en dergelijke. Aan de hand van de bestandsnaam of releasenaam kun je eigenlijk nooit de oorsprong of kwaliteit herkennen.

Waar videobestanden bijvoorbeeld HDTV en xvid in de bestandsnaam hebben voor oorsprong en kwaliteit heeft een ebook dat niet. Bij muziek heb je nog lossy (met vaak bitrate (bijvoorbeeld 320kbps) en lossless om de kwaliteit te herkennen, en anders is dat wel goed te zien aan de bestandsomvang.

Nu worden er op usenet en P2P-netwerken enorme verzamelingen ebooks gekwakt. Ik heb ooit een torrent gedownload met daarin 1000 fantasyboeken, een mooie verzameling, maar na import in Calibre ben ik dagen bezig geweest het goed op orde te krijgen. Auteur en title werden niet altijd goed herkend (bijvoorbeeld omgewisseld), soms misten er boeken midden uit een serie en sommige hadden bestandsformaten waar mijn 1e ereader niets mee kon.

Ik heb een tijdje geleden een calibre-import script in bash geschreven die ebooks probeerde te voorzien van covers en metadata. Dit ging wel redelijk, alleen bleef hetzelfde probleem, soms worden auteur en titel omgewisseld, of niet goed herkent, en dan komen er vreemde resultaten van.

Vandaar mijn wens om automatisch zoekopdrachten uit te zetten voor ebooks en deze te voorzien van juiste metadata, alvorens ze te importeren in Calilbre. En omdat het in python zo makkelijk is om een eigen webserver te draaien via Cherrypy dat er ook gelijk allemaal bij.

Nu doe ik nog niets met herkenning van bestandsformaten of versies (ebooks worden wel eens vergezeld van een versienummer (bijvoorbeeld v5) en hoger is beter), maar dat gaat nog wel komen. Om de betrouwbaarheid van LL tegemoet te komen importeert het alle files van de download, en zoekt daar nog niet een bepaald bestand uit. Dat moet nog geschreven worden.


Hoe te gebruiken?

LazyLibrarian is dus een zelfstandig draaiende applicatie, die na installatie op poort 5299 (sms LAZY) luistert. Daar kun je auteurs en boeken zoeken en deze toevoegen aan de database. Als bron wordt GoogleBooks gebruikt, waar veel boeken staan, alleen is het aantal Nederlandse titels daar nog zeer beperkt.

Eenmaal in de database kun je zoekopdrachten uitzetten voor specifieke titels. Daarvoor wordt een nzb gezocht op een indexsite (nu is alleen nog een newznab-server mogelijk, maar dat wordt natuurlijk uitgebreid). Als de zoektocht een resultaat levert wordt de nzb naar Sabnzbd gestuurd of opgeslagen in een map naar keuze (blackhole).

Nadat je downloadprogramma de nzb heeft gedownload zal LazyLibrarian het resultaat verwerken met de in de database bekende metadata. De download wordt verplaatst of gekopieerd en komt terecht in een map naar keuze, met daarin een map met auteursnaam met daarin weer mappen met de boektitel waar de uiteindelijke ebooks zelf in staan.

Indien er in de database er een afbeelding bekend is voor de omslag zal deze daar ook bij opgeslagen worden en alle metadata wordt in een calibre-compatible metadata.opf bestand gezet.

Als je dan de boeken importeert zal Calibre de metadata uit dat bestand pakken en zo komen de boeken dus wel netjes in je bibliotheek.

LazyLibrarian installeren
LL is geschreven in python, dus het zou op alle systemen moeten werken (waarschijnlijk). Ik heb geen windows of apple, dus ik weet alleen zeker dat het werkt op linux. Als het goed is het compatible met python2.6 en hoger.

De installatie kan gedaan worden via de Lazy Admin Scripted Installer. Kriss1981 heeft daar ook een freeBSD/ZFSGuru installer van gemaakt, dus ook daarop kun je los.

De installatie is dan als volgt:
wget -O /tmp/LaSi.sh http://dl.dropbox.com/u/18712538/LaSi/LaSi.sh
sudo chmod +x /tmp/LaSi.sh
/tmp/./LaSi.sh

In het menu typ je dan ll (dat is kleine letters LL) om LazyLibrarian te installeren. LazyLibrarian is nog geen menukeuze, tot ik wat meer vertrouwen in LL heb hou ik het buiten het menu om als een hidden optie).

Mocht je LL willen proberen zonder de service te installeren dan kan je 'm gewoon clonen (of de zipfile downloaden) en dan uitvoeren met python LazyLibrarian.py.
git clone https://Mar2zz@github.com/Mar2zz/LazyLibrarian.git


Afsluiting
LazyLibrarian staat enorm in de kinderschoenen, dus het is echt highly alpha. Gebruik is op eigen risico. Nu zal ik natuurlijk geen formats uitvoeren enzo, en ik werk nog om bestaande mappen heen. Met de tijd zal ik features toevoegen, maar eerst zal ik alle aanwezige opties moeten bewerken en fixen waar nodig.

In sommige gevallen zul je op links of opties stuiten die nog niets doen, of wel iets doen in de vorm van een error genereren ofzo.

Mocht je het gaan gebruiken, beschouw jezelf dan als tester en post issues inclusief log (via pastebin.org) op github. Ik ben nog geen ervaren pythoncoder, wellicht kan heel veel code anders en meer stabiel of veel compacter worden geschreven. Indien je kunt laten zien waar en hoe doe dat dan door middel van pullrequests via Github.

LazyLibrarian is nu nog een esthetisch gedrocht, maar de template gaat een overhaul krijgen door iemand die wel smaak heeft, binnen een aantal weken zullen onderstaande screenies niet meer representatief zijn voor het uiterlijk, alleen voor de functionaliteit.
bookspage
authors

Happy leeching!

Volgende: Maraschino 01-'12 Maraschino

Reacties


Door Tweakers user Staatslot, maandag 13 februari 2012 16:02

Wat gaaf, heb zelf geen ebooks dus heb nog niet echt met dit probleem te maken gehad maar goed dat je dit teruggeeft aan de community!

Door Tweakers user Mar2zz, vrijdag 17 februari 2012 11:43

Hijs wel leuk he. Ik ben eraan begonnen toen SOPA hot was en de blackout al besproken was. Wou eerst het poortnummer 7672 doen (sms SOPA), maar vond 5299 toch leuker :)

Ik heb 'm vooral gemaakt om python te leren eigenlijk, maar dat is nog niet zo simpel :p

NZBmatrix wordt nu ook als provider ondersteunt.

Door Tweakers user hcmveerman, dinsdag 21 februari 2012 12:34

Goed idee man! Wat ik mezelf afvroeg... is het mogelijk om ook tijdschriften toe te voegen?

Grts

Jeroen

Door Tweakers user Mar2zz, woensdag 22 februari 2012 20:01

tijdschriften zou wel leuk zijn, alle leesvoer is leuk. Alleen dan heb ik een website nodig die alle tijdschriften linked/verzamelt en daarvoor ook een api heeft (api is niet perse nodig, maar is wel makkelijker, dan hoef ik niet de hele page te parsen en bij veranderingen aan hun kant ook veranderingen te maken)i

Op zich zou het ook standalone kunnen. Nu op dit moment is lazylibrarian nog zo in de kinderschoenen dat een port naar compleet iets anders vrij makkelijk is omdat er nog niet zo heel veel code is.

Voor tijdschriften en weekbladen is het denk ik makkelijker om een aparte app te maken waarmee je 'abonneert' op bijvoorbeeld Donald Duck en die dan wekelijks laat zoeken op usenetservers naar Donald Duck + weeknummer (ofzo)

Door Tweakers user anvar, zondag 26 februari 2012 21:47

Schitterend goed gevonden, alleen worden er geen downloads doorgegeven aan Sab.
Ik neem als vb James Clemens, preffered Lan are EN, NL.
Na alle gevonden boeken op wanted te zetten kan ik lezen in de log dat er 1 boek gevonden wordt op nzbmatrix maar er wordt geen download doorgegeven:

Log:
2012-02-26 21:43:31 INFO Found 1 nzb for: James Clemens Wit'ch War
2012-02-26 21:43:30 INFO Searching NZB at provider NZBMatrix ...
2012-02-26 21:43:30 INFO No providers are set.
2012-02-26 21:43:07 INFO Processing complete: Added 13 books to the database
2012-02-26 21:43:07 INFO Skipped 1 results because it is not a preferred language.
2012-02-26 21:43:07 INFO Found 17 results for author with name: James Clemens
2012-02-26 21:43:06 INFO Searching url: https://www.googleapis.co...r%3A%22James%20Clemens%22
2012-02-26 21:43:06 INFO Processing info for authorID: 99776
2012-02-26 21:43:03 INFO Found author: James Clemens with GoodReads-id: 99776
2012-02-26 21:43:02 INFO Searching for author with name: James Clemens
2012-02-26 21:42:55 INFO Skipped 1 results because it is not a preferred language.
2012-02-26 21:42:55 INFO Found 17 results for author with name: james clemens

Heeft dit te maken met dat ik nzbmatrix gebruik ipv een newznab?
Zoja kan er iemand een open newznab aanduiden, tijd geleden mijn eigen newznab opgezet maar wegens plaats gebrek het project opnieuw afgesloten

Door Tweakers user MrMxyzptlk, dinsdag 20 maart 2012 16:54

Got a fully functional LazyLibrarian setup going on my Synology DS1511+

These instructions are a little rough.
Make sure you have IPKG setup and Python, Git installed before you attempt this.
I used Putty and had SSH enabled on the Synology, to do the installation.
I did not setup a script yet to start the service on reboot ...

1. Create a clone of the LazyLibrarian git source.
git clone git://github.com/Mar2zz/LazyLibrarian.git /usr/local/var/lazylibrarian

2. Create a .pid file to allow us to daemonize the LazyLibrarian
vi /usr/local/var/lazylibrarian/lazylibrarian.pid
add a 5 digit number to this newly created file; I used 30497
This will allow you to start and stop the daemon.
Save file.

3. Start the daemon
cd /usr/local/var/lazylibrarian
/usr/bin/python LazyLibrarian.py --daemon --pidfile lazylibrarian.pid

4. Configure the application from the following URL.
http://IP_OF_YOUR_SYNOLOGY:5299
Exit your remote session.

That's it!
I was able to restart the LazyLibrarian from the webgui, download authors / books, automatically post process and send nzb's to SABNZBd ...
Happy Reading!!!

Door Tweakers user spuis, maandag 9 april 2012 14:02

Perfect! Thank you. I will try it out immediately. I also read someone modified the headphone package with lazy librarian files to effectively put it in a package.
Development seems to have slowed recently by the way. I will start work on a logo.

Door Tweakers user AlwinHummels, dinsdag 31 juli 2012 14:10

Wordt dit nog steeds doorontwikkeld? ziet er namelijk veel belovend uit welke git kan ik het beste installeren?

Door Tweakers user Matr1xxx, zaterdag 25 augustus 2012 18:22

Ik heb voor de Synology DiskStation een SPK gemaakt, zodat je dit pakket eenvoudig via Package Center kunt installeren (en verwijderen). Ik ben het nog aan het testen, maar als het goed werkt zal het via een repository als SynoCommunity aangeboden worden zodat ook in de toekomst het pakket eenvoudig via Package Center bijgewerkt kan worden als er een update beschikbaar is (en een nieuw SPK gemaakt is).

Info:
http://www.synology-forum.nl/viewtopic.php?f=41&t=10225

I have created an SPK for the Synology DiskStation, to make it easier to unstall (and uninstall this software using Package Center. I am still testing it, but when everything works fine, then package will become available via a repository like SynoCommunity. It will then also become possible to upgrade the package when an update becomes availabe (and new SPK is created).

More info (in Dutch, but with some screenshots):
http://www.synology-forum.nl/viewtopic.php?f=41&t=10225

Door Tweakers user BorisN, dinsdag 15 januari 2013 20:04

Gaaf idee, heb je een api ingebakken? Ik ga kijken of ik het in mijn app kan inbouwen: https://play.google.com/s...lbi5jb3VjaGZvcndhcmRlciJd

Reageren is niet meer mogelijk