Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 16. 4. 2020 14:50:33

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 588

dotaz na web xml +-VYŘEŠENO

Ahoj, zkoušeli jste tahat data z Aresu? Nějak to nemohu vypátrat. Vlastně jsem za 3 hodiny zkoumání neudělal vůbec nic :-( Adresa dotazu je např tato "http://wwwinfo.mfcr.cz/cgi-bin/ares/dar … o=26185610" (ič míří na agrofert, ale ten není cílem :-).
Zkoušel jsem systém filterxml(webservice();xpath) ale už ten webservice() mi dává neustále chybu #value, takže k ladění cesty xpath jsem se vůbce nedostal. Na systém pomocí makra jsem také nedošel. Umím tahat z webu soubory, ale toto není soubor - resp. svým způsobem je ale je to výsledek dotazu, nejde to jednoduše stáhnout jako soubor s koncovkou .xml - nebo aspoň nevím jak. Nějaký nápad, zkušenost?
Konečným cílem je získat na základě iča zejména Dič (pokud existuje) a případně adresu, ale to není nezbytné.

Editoval ludviktrnka (16. 4. 2020 18:30:43)


LibreOffice 6.2.

Offline

#2 16. 4. 2020 15:30:04

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,126

Re: dotaz na web xml +-VYŘEŠENO

ludviktrnka napsal(a)

Ahoj, zkoušeli jste tahat data z Aresu? Nějak to nemohu vypátrat. Vlastně jsem za 3 hodiny zkoumání neudělal vůbec nic :-( Adresa dotazu je např tato "http://wwwinfo.mfcr.cz/cgi-bin/ares/dar … o=26185610" (ič míří na agrofert, ale ten není cílem :-).
Zkoušel jsem systém filterxml(webservice();xpath) ale už ten webservice() mi dává neustále chybu #value, takže k ladění cesty xpath jsem se vůbce nedostal. Na systém pomocí makra jsem také nedošel. Umím tahat z webu soubory, ale toto není soubor - resp. svým způsobem je ale je to výsledek dotazu, nejde to jednoduše stáhnout jako soubor s koncovkou .xml - nebo aspoň nevím jak. Nějaký nápad, zkušenost?
Konečným cílem je získat na základě iča zejména Dič (pokud existuje) a případně adresu, ale to není nezbytné.

     To se mýlíte v té informaci je DIČ - jenom nemá uvedeno že je to DIČ. Konkrétně v uvedenám příkladu je to "CZ26185610". Zadejte toto do vyhledavače a uvidíte - vyskočí Agrofert :-)

Editoval neutr (16. 4. 2020 15:31:01)


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 16. 4. 2020 15:58:59

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 588

Re: dotaz na web xml +-VYŘEŠENO

pardon - špatně formulovaný dotaz. Jde mi systémové vyhledávání: zadám do buňky ič, ve vedlejší buňce se mi objeví dič. Mám databázi asi 500 IČ a potřebuji doplnit/ověřit DIČ, případně (ne nutně) i fakturační adresu.


LibreOffice 6.2.

Offline

#4 16. 4. 2020 16:19:39

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,126

Re: dotaz na web xml +-VYŘEŠENO

ludviktrnka napsal(a)

pardon - špatně formulovaný dotaz. Jde mi systémové vyhledávání: zadám do buňky ič, ve vedlejší buňce se mi objeví dič. Mám databázi asi 500 IČ a potřebuji doplnit/ověřit DIČ, případně (ne nutně) i fakturační adresu.

Takže pokud máte v buňce A1 IČO, tak vám funkce do B1 vloží výsledky - to umíte - vzpomeňte na ten problém z období asi před dvěma (nebo více) roky jak nás právě ares zablokoval coby portál (tedy dík mé blbosti)

     Takže nežli dostanete do buňky text - najděte "CZ & 8 čísel" a to vložte do buňky. nebo jde ještě o jiný problém?


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 16. 4. 2020 16:30:54

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 588

Re: dotaz na web xml +-VYŘEŠENO

Hm chápu, dič je většinou CZ+ič, ale není to vůbec stoprocentní: "Daňové identifikační číslo (DIČ) je jedinečnou a jednoznačnou identifikací každého daňového subjektu, právnické nebo fyzické osoby, která je plátcem daně (daňovým poplatníkem). DIČ se sestává z kódu země a z číselné kmenové části - identifikátoru. U poplatníka fyzické osoby je identifikátorem obvykle jeho rodné číslo, u právnické osoby je to většinou jeho identifikační číslo (IČO). Výjimečně je u fyzické nebo právnické osoby použité vlastní číslo plátce (VČP), které je jednoznačné pro působnost v České republice."

Navíc pokud subjekt není plátce, tak bych dič nezadával.



Edit: tak stáhnout už to umím, heuréka. Pomocí tohoto odkazu: https://codingislove.com/http-requests-excel-vba/. Teď už jen přečíst.


EDIT2: nakonec to dělám primitivně. Stáhnu a uložím jako txt a hledám řetězec D:DIC a pokud najdu tak si příslušnou sekvenci přečtu a vložím do buňky. Mám to jako více méně jednorázovou akci, takže to dostačuje. Cyklus na databázi 1200 řádků už je easy.

Editoval ludviktrnka (16. 4. 2020 18:30:14)


LibreOffice 6.2.

Offline

#6 16. 4. 2020 19:39:14

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 588

Re: dotaz na web xml +-VYŘEŠENO

Zde makro, kdyby to někoho zajímalo. Není to nic moc, ale posloužilo. Ten systém načtení xml z webu tady v diskuzi myslím ještě nezazněl.

Sub xmlAresII

Dim xmlHtp  As Object
Dim sURL    As String
Dim XMLDOC  As Object
Dim strResponse As String
Dim dIco as double
dim ico as string
dim dic as string
dim doc as object
dim list as object
Dim FileNo As Integer
Dim CurrentLine As String
Dim Filename As String


xmlHtp = CreateObject("MSXML2.XMLHTTP")
oleService = createUnoService("com.sun.star.bridge.OleObjectFactory") 
XMLDOC = oleService.createInstance("Msxml.DOMDocument")

doc = thisComponent
list = doc.Sheets.GetByName("List2")

for i = 1 to 1210

	dIco = list.GetCellByPosition(13 , i ).value
	
	if dIco <> 0 Then

		dic = ""
	
		ico = Format(dIco,"00000000")

		sURL = "http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=" & ico

		xmlHtp.Open "GET", sURL, False  
		xmlHtp.Send
		XMLDOC.loadXML xmlHtp.responseText
		strResponse = xmlHtp.responseText
rem celé to ukládání souboru by se dalo vynechat a použít přímo vyhledávání pomocí InStr v proměnné
rem strResponse podobně jako je to uvedeno níže po řádcích v souboru

		cesta = "C:\Temp_ares\"

		Filename = ConvertToURL(cesta & ico & ".txt")

rem nabízelo by se uložit jako xml a pak použít FILTERXML, ale to se mi nepodařilo

		FileNo = FreeFile
 
		Open Filename For Output As #FileNo
		Print #FileNo, strResponse
		Close #FileNo

		Open Filename For Input As FileNo

		Do While not eof(FileNo)
			Line Input #FileNo, CurrentLine
			StartPozice = InStr(CurrentLine, "D:DIC")   
	  		If StartPozice <> 0 then
	  			zacatek = InStr(CurrentLine, "CZ")
	  			konec =  InStr(CurrentLine,"</D:DIC>")
				dic = MID(CurrentLine, zacatek, konec - zacatek)
			end if
		Loop

		Close #FileNo

		list.GetCellByPosition(15 , i ).string = dic

	end if
	
	wait 500
	
next i

print "hotovo"

End sub

Editoval ludviktrnka (16. 4. 2020 21:24:04)


LibreOffice 6.2.

Offline

#7 17. 4. 2020 20:14:55

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 588

Re: dotaz na web xml +-VYŘEŠENO

Tak teď už docela použitelná verze. Čtení xml tam sice není, ale ten text už čtu krapet jednodušeji.

Sub NajdiFiremniUdaje

Dim xmlHtp  As Object
Dim sURL    As String
Dim XMLDOC  As Object
Dim strResponse As String
Dim dIco as double
dim ico as string
dim doc as object
dim list as object

Dim Pozice(4) as string
Dim Konec(4) as string
Dim Hodnota(4) as string

Pozice = Array("<D:OF zdroj=","<D:UC>","<D:PSC>","<D:N>","<D:DIC zdroj=")
Konec = Array("</D:OF>","</D:UC>","</D:PSC>","</D:N>","</D:DIC>")


'<D:OF zdroj="OR">Název Firmy s.r.o.</D:OF>
'<D:UC>Uličníkova 12345</D:UC>
'<D:PSC>11000</D:PSC>
'<D:N>Vejprty</D:N>
'<D:DIC zdroj="DPH">CZ00123456</D:DIC>

	doc = thisComponent
	
	vyber = doc.currentselection
	list = doc.sheets(vyber.rangeaddress.sheet)
	
	with vyber.rangeaddress
      radek = .startrow
      sloupec = .startcolumn
	end with
	
	dIco = list.getCellByPosition(sloupec, radek).value 'Prostě se nechá kurzor na políčku s IČem a zmáčkne se tlačítko, ičo musí být jako číslo!
		
	xmlHtp = CreateObject("MSXML2.XMLHTTP")
	oleService = createUnoService("com.sun.star.bridge.OleObjectFactory") 
	XMLDOC = oleService.createInstance("Msxml.DOMDocument")

	if dIco <> 0 Then

		dic = ""
	
		ico = Format(dIco,"00000000")

		sURL = "http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=" & ico

		xmlHtp.Open "GET", sURL, False  
		xmlHtp.Send
		XMLDOC.loadXML xmlHtp.responseText
		strResponse = xmlHtp.responseText
	
		For i = 0 to 4
		
			StartPozice = InStr(strResponse, Pozice(i))   
	  			If StartPozice <> 0 then
	  				izacatek = InStr(StartPozice, strResponse, ">") + 1' + len(Zacatek(i)) + 1
	  				ikonec =  InStr(izacatek, strResponse,Konec(i))
					Hodnota(i) = MID(strResponse, izacatek, ikonec - izacatek)
				end if
					
			list.GetCellByPosition(sloupec + 5 + i , radek).string = Hodnota(i)'Tohle je výstup, nutno upravit dle lokálních požadavků 
				
		Next i
	
	else
		msgbox ("Je zapotřebí nechat kurzor na ič",0,"Repete")

	end if

End sub

LibreOffice 6.2.

Offline

Zápatí