Preluare date firme de pe net

Informatii despre cum se utilizeaza Microsoft Access 2007. Baze de date, Interogari, Formulare, Rapoarte, etc
Avatar utilizator
mesersmith
Mesaje: 2088
Membru din: Sâm Oct 23, 2010 6:44 am
Localitate: calarasi
Contact:

Preluare date firme de pe net

Mesaj de mesersmith » Lun Noi 04, 2013 7:11 pm

Uitandu-ma la un program de facturare de la o firma cunoscuta din Romania, am observat ca de curand au introdus si posibilitatea de autocompletare a unui formular cu datele unei firme oarecare, dupa ce ii introduci codul fiscal.
Imi amintesc ca acum ceva vreme, am discutat aici si unul dintre colegi a si gasit o rezolvarea, la ideea de a prelua in mod automat cursul valutar de pe BNR si ma intrebam cam cum si de unde s-ar putea prelua si datele unei firme oarecare, dupa codul fiscal.
Stie cineva ceva despre acest lucru? Mi se pare o chestie foarte interesanta.

cvmircea
Moderator
Moderator
Mesaje: 403
Membru din: Lun Aug 03, 2009 7:25 pm
Localitate: Alba Iulia
Contact:

Re: Preluare date firme de pe net

Mesaj de cvmircea » Lun Noi 04, 2013 9:43 pm

Am vazut ca unii iau de pe site-ul anaf sau de pe site-ul registrului comertului. Eu folosesc openapi.ro ,pina in urma cu ceva timp functiona
perfect dar cred ca au schimbat ceva si nu mai reusesc sa preiau j-ul si localitatea (restul sunt ok) si nici nu am avut timp sa incerc sa il refac.
Alexandru avea un exemplu pe site-ul lui.

Avatar utilizator
mesersmith
Mesaje: 2088
Membru din: Sâm Oct 23, 2010 6:44 am
Localitate: calarasi
Contact:

Re: Preluare date firme de pe net

Mesaj de mesersmith » Lun Noi 04, 2013 9:50 pm

Da, ceva cu cursul valutar, cum spuneam.
Codul ala cred ca inca merge, o sa-l verific.
Dar despre codul in care as putea citi toate informatiile astea, nu prea am habar.
Mai sap.

cvmircea
Moderator
Moderator
Mesaje: 403
Membru din: Lun Aug 03, 2009 7:25 pm
Localitate: Alba Iulia
Contact:

Re: Preluare date firme de pe net

Mesaj de cvmircea » Lun Noi 04, 2013 9:51 pm

Pe openapi.ro gasesti mai multe chestii foarte utile. Eu il folosesc pentru preluarea date firme , pe site scrie ca folosesc ca si surse ministerul de finante, registrul comertului si VIES dar eu am schimbat sediul firmei in luna mai iar pe openapi apare tot sediul vechi pe cind pe mfinante.ro este sediul nou.

Avatar utilizator
mesersmith
Mesaje: 2088
Membru din: Sâm Oct 23, 2010 6:44 am
Localitate: calarasi
Contact:

Re: Preluare date firme de pe net

Mesaj de mesersmith » Mar Noi 05, 2013 1:40 am

Da, am preluat de acolo fisierul xml cu datele oricarei firme din Romania, insa am ceva probleme cu J-ul si cu orasul, exact ce spuneai si tu.
M-am chinuit ceva vreme incercand sa ii dau de cap, dar cred ca nu caut ce trebuie.
Oricum, e "de facut" si o sa postez codul si o modul functional dupa ce il fac sa mearga.
Ideea mi se pare foarte tare.
Mai e de lucru si la alte chestii care nu apar, dar sper sa le dau de capat.
O alta problema pe care am observat-o, Mircea, este ca daca setezi ie pe visible, o sa vezi ca se deschide ie-ul si, desi exista comanda de inchidere si eliberare a memoriei ocupata de ie, o sa observi ca de fapt, nu se prea inchide.
Eu am observat asta tot modificand de zeci de ori codul si rulandu-l si, la un moment dat, ultra laptopul meu a dat in balbaiala.
De fapt, ce se intamplase? M-am trezit cu cateva zeci de instante de ie deschise in spate.
Trebuie sa vedem de ce nu se inchide ie-ul in spate.

Avatar utilizator
mesersmith
Mesaje: 2088
Membru din: Sâm Oct 23, 2010 6:44 am
Localitate: calarasi
Contact:

Re: Preluare date firme de pe net

Mesaj de mesersmith » Mar Noi 05, 2013 8:26 pm

Din pacate, nu reusesc sa-l fac sa mearga.
Intr-adevar, cred ca e o problema in citirea xml-ului luat de pe openapi.ro.
Codul este urmatorul:



Public Sub VerificaCIFWeb_Click()

Dim ie As Object, strSource As String, strSQL As String
Dim strCif As String, strAddress As String, strCity As String, strCompany As String, strPhone As String, registration_id As String, strState As String, zip As String
'deschide internet explorer
Set ie = CreateObject("internetexplorer.application")

'instanta de ie nu e nevoie sa se vada
ie.Visible = True

' deschide link-ul cu xml in cauza, culegand codul fiscal cautat prin casuta text0


ie.Navigate "www.openapi.ro/api/companies/" & Me!Text0 & ".xml"


' asteapta pana se incarca
TryAgain:
While ie.Busy
DoEvents

Wend '

On Error GoTo TryAgain
strSource = ie.Document.body.outerHTML
On Error GoTo 0
'Text0.Value = strSource


' Strip the front of the html text up to the cif value
strSource = Mid(strSource, InStr(1, strSource, _
"cif") + 50)
' Assign cif to strCif
strCif = Left(strSource, InStr(1, strSource, "<") - 1)
' Strip the front of the html text up to the address
strSource = Mid(strSource, InStr(1, strSource, _
"address") + 54) '54
' Assign address to strAddress
strAddress = Left(strSource, InStr(1, strSource, "<") - 1)

' Strip the front of the html text up to the City
strSource = Mid(strSource, InStr(1, strSource, _
"city") + 51)
' Assign City to strCity
strCity = Left(strSource, InStr(1, strSource, "<") - 1)



' Strip the front of the html text up to the name
strSource = Mid(strSource, InStr(1, strSource, _
"name") + 51)
' Assign name to strCompany
strCompany = Left(strSource, InStr(1, strSource, "<") - 1)


' Strip the front of the html text up to the registration_id
strSource = Mid(strSource, InStr(1, strSource, _
"registration-id") + 62) '62
' Assign registration_id to registration_id
[registration-id] = Left(strSource, InStr(1, strSource, "<") - 1)



' Strip the front of the html text up to the state`
strSource = Mid(strSource, InStr(1, strSource, _
"state") + 52)
' Assign state to strState
strState = Left(strSource, InStr(1, strSource, "<") - 1)

Text1.Value = strAddress
Text2.Value = strCompany
Text3.Value = strState
Text4.Value = registration_id
'MsgBox "Cif: " & strCif & vbCrLf & "Address: " & strAddress & vbCrLf & "City: " & strCity & vbCrLf & "Company: " & strCompany & _
vbCrLf & "Registration: " & registration_id & vbCrLf & "State: " & strState, vbOKOnly

Label0.Caption = registration_id
' Remove the Internet Explorer object from memory
Set ie = Nothing
End Sub

Cu rosu este codul prin care se extrage orasul, iar cu albastru este codul prin care se extrage J-ul.


Codul xml prelua de pe openapi, este urmatorul:



