Skip to content

Instantly share code, notes, and snippets.

@atlefren
Created November 29, 2013 15:57
Show Gist options
  • Select an option

  • Save atlefren/7707740 to your computer and use it in GitHub Desktop.

Select an option

Save atlefren/7707740 to your computer and use it in GitHub Desktop.
#!/usr/bin/python
# -*- coding: latin-1 -*-
from suds.client import Client
import xml.etree.ElementTree as ET
import suds
import os
import logging
import httplib, ssl, urllib2, socket
import base64
logging.basicConfig(level=logging.INFO)
#logging.getLogger('suds.client').setLevel(logging.DEBUG)
#logging.getLogger('suds.transport').setLevel(logging.DEBUG)
#logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)
#logging.getLogger('suds.wsdl').setLevel(logging.DEBUG)
class HTTPSConnectionV3(httplib.HTTPSConnection):
def __init__(self, *args, **kwargs):
httplib.HTTPSConnection.__init__(self, *args, **kwargs)
def connect(self):
sock = socket.create_connection((self.host, self.port), self.timeout)
if self._tunnel_host:
self.sock = sock
self._tunnel()
try:
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, ssl_version=ssl.PROTOCOL_SSLv3)
except ssl.SSLError, e:
print("Trying SSLv23.")
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, ssl_version=ssl.PROTOCOL_SSLv23)
class HTTPSHandlerV3(urllib2.HTTPSHandler):
def https_open(self, req):
print req
return self.do_open(HTTPSConnectionV3, req)
class MatrikkelAdressService(object):
def __init__(self, url, wsdl_url, username, password):
self.url = url
self.wsdl_url= wsdl_url
self.username = username
self.password = password
# install opener
opener = urllib2.build_opener(HTTPSHandlerV3())
self.transport = suds.transport.https.HttpAuthenticated(username=username, password=password)
self.transport.urlopener = opener
def create_client(self):
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
authentication_header = {
"WWW-Authenticate": "https://www.test.matrikkel.no",
"Authorization" : "Basic %s" % base64string
}
client = Client(
url=self.wsdl_url,
location="https://www.test.matrikkel.no/innsynapi_v3/adresse/AdresseWebService",
transport = self.transport,
username=self.username,
password=self.password
)
client.set_options(headers=authentication_header)
return client
def all_roads(self, municipality_number):
return self.create_client().service.findAlleVeger(municipality_number)
def search_address(self, query, municipality_number):
return self.create_client().service.findAdresserForVeg(query, municipality_number)
username = os.environ["MATRIKKEL_USERNAME"]
password = os.environ["MATRIKKEL_PASSWORD"]
url = 'https://www.test.matrikkel.no/innsynapi_v3/adresse/AdresseWebService?WSDL'
# TODO!
wsdl_url = "file:///home/atlefren/code/matrikkel/AdresseWebService.xml"
matrikkel_service = MatrikkelAdressService(url, wsdl_url, username, password)
print matrikkel_service.search_address("Munkegata", "1601")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment