Apr-29-2018, 03:31 PM
Hi All,
I am having problems trying to work out what I have done wrong, any help would be much appreciated :)
The error points to:
for header in headers.items():
AttributeError: 'set' object has no attribute 'items'
I am having problems trying to work out what I have done wrong, any help would be much appreciated :)
The error points to:
for header in headers.items():
AttributeError: 'set' object has no attribute 'items'
import requests
import pandas as pd
from lxml import etree
def getXML(toDate, fromDate, dayType):
url ="http://marketinformation.natgrid.co.uk/MIPIws-public/public/publicwebservice.asmx"
headers = {'Content-Type: application/soap+xml; charset=utf-8'}
body ="""
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<GetPublicationDataWMResponse xmlns="http://www.NationalGrid.com/MIPI/">
<reqObject>
<LatestFlag>N</LatestFlag>
<ApplicableForFlag>Y</ApplicableForFlag>
<ToDate>%s</ToDate>
<FromDate>%s</FromDate>
<DateType>%s</DateType>
<PublicationObjectNameList>
<string>LNG Stock Level</string>
</PublicationObjectNameList>
</reqObject>
</GetPublicationDataWM>
</soap12:Body>
</soap12:Envelope>
"""% (toDate, fromDate, dayType)
response = requests.post(url, data=body, headers=headers)
return response.content
df = pd.DataFrame(columns=("applicable_at","applicable_for","name","value","generated","quality_indicator","substituted","created_date"))
for pd_date in pd.date_range('2016-03-14', '2016-03-15'):
day = pd_date.strftime('%Y-%m-%d')
root = etree.fromstring(getXML(day,day,"gasday"))
#map prefix 'd' to the default namespace URI
ns = {'d': 'http://www.NationalGrid.com/MIPI/'}
publication_objects = root.xpath('//d:CLSMIPIPublicationObjectBE', namespaces=ns)
for obj in publication_objects:
name = obj.find('d:PublicationObjectName', ns).text
data = obj.find('d:PublicationObjectData/d:CLSMIPIPublicationObjectBE', ns)
applicable_at = pd.to_datetime(data.find('d:ApplicableFor', ns).text, format ='%Y-%m-%dT%H:%M:%SZ')
applicable_for = pd.to_datetime(data.find('d:ApplicableFor', ns).text, format ='%Y-%m-%dT%H:%M:%SZ')
value = float(data.find('d:Value', ns).text)
generated = pd.to_datatime(data.find('d:GeneratedTimeStamp', ns).text, format ='%Y-%m-%dT%H:%M:%SZ')
quality_indicator = data.find('d:Value', ns).text
substituted = data.find('d:Substituted', ns).text
created_date = pd.to_datetime(data.find('d:CreatedDate', ns).text, format ='%Y-%m-%dT%H:%M:%SZ')
df.loc[len(df) +1] = [applicable_at, applicable_for,name, value, generated, quality_indicator, substituted, created_date]
df.head(10)