<BODY class=st><DIV class=e><SPAN class=b>&nbsp;</SPAN> <SPAN class=m><?</SPAN><SPAN class=pi>xml version="1.0" encoding="UTF-8" </SPAN><SPAN class=m>?></SPAN> </DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em" class=c><A class=b onfocus=h() onclick="return false" href="#">-</A> <SPAN class=m><</SPAN><SPAN class=t>hash</SPAN><SPAN class=m>></SPAN></DIV>
<DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m><</SPAN><SPAN class=t>cif</SPAN><SPAN class=m>></SPAN><SPAN class=tx>16441585</SPAN><SPAN class=m></</SPAN><SPAN class=t>cif</SPAN><SPAN class=m>></SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m><</SPAN><SPAN class=t>city</SPAN><SPAN class=m>></SPAN><SPAN class=tx>Calarasi</SPAN><SPAN class=m></</SPAN><SPAN class=t>city</SPAN><SPAN class=m>></SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m><</SPAN><SPAN class=t>phone</SPAN><SPAN class=m>></SPAN><SPAN class=tx>0723224905</SPAN><SPAN class=m></</SPAN><SPAN class=t>phone</SPAN><SPAN class=m>></SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m><</SPAN><SPAN class=t>updated-at</SPAN><SPAN class=t> type</SPAN><SPAN class=m>="</SPAN><B>datetime</B><SPAN class=m>"</SPAN><SPAN class=m>></SPAN><SPAN class=tx>2013-10-20T00:32:01+00:00</SPAN><SPAN class=m></</SPAN><SPAN class=t>updated-at</SPAN><SPAN class=m>></SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m><</SPAN><SPAN class=t>fax</SPAN> <SPAN class=t>nil</SPAN><SPAN class=m>="</SPAN><B>true</B><SPAN class=m>"</SPAN><SPAN class=m> /></SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m><</SPAN><SPAN class=t>address</SPAN><SPAN class=m>></SPAN><SPAN class=tx>Str. 1 Decembrie 1918 26</SPAN><SPAN class=m></</SPAN><SPAN class=t>address</SPAN><SPAN class=m>></SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m><</SPAN><SPAN class=t>vat</SPAN><SPAN class=m>></SPAN><SPAN class=tx>1</SPAN><SPAN class=m></</SPAN><SPAN class=t>vat</SPAN><SPAN class=m>></SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m><</SPAN><SPAN class=t>zip</SPAN><SPAN class=m>></SPAN><SPAN class=tx>910010</SPAN><SPAN class=m></</SPAN><SPAN class=t>zip</SPAN><SPAN class=m>></SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m><</SPAN><SPAN class=t>created-at</SPAN><SPAN class=t> type</SPAN><SPAN class=m>="</SPAN><B>datetime</B><SPAN class=m>"</SPAN><SPAN class=m>></SPAN><SPAN class=tx>2011-11-23T19:07:24+00:00</SPAN><SPAN class=m></</SPAN><SPAN class=t>created-at</SPAN><SPAN class=m>></SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m><</SPAN><SPAN class=t>registration-id</SPAN><SPAN class=m>></SPAN><SPAN class=tx>J51 /239 /2004</SPAN><SPAN class=m></</SPAN><SPAN class=t>registration-id</SPAN><SPAN class=m>></SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m><</SPAN><SPAN class=t>name</SPAN><SPAN class=m>></SPAN><SPAN class=tx>Proteus Grup S.R.L.</SPAN><SPAN class=m></</SPAN><SPAN class=t>name</SPAN><SPAN class=m>></SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m><</SPAN><SPAN class=t>authorization-number</SPAN> <SPAN class=t>nil</SPAN><SPAN class=m>="</SPAN><B>true</B><SPAN class=m>"</SPAN><SPAN class=m> /></SPAN> </DIV></DIV>
<DIV class=e>
<DIV style="TEXT-INDENT: -2em; MARGIN-LEFT: 1em"><SPAN class=b>&nbsp;</SPAN> <SPAN class=m><</SPAN><SPAN class=t>state</SPAN><SPAN class=m>></SPAN><SPAN class=tx>CĂLĂRaŞI</SPAN><SPAN class=m></</SPAN><SPAN class=t>state</SPAN><SPAN class=m>></SPAN> </DIV></DIV>
<DIV><SPAN class=b>&nbsp;</SPAN> <SPAN class=m></</SPAN><SPAN class=t>hash</SPAN><SPAN class=m>></SPAN></DIV></DIV></DIV></BODY>


