|
![]() |
#1 |
Premium
Datum registracije: Jul 2017
Lokacija: Ramura
Postovi: 2,257
|
Backup adresara (carddav) putem skripte?
Možda je netko već radio, ili barem ima ideju pa da ubrzam kopanje. Imam privatni i poslovni adresar na webu u obliku carddav kalendara, dostupan kroz link i autorizaciju (korisničko ima i lozinka). Webdav backend je sabredav. Umjesto da ručno preko sučelja jednom mjesečno radim backup adresara, mislio sam složiti nešto da mi svaki dan u određeno vrijeme napravi backup na moj Synology NAS. NAS je na linuxu, tako da bi se trebalo moći na njemu pokrenuti i staviti u cronjob. Ne očekujem gotovu skriptu, ali bilo bi zahvalan na pogurancu u pravom smjeru, bar da mi se objasni način na koji bih mogao složiti i s kojim pomoćnim programima. Nisam programer, ali se snalazim. Svakako objavim ovdje skriptu ako je uspijem složiti. ![]() |
![]() |
![]() |
![]() |
#2 |
E Pluribus UNIX
Datum registracije: Oct 2002
Lokacija: M82
Postovi: 6,509
|
https://sabre.io/dav/vcf-export-plugin/ Ako je to to, okines u cronu neki curl/wget zahtijev i dobar si.
__________________
Programer
Rok od dva mjeseca u stvari znači četiri, ali nikako ispod šest. |
![]() |
![]() |
|
|
Oglas
|
|
![]() |
#3 |
Premium
Datum registracije: Jul 2017
Lokacija: Ramura
Postovi: 2,257
|
Baš se evo maltretiram cijelo poslije podne. ![]() Brzo sam pronašao kako povući XML podatke za VCF: Code:
curl -X PROPFIND -u username:password -H "Content-Type: text/xml" -H "Depth: 1" --data "<propfind xmlns='DAV:'><prop><address-data xmlns='urn:ietf:params:xml:ns:carddav'/></prop></propfind>" https://url.com Uglavnom, uspio sam isčupati sve test VCARD iz tog xml-a i spremiti u datoteku. Sada to treba malo očistiti od gluposti koje sam napisao i sve staviti u neku bash skriptu koja će kada sve završi spremiti rezultat kao backup, a obrisati sve nepotrebne datoteke. Kada završim stavim ovdje pa neka ima ako kome zatreba. |
![]() |
![]() |
![]() |
#4 | |
E Pluribus UNIX
Datum registracije: Oct 2002
Lokacija: M82
Postovi: 6,509
|
Ne kuzim kako (i zasto) dobivas XML, dokumentacija kaze: Citiraj:
__________________
Programer
Rok od dva mjeseca u stvari znači četiri, ali nikako ispod šest. |
|
![]() |
![]() |
![]() |
#5 |
Premium
Datum registracije: Jul 2017
Lokacija: Ramura
Postovi: 2,257
|
E to bih i ja volio, ali nemam kontrolu nad serverom (kough SaaS kough) tako da ako ima taj plugin, super, ako nema koristim već napravljeno. Bitno da sam ja uspio dobiti taj single file vcf preko xml parsera. Sada ću pokušavati da li mogu dobiti isti direktno od servera. |
![]() |
![]() |
![]() |
#6 |
Premium
Datum registracije: Jul 2017
Lokacija: Ramura
Postovi: 2,257
|
Da objavim konačan rezultat ukoliko nekome bude trebalo ili barem za ideju drugima. Kao što sam napisao, htio sam to riješiti na Synology NAS-u, pošto on radi 24/7, a i skladište mi je podataka. Nisam dizao nikakve virtualke, a koristio sam bash i nodejs + xml-js. Nodejs sam koristio iz razloga što već imam nekog iskustva s nodejs pa mi je bilo lakše, ali ima i PHP / Perl xml parsera. Nemam neki poseban razlog za Node modul xml-js, probao sam prvo neki drugi, ali nije radio ispravno, dok ovaj radi. Bash skripta koja se pokreće preko cronjob-a, s komentarima Code:
#!/bin/bash #povlači xml sa Sabredav servera i sprema u datoteku curl -X PROPFIND -u username:password -H "Content-Type: text/xml" -H "Depth: 1" --data "<propfind xmlns='DAV:'><prop><address-data xmlns='urn:ietf:params:xml:ns:carddav'/></prop></propfind>" URL_DO_ADRESARA -o result.xml sleep 10s node parse_xml.js sleep 15s #dohvaća današnji datum u obliku YYYY-MM-DD Full=`date -I` #uklanja nepotrebnu xml datoteku rm result.xml #briše prazne retke, sprema u temp datoteku i onda premješta preko originalne datoteke grep . result.vcf > result.temp mv result.temp result.vcf #synology stvar, nije mi vidljiva datoteka na ne-admin korisniku ukoliko ovo ne napravim, vjerojatno može i manje dopuštenja, ali ne da mi se isprobavati chmod 777 result.vcf #premješta konačnu datoteku na backup poziciji i mijenja joj naziv u YYYY-MM-DD-NAZIV.vcf mv result.vcf "/putanja/do/backup/direktorija/$Full-NAZIV.vcf" Code:
var fs = require('fs'); var convert = require('xml-js'); let xml = ''; // funkcija za pisanje u datoteku, zamijenjuje console.log var util = require('util'); const datoteka = "/putanja/do/mjesta/gdje/zelite/zapisati/result.vcf" var logFile = fs.createWriteStream(datoteka, { flags: 'a' }); // Or 'w' to truncate the file every time the process starts. var logStdout = process.stdout; console.log = function () { logFile.write(util.format.apply(null, arguments) + '\n'); logStdout.write(util.format.apply(null, arguments) + '\n'); } // kraj funkcije pisanja u datoteku fs.readFile('result.xml', 'utf8', function(err, data) { if (err) throw err; //console.log(data); //this works fine here xml = data; //setting it here so that I can use it afterwards var result1 = convert.xml2js(xml, {compact: false}); var count_rdy = result1['elements'][0]['elements'] var count = count_rdy.length var i = 1 while (i < count) { console.log(result1['elements'][0]['elements'][i]['elements'][1]['elements'][0]['elements'][0]['elements'][0]['text']); i++; } }); Vjerojatno bi se cijeli parse xml dio mogao napraviti i preko bash-a. Potrebno bi bilo isčupati sve između "<card:address-data>" i "</card:address-data>" tagova (multi-line), i to koliko god puta se pojavljuje, te spremiti u datoteku jedno iza drugoga. To je to, možda nekome pomogne. Ako netko ima prijedlog kako poboljšati, otvoren sam za komentare. ![]() Zadnje izmijenjeno od: Libertus. 08.08.2022. u 09:22. |
![]() |
![]() |
![]() |
#7 |
Moderator
Datum registracije: Sep 2006
Lokacija: St
Postovi: 22,058
|
Bravo kolega, + za trud, + za share rješenja. |
![]() |
![]() |
|
|
Oglas
|
|
![]() |
Uređivanje | |
|
|