Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python 3 Get and parse JSON API

How would I parse a json api response with python? I currently have this:

import urllib.request import json  url = 'https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty'  def response(url):     with urllib.request.urlopen(url) as response:         return response.read()  res = response(url) print(json.loads(res)) 

I'm getting this error: TypeError: the JSON object must be str, not 'bytes'

What is the pythonic way to deal with json apis?

like image 436
ClickThisNick Avatar asked Jan 31 '16 22:01

ClickThisNick


2 Answers

Version 1: (do a pip install requests before running the script)

import requests r = requests.get(url='https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty') print(r.json()) 

Version 2: (do a pip install wget before running the script)

import wget  fs = wget.download(url='https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty') with open(fs, 'r') as f:     content = f.read() print(content) 
like image 184
ferdy Avatar answered Sep 23 '22 12:09

ferdy


you can use standard library python3:

import urllib.request import json url = 'http://www.reddit.com/r/all/top/.json' req = urllib.request.Request(url)  ##parsing response r = urllib.request.urlopen(req).read() cont = json.loads(r.decode('utf-8')) counter = 0  ##parcing json for item in cont['data']['children']:     counter += 1     print("Title:", item['data']['title'], "\nComments:", item['data']['num_comments'])     print("----")  ##print formated #print (json.dumps(cont, indent=4, sort_keys=True)) print("Number of titles: ", counter) 

output will be like this one:

... Title: Maybe we shouldn't let grandma decide things anymore.   Comments: 2018 ----  Title: Carrie Fisher and Her Stunt Double Sunbathing on the Set of Return of The Jedi, 1982   Comments: 880 ----  Title: fidget spinner   Comments: 1537 ----  Number of titles:  25 
like image 43
mimin0 Avatar answered Sep 24 '22 12:09

mimin0