GUS – nowa wyszukiwarka REGON w C#, Delphi, PHP
Pobranie danych kontrahenta na podstawie nru NIP jest przydatną funkcjonalnością w celu weryfikacji lub automatyzacji wprowadzanych danych w programach typu ERP.
OferujÄ™ rozwiÄ…zania oparte o API GUSu (wykonanÄ… zgodnie z zalecanÄ… architekturÄ… przez GUS). Wniosek o klucz testowy lub produkcyjny w GUS jest bezpÅ‚atny (odpowiedź z GUS jest bÅ‚yskawiczna).Â
Oferuję rozwiązanie w dwóch wariantach:
- Biblioteka DLL + przykładowa aplikacja w Windows Forms
- Rozwiązanie w oparciu o serwis pośredniczący (skrypt PHP + aplikacja kliencka w Delphi/C#)
Zainteresowanym mogę podesłać link do dema w PHP.
Aktualizacja 2018-09-06
Oferuję też wersję dla podmiotów publicznych ADM.
GUS WSDL
Najlepszym i obecnie zalecanym rozwiÄ…zaniem jest postawienie WebService na swoim serwerze. UsÅ‚uga ta bÄ™dzie sÅ‚użyÅ‚a jako warstwa poÅ›rednia dla klientów koÅ„cowych. Zapobiega to “zaszywaniu” swojego klucza API w aplikacjach klienckich i pozwala na kontrolÄ™ nad iloÅ›ciÄ… wysyÅ‚anych zapytaÅ„.
Poniższy schemat przedstawia uproszczony schemat takiej architektury. Własny WS (zlokalizowany na naszym serwerze) komunikuje się z API GUSu. Żądania do naszego WS z poziomu aplikacji klienckiej są realizowane przez protokół HTTP (zwykłe wywołanie typu GET z parametrem NIP lub REGON). Serwis odpowie w formacie JSON (brak wyniku lub dane w formacie obiektu JSON). Taka forma wywołania/odpowiedzi pozwala na łatwe skonsumowanie tego serwisu nawet w egzotycznych językach/środowiskach.
Wymagania:
- Uzyskany klucz testowy (dane wrażliwe są zamazywane w odpowiedzi) lub docelowo produkcyjny. Mogę pomóc z wnioskiem o uzyskanie klucza API
- Hosting z PHP >= 5.3
Pakiet zawiera:
- Skrypty PHP gotowe do wrzucenia na hosting (tylko uzupełnić klucz)
- Przykładowa aplikacja w Delphi lub C#
GUS DLL
Alternatywnym rozwiązaniem jest biblioteka napisana w C#, która obsługuje wszystkie zdarzenia związane z komunikacją z GUS. Należy wtedy zaszyć klucz API bezpośrednio w aplikacji/bazie danych. Klient końcowy musi wtedy wnioskować o klucz produkcyjny do GUSu.
Wystawiam FV.
Inne środowiska programistyczne
JeÅ›li potrzebujesz bibliotekÄ™ na innÄ… platformÄ™ lub funkcjonalnoÅ›ci której nie ma – mogÄ™ to wykonać. Również inne tego typu parsery. PrzeÅ›lij specyfikacjÄ™ projektu – biuro@largosystem.pl
ARCHIWUMÂ 2016-10-25
Z uwagi na to, że GUS obfuskuje caÅ‚Ä… transmisjÄ™ danych po dostÄ™pie publicznym – nie wspieram już tego rozwiÄ…zania.
GUS udostępnił nową wyszukiwarkę podmiotów gospodarczych, która opiera się o webservice i komunikację poprzez JSON. Stara wyszukiwarka nadal funkcjonuje, ale dane już nie są aktualizowane (stan bazy danych na 2014-11-07). Napisałem odpowiednią bibliotekę w języku C# oraz porty na inne języki, które współpracują z nową wersją wyszukiwarki.
 Aktualizacja 2016-01-27
Wygląda na to, że captcha została zlikwidowana. Oto treść wiadomości, którą otrzymałem.
Captcha nie została usunięta z aplikacji WEBowej, zmieniły się zasady jej działania. Weryfikacja kodu captcha będzie wymagana dla adresów IP generujących dużą ilość zapytań.
Główne zmiany
Komunikacja opiera się poprzez JSON z udostępnionym webservice. Nie trzeba już uzupełniać cookies jak w poprzedniej wersji, lecz wysłać odpowiednie żądania z parametrami. W odpowiedzi otrzymujemy również wiadomość w formacie JSON.
Udostępnienie kodu
Zainteresowane osoby/firmy proszę o kontakt. Oferuję bibliotekę w dwóch wariantach: w tańszej wersji bez wsparcia lub ze wsparciem (1 rok). Pakiet zawiera:
- pełny kod źródłowy biblioteki
- pełny kod źródłowy przykładowego projektu
Mogę wystawić FV. Poniżej przedstawiam galerię zdjęć przykładowego programu wykorzystującego bibliotekę.
Funkcjonalność biblioteki
- Wyszukiwanie podmiotu po NIP, REGON itd.
- Informacja o stanie bazy danych
- Automatyczne pobranie wszystkich dostępnych raportów (w formacie klucz -> wartość)
Biblioteka udostępnia wszystkie pomocne zdarzenia (events) takie jak: zalogowany, captcha (pobrana / prawidłowa / nieprawidłowa), wyszukiwanie (pobrano raporty / brak wyników). Projekt skompilowany jest na Visual Studio Community 2013 (.NET 4.0). Istnieje możliwość modyfikacji kodu aby był kompatybilny z .NET 2.0.
Dostępne platformy
- C# .NET 3.5/4.0 (możliwość przeróbki dla wersji 2.0)
- Delphi XE+
- CBuilder XE+
- PHP
Â
Strona Internetowa
Potrzebujesz Å‚adnej strony internetowej? Zobacz demo na: tej stronie
Panie Tomku.
Proszę o pomoc, mam dodaną referencje do WSDL, wszystko zadeklarowane, widać metody.
LogujÄ™ siÄ™ używajÄ…c zaloguj, podajÄ…c nadany przez GUS klucz użytkownika. zwraca mi 20 znakowy string. Teraz jak chcÄ™ pobrać captcha, zwraca -1, sesja wygasÅ‚a. ProszÄ™ o “maÅ‚e” nakierowanie co robiÄ™ źle, bo oczywiÅ›cie Panowie z GuS nie raczÄ… odpowiadać na maile ;).
Niestety, ale nie testowałem tej metody. Rozwiązanie mam oparte na własnych żądaniach POST z JSON i bez specjalnego dostępu ze strony GUS. Po zalogowaniu się i otrzymaniu SIDa, w każdym nagłówku należy go przesyłać. Captchę bez problemu pobieram bez dodatkowych parametrów.
Chyba mnie Pan nakierował. Czyli pobrać sid ich metodą a później opakować to ręcznie dzięki POST i JSON?
Jeśli masz zaimportowaną usługę to raczej nie tu leży problem, aby coś samemu opakowywać dodatkowo.
Witam, korzystam z HttpRequesta, ale przy pierwszym połączeniu z index.aspx nie otrzymuję cookies, wiesz może dlaczego? Mam ustawiony cookiecontainer, zabrakło czegoś w headerze?
W nowej wersji już nie działamy na cookies lecz na JSON. Chyba, że masz na myśli starą wersję wyszukiwarki?
Rozumiem, ale sprawdzałem Fiddlerem, że jednak cookie jest zapisywane, mam rozumieć, że nie jest ono niezbędne?
Nie trzeba dbać o cookies. Jedynie SID trzeba przesyłać w nagłówku żądania.
Mam jeszcze jedno pytanie, jeżeli mam już w odpowiedzi Captche to jak tą odpowiedź przerobić na obrazek, zwykłym Serializerem, czy potrzebuje jakiejś konwersji?
Captcha jest kodowana Base64. W necie jest pełno przykładów: base64 to image
A jak string odebrany przez httprequesta przerobić na base64 to mi się coś psuje, nie jest to jakoś kodowane, albo szyfrowane?
Mam takie coÅ›:
using (var reader = new StreamReader(response.GetResponseStream()))
{
JavaScriptSerializer js = new JavaScriptSerializer();
var objText = EncodeTo64(reader.ReadToEnd());
Base64StringToBitmap(objText);
captcha = (Image)js.Deserialize(objText, typeof(Image));
}
objText wypluwa mi zupełnie co innego niż to co pokazuje fiddler
Odpowiedzi z serwera są kompresowane. Musisz ustawić automatyczną dekompresję w HttpWebRequest. Odpowiedź wtedy będzie JSONem i w tablicy będziesz miał base64 captchy
Dzięki kolego, jesteś WIELKI, pozdrawiam!
Nowy kod Pana Tomka działa poprawnie.
Polecam !!! Duża oszczędność pracy.
Witam
Z tego co wyczytaÅ‚em biblioteka ta korzysta z HTTP i JSON, natomiast ja próbujÄ™ oprzeć siÄ™ o WSDL. Niestety, ale po uprzednim zalogowaniu podczas pobierania captchy dostajÄ™ informacje, że sesja wygasÅ‚a… funkcja PobierzCaptcha nie przyjmuje parametrów, zakÅ‚adaÅ‚em, że obiekt przechowuje id sesji i przesyÅ‚a je sam, ale chyba coÅ› tu musi nie grać, skoro przy pierwszym requeÅ›cie po logowaniu sesja wygasÅ‚a.
Zgadza siÄ™ – rÄ™cznie przygotowujÄ™ “paczkÄ™” do usÅ‚ugi.
Proponowałbym podejrzeć Fiddlerem co jest wysyłane.
Przyznam, że niezbyt widzi mi siÄ™ budowanie tego w oparciu o HTTP, kiedy mam pod rÄ™kÄ… rozwiÄ…zanie teoretycznie dużo prostsze. Tym bardziej, że pracujÄ™ z desktopowym softem. Cóż, chyba pozostaje mi poczekać na odpowiedź z GUSu odnoÅ›nie tego, co robiÄ™ nie tak przy pobieraniu tej captch’y ; )
Logowanie jest na standardowego użytkownika?
Standardowego? ; ) Są jeszcze jacyś inni? :> Póki co dostęp jest testowy, klucz też zapewne testowy.
Ja logujÄ™ siÄ™ na taki klucz “aaaaaabbbbbcccccdddd” i otrzymujÄ™ ID sesji. Może tu gdzieÅ› masz problem.
ja dostałem mailowo klucz z GUSu, nieco inny, ID sesji także otrzymuje, zapisuje je, bo jest potrzebne do wylogowania ;> wylogowanie nie stanowi problemu.
Ja też męczę się z panami z GUS. Telefonicznie niewiele można się od nich dowiedzieć, na maile odpiszą raz w tygodniu (czasami).
Ostatnio dostałem info, że SID należy przeysłać nagłówkiem HTTP, a nie SOAP, ale nawet po tym ciąglę otrzymuję błąd 500.
Poniżej treść mojego żadania, jeśli ktoś moze pomóc lub podpowiedzieć, bedę bardzo wdzięczny
POST /wsBIR/UslugaBIRzewnPubl.svc HTTP/1.1
Host: wyszukiwarkaregontest.stat.gov.pl
Connection: Keep-Alive
User-Agent: PHP-SOAP/5.4.32
Content-Type: application/soap+xml; charset=utf-8; action=”http://CIS/BIR/2014/07/IUslugaBIR/PobierzCaptcha”
Content-Length: 437
Sid: 4p9p2g6d4f7v3f8t4c2r
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://CIS/BIR/2014/07" xmlns:ns2="http://www.w3.org/2005/08/addressing">
<env:Header>
<ns2:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj</ns2:Action>
<ns2:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</ns2:To>
</env:Header>
<env:Body>
<ns1:PobierzCaptcha/>
</env:Body>
</env:Envelope>
Przetestowałem. Należy dodać sid do nagłówka HTTP. Wtedy zwraca base64 captchy zamiast -1 : )
Po bÅ‚Ä…dzeniu po doku i kodzie (generowane proxy) trafiÅ‚em na problem jak wy – a dokÅ‚adniej – ciężko jest dodać wÅ‚asny header do HttpWebRequesta, który leci po proxy.
Jedynym rozwiÄ…zaniem zdaje siÄ™ być komunikacja “rÄ™czna” z użyciem JSON
Dodanie sida do nagłówka nie rozwiązuje problemu?
Nie udało mi się przekazać sida w Header. A doku przeczytałem za późno. Btw: obecnie na jednej captcha juz 20 zapytań można wykonać.
Dzięki za zwrócenie uwagi. Mi wygasła sesja po 25 zapytaniach.
Witam, mam pewien problem, otóż wszystko działa w porządku, jeżeli za pierwszym razem uruchamiam swój program i pobieram dane z GUSU, natomiast jeżeli otworzę okienko odpowiedzialne za to po raz kolejny, to nie chce mi pobrać captchy ani nawet się zalogować, co ciekawe jeżeli mam uruchomionego fiddlera to wszystko działa bez zarzutów, czyżbym zapomniał o czymś w nagłówku? Analizowałem wszystko i jedyną rzeczą której nie miałem a miał fiddler były Cookie, ale po dodaniu tego, błąd nie ustąpił, proszę o nakierowanie na rozwiązanie
Trudno stwierdzić bez kodu. Sprawdziłem i nawiązywanie wielu sesji jest możliwe.
Witam, Panie Tomaszu mam gorącą prośbę, przygotowuje małą aplikację która ma uwzględniać pobieranie danych z GUS i nie rozumiem instrukcji z gusu. dostałem linki do plików. dostałem klucz.
w przykładach jest wykorzystana klasa: UslugaBIRpubl . nie jestem pewien jak to funkcjonuje. czy klasę tę mam sam zbudować na podstawie plików xsd. Próbowałem wg opisów wygenerować klasę za pomocą narzędzia xsd.exe ale dostaje za każdym razem error:
C:\xxx>xsd UslugaBIRzewnPubl.xsd /classes
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.17929]
Copyright (C) Microsoft Corporation. All rights reserved.
Schema validation warning: Głównym elementem schematu W3C XML powinien być element <schema>, natomiast jego przestrzenią nazw powinna być przestrzeń http://www.w3.org/2001/XMLSchema. Line 2, position 4.
Error: Schema c:\xxx\uslugabirzewnpubl.xsd could not be validated.
I teraz nie wiem czy ja coś źle robię czy coś jest z plikami nie tak. Czy xsd powinien wygenerować klasy z implementacją metod, które są opisane w pdfie gusowskim np metoda DaneSzukaj ?
Dziękuję za pomoc :)
PS: jakie są ceny biblioteki dla .net  z wsparciem a jakie bez ? co daje wsparcie ?
Pozdrawiam
Po prostu zaimportować usługę w Service References.
Panie Tomku mam takie pytanie. Tworzę aplikację w C#, zrobiłem integrację z GUS, funkcja DaneSzukaj pokazuje mi wszystko w textboxie i jest ok. Ale przy próbie użyciu funkcji
DanePobierzPelnyRaport(“NUMER REGON”, “PublDaneRaportFizycznaOsoba”);
nie jest nic pokazywane w textboxie, czy może Pan nakierować co może być przyczyną?
Jedna z dwóch możliwości:
1) SID nie jest przesyłany w żądaniu HTTP
2) Numer regon jest dla podmiotu prawnego
po drobnych modyfikacjach otrzymuję komunikat błędu 5 (brak uprawień) co może być nie tak?
kod dostępowy otrzymałem z gus-u