Ideea este ca toate celelalte date se extrag corect, doar orasul si J-ul nu vor.
M-am uitat la logica codului si la modul cum se extrag aceste date si totul pare corect.
Am un semn de intrebare la registration id, care in pagina xml vine ca si registration-id, in timp ce in cod este registration_id, pentru ca nu ia codul cu - intre cuvinte.
Poate are cineva vreo idee unde scartaie.

Mircea, din cate-mi dau seama, nu au schimbat nimic astia cu pagina openapi, cred ca e ceva legat de cod, nu extrage ce trebuie.
Eu am urmarit rezultatul si extrage niste balarii, adica la registration_id, numarul 62 reprezinta numarul de caractere dupa care se apuca de extractie.
Ei bine, am constatat ca citeste din balarii, adica in loc sa ia din registration_id, ia din urmatoarul set de date.

cvmircea
Moderator
Moderator
Mesaje: 403
Membru din: Lun Aug 03, 2009 7:25 pm
Localitate: Alba Iulia
Contact:

Re: Preluare date firme de pe net

Mesaj de cvmircea » Mar Noi 05, 2013 11:27 pm

Hai ca pina la urma ii dam de cap. Cum ti-am zis inainte eu nu mai vad in vba sursa paginii xml, dar acum ca ai postat si sursa am observat ca este inversat orasul cu adresa, daca le inversezi va merge . Pune codul pe care l-ai trecut cu rosu deasupra codului care citeste adresa:

Cod: Selectaţi tot

Strip the front of the html text up to the City
strSource = Mid(strSource, InStr(1, strSource, _
"city") + 51)
' Assign City to strCity
strCity = Left(strSource, InStr(1, strSource, "<") - 1)

 Strip the front of the html text up to the address
strSource = Mid(strSource, InStr(1, strSource, _
"address") + 54) '54
' Assign address to strAddress
strAddress = Left(strSource, InStr(1, strSource, "<") - 1)
Acum o sa ai si localitatea. Verific si pentru j si daca reusesc o sa postez varianta buna.

Avatar utilizator
mesersmith
Mesaje: 2088
Membru din: Sâm Oct 23, 2010 6:44 am
Localitate: calarasi
Contact:

Re: Preluare date firme de pe net

Mesaj de mesersmith » Mar Noi 05, 2013 11:36 pm

Da, Mircea. Am inversat si merge.
Eu azi m-am chinuit doar pentru registration id si chiar am numarat caracterele toata ziua si am cautat cu find rezultatul pe care il intorcea.
Am observat ca il gaseam prin state, adica prin judet.
Cred ca tot asta e, cred ca e in locul judetului j-ul.
Incerc acum.

cvmircea
Moderator
Moderator
Mesaje: 403
Membru din: Lun Aug 03, 2009 7:25 pm
Localitate: Alba Iulia
Contact:

Re: Preluare date firme de pe net

Mesaj de cvmircea » Mar Noi 05, 2013 11:44 pm

Am rezolvat si cu j-ul in loc de registration-id pune doar registration.
Daca te uiti in sursa paginii ordinea nu era aceeasi cu ordinea in care citea codul VBA, in momentul in care citeam adresa de fapt stergeam tot ce era inaintea cuvintului address , deci stergeam inclusiv localitatea. Codul este dintr-un exemplu de la Alexandru si functiona sigur pentru ca eu l-am folosit .

Avatar utilizator
mesersmith
Mesaje: 2088
Membru din: Sâm Oct 23, 2010 6:44 am
Localitate: calarasi
Contact:

Re: Preluare date firme de pe net

Mesaj de mesersmith » Mar Noi 05, 2013 11:46 pm

Eu am inversat intre timp si nu merge.
Pun registration peste tot, nu?

LE: Am pus, dar obtin aceleasi hieroglife.
Nu stiu exact ce nu am facut cum trebuie.

Închis

Înapoi la “Intrebari despre Access 2007”