Python Forum
Reading json from webpage - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/Forum-Python-Coding)
+--- Forum: General Coding Help (https://python-forum.io/Forum-General-Coding-Help)
+--- Thread: Reading json from webpage (/Thread-Reading-json-from-webpage)



Reading json from webpage - jmair - Jan-10-2019

For starters I'm just trying to learn how to pull some json data off a siriusxm page. (( Here's a link, but the time stamped page doesn't last very long. siriusxm page

My code looks like it grabs all the data fine, but I need assistance on how to pull specific data from the json.
import urllib3
import json


http = urllib3.PoolManager()

r = http.request('GET', 'https://www.siriusxm.com/metadata/pdt/en-us/json/channels/firstwave/timestamp/01-10-18:00:00')

print(json.loads(r.data.decode('utf-8'))['channelMetadataResponse'])
for example, the json.loads(r.data.decode('utf-8'))['channelMetadataResponse'] has the data just fine, but changing the syntax to
json.loads(r.data.decode('utf-8'))['artists':'name'] gives a slicing error.

Direction would be grateful. Thank you so much!

In case the link dies or is blank. here is a sample from their page. you may need copy paste into http://jsonviewer.stack.hu to read it better.

{"channelMetadataResponse":{"messages":{"code":100,"message":"Successful request"},"status":1,"metaData":{"channelId":"firstwave","channelName":"1st Wave","channelNumber":33,"currentEvent":{"artists":{"id":"8_l","name":"Talking Heads"},"baseUrl":"http:\/\/albumart.siriusxm.com\/albumart\/","keyIndex":"null","siriusXMId":568746322,"song":{"album":{"name":"Little Creatures"},"composer":"","creativeArts":[{"encrypted":false,"size":"THUMBNAIL","type":"IMAGE","url":"1730\/NDCA-000017418-003_t.jpg"},{"encrypted":false,"size":"SMALL","type":"IMAGE","url":"1730\/NDCA-000017418-003_s.jpg"},{"encrypted":false,"size":"MEDIUM","type":"IMAGE","url":"1730\/NDCA-000017418-003_m.jpg"},{"encrypted":false,"size":"LARGE","type":"IMAGE","url":""},{"encrypted":false,"type":"BIO","url":""},{"encrypted":false,"type":"REVIEWS","url":""},{"encrypted":true,"size":"THUMBNAIL","type":"IMAGE","url":"1730\/NDCA-000017418-003_t.jpg"},{"encrypted":true,"size":"SMALL","type":"IMAGE","url":"1730\/NDCA-000017418-003_s.jpg"},{"encrypted":true,"size":"MEDIUM","type":"IMAGE","url":"1730\/NDCA-000017418-003_m.jpg"},{"encrypted":true,"size":"LARGE","type":"IMAGE","url":""},{"encrypted":true,"type":"BIO","url":""},{"encrypted":true,"type":"REVIEWS","url":""}],"id":"$O4GA","name":"Stay Up Late"},"startTime":"2019-01-10T17:46:51Z"},"dateTime":"2019-01-10T17:49:52.311Z","version":1.1}}}


RE: Reading json from webpage - stullis - Jan-10-2019

I believe the problem is your slice. To my knowledge, you cannot do ["artists":"name"]. That should be a dict retrieval key of ["artists"] to return the sub-dict or list contained in "artists".

That said, what is the error you're receiving.


RE: Reading json from webpage - jmair - Jan-10-2019

The error is
TypeError: unhashable type: 'slice'

So you're spot on =)


RE: Reading json from webpage - buran - Jan-10-2019

data = json.loads(r.data.decode('utf-8'))
artist_name = data['channelMetadataResponse']['currentEvent']['artist']['name']
by the way, look at requests - you can directly get response as json
http://docs.python-requests.org/en/master/user/quickstart/#json-response-content


RE: Reading json from webpage - jmair - Jan-10-2019

Perfect, now I see how to call it. I appreciate the hint.

artist_name = data['channelMetadataResponse']['metaData']['currentEvent']['artists']['name']