Hgyvk: docx to XML generátor leírás


( ! ) Warning: file_get_contents(booklibrary.php): Failed to open stream: No such file or directory in /var/www/html/hgyvkdocxtoxmlgenerator.php on line 55
Call Stack
#TimeMemoryFunctionLocation
10.0007499280{main}( ).../hgyvkdocxtoxmlgenerator.php:0
20.0083785384file_get_contents( $filename = 'booklibrary.php' ).../hgyvkdocxtoxmlgenerator.php:55

HGYVK .docx konvertáló program XML-be

Leírás/Magyarázat/Történet



Hgyvk - docx to XML generator logo

A történet ott kezdődött, hogy egy könyvtár cégtől, nevezetesen a HGYVK-tól kapunk havi szinten 50-100-150 vagy még több könyvet egy docx dokumentumban táblázatosan elrendezve, amit nekünk kell egyesével feltölteni a weboldalra az Ordasoft Booklibrary komponensébe.
Már kezdetek kezdetén elgondolkoztam rajta, hogy ezt vajon nem lehetne automatizálni valahogy. Elmélkedtünk kollégával, hogy egyszerűbb lenne, ha megkérnénk a táblázat készítőjét, hogy xls/xlsx-be készítse el, és azt már könnyű csv-be konvertálni, amit már könnyebb átalakítani. Aztán ez valahogy annyiba maradt, de én később úgy döntöttem megpróbálom kinyerni az adatokat a docx táblázataiból, beolvastatni xml-be, és onnan már jöhet az import és kész is.

Elég is ennyi a történetből...
Mivel nem nagyon volt ötletem merre érdemesebb elindulni az AI-hoz fordultam, leírtam neki a helyzetet, és egyből is adta a kis python kódot, ami szépen beolvasta a docx-et, végigjárta a táblázatokat, kinyerte az adatokat, és már csak finomítgatni kellett.
Eljutottam odáig, hogy kiszedte a megfelelő adatokat, és legenerálta az első értelmesnek tűnő xml fájlt. Meg is próbáltam a booklibrary-ban importálni, és itt jöttek a buktatók. A Booklibrary import/export menüpontja inkább csak arra van kihegyezve, ha egyik weboldalról a másikra akarjuk átvinni az adatokat, vagy költöztetni akarjuk a könyv/szerző... adatainkat. Vagyis a kiexportált pl kategóriához minden adatot lement xml/csv fileba, és vissza import-nál szépen ott is van a könyv, a szerző, a kapcsolati adatok így minden szuper, csak nekem pont nem ez kellett, hanem nekem az xml feltöltésekor kellett volna a "<authors>"-ből kiszedni a szerzőt, leellenőrizni, hogy van-e már ilyen az adatbázisban, ha van kinyerni az ID-ját, ha nincs felvenni újként, és kivonni az azonosítóját, majd feltölteni a könyvet, kinyerni annak is az ID-ját és ezt felvinni a kapcsolati táblázatba, ami ugye összekapcsolja a könyveket a szerzőkkel. De sajnos ezt az ordasoft nem oldotta meg. Így hát nyomoztam, debugoltam, kutakodtam vajon melyik fájljuk végzi az import/export-ot és abban mi mit csinál. Mire rátaláltam, hogy a "/administrator/components/com_booklibrary" mappában található a "admin.booklibrary.class.impexp.php" nevű php fájl, azon belül is a 443. sor környékén található "importBooksXML" függvény végzi az import műveletet, így azt kellett szerkesztenem. Itt nem nagyon értem miért van ez a verzió ellenőrzés, de én hozzátettem hogy ha nagyobb mint 3.6, akkor is lefusson, nekem csak az a lényeg, hogy ez fusson le, így kiszedi a szerőmet az xml-ből. MAjd jött az adatbázis művelet, amihez nem használtam a booklibrary saját függvényeit, mert az feldarabolja "," karakterenként a stringet, nekem arra nincs szükségem (habár lehet a későbbiekben belerakom még ezt is), elég ha megnézi megvan-e a szerző, ha nincs felveszi és elmenti az ID-ját. Majd az alap könyv feltöltése jön, amit nem bántottam, és utána nekem még kellett a szersző és a könyv összekötése az "authors_connect" táblába. Itt is volt egy függvény, ami lefut, ha a J verzió kisebb mint 3.6, aminek még mindig nem tudom mi a jelentősége, de hagytam, és egy else ágba beleraktam a sakát kódomat, ami a kapott szerő ID-t és a könyv ID-t összekapcsolja, és lám, minden szuper is.

Sokat teszteltem, küszködtem még a képek hozzárendelésével is. Ugye abban szerencsénk van, hogy próbálják a képeket úgy elnevezni, ami a könyv címe, ami már egy nagyon jó kiindulópont, de feltöltéskor ugye a Joomla ékezettelenít, akkor ezt nekem is már úgy kellett az xml-be raknom. Illetve volt több tesztem a "-", "_", "." és a " " karakterek miatt, de talán most már azt is jól elvégzi. Így ha feltöltöm az xml-t már csak a képeket kell felraknom a "/components/com_booklibrary/covers/" mappába, egy ellenőrzés, javítás, ha mégis valami rossz, és lehet örülni, hogy ezt a sok "unalmas/altató" munkát pár kattintással elintézhetjük.


Frissítés: 0.1 Az ISBN szám ellenőrzést is beletettem, így ha valahol hiányzik ez a szám, ami ugye kötelező a feltöltéshez, akkor azonnal leáll a script és figyelmeztet, hogy melyik "sorban", melyik könyvnél hiányzik ez a szám.
Továbbá a könyv képének meglétét is ellenőrzöm. Habár elégé hamar megtalálja a képet, a tesztek alapján, ha egy könyv címe pl.: "Bosszú" akkor már a "valami boss valami.jpg" nevű képet hozzárendeli, ami lehet fog problémát okozni a későbbikben, ha eléggé azonos nevű könyvekről lesz szó, de ezt majd akkor a későbbiekben javítom.


Csatolok képeket a programról, plusz a programot is felrakom letölthető formában. A konkrét python kódot nem rakom fel, de ha valakit esetleg mégis érdekelne, vegye fel velem a kapcsolatot és megbeszéljük...

Manjaro Linux printscreen a programról

Képernyőkép a linuxon futó programról!

Letöltések:




A booklibrary php függvény módosítása, kommentelve: