所以我试图从Kik smiley网站编写这个JSON,我试图这样做,所以我不必手动编写它,无论如何我需要解析JSON所以只有一些现有的JSON出现在文件中(基本上是清理它)我需要从网站上... ...(名称,ID,类型)我该怎么做?
我已经在python中编写了这个,但它似乎失败了,我不是100%肯定为什么。我是Python的新手,很抱歉,如果这是一个显而易见的问题!我之前确实找到了一些东西,但它让我更加困惑:)谢谢!
import requests, json, sys
from colorama import init
from termcolor import colored
#colorama
init()
class SmileyGrabber():
def __init__(self):
# requests vars
self.smileysFound = 0
self.smileysLost = 0
self.url="https://sticker-service.appspot.com/v2/collection/smiley"
self.session = requests.Session()
self.grabSmiley()
def grabSmiley(self):
while True:
try:
r = self.session.get(self.url)
j = r.json()
try:
if j["IsSuccess"] == True:
meta = j["smileys"]
sID = meta["id"]
sType = meta["type"]
sName = meta["name"]
FormatSmileyData(sID, sType, sName)
print "Smiley Found:", colored("({0})".format(sName), "cyan")
self.smileysFound += 1
else:
print(colored("Could not grab smiley"), "red")
self.smileysLost += 1
except:
sys.exit()
except KeyboardInterrupt:
sys.exit()
except:
print r.text
sys.exit()
class FormatSmileyData(object):
def __init__(self, sID, sType, sName):
smileyData = {}
data = []
data.append({"SMILEY_ID":sID, "SMILEY_TYPE":sType, "SMILEY_NAME":sName})
dataFile = open("smileys.json", "a+")
dataFile.write(json.dumps(smileyData)+"\n")
dataFile.close()
if __name__ == "__main__":
SmileyGrabber()
答案 0 :(得分:0)
您的代码存在许多问题。
一次从网络上读取会更有效率 而不是为每个笑脸调用session.get。
j没有"IsSuccess"
元素,因此永远不会成为现实
j["smileys"]
是一个列表,因此要获取字典(代表每个笑脸),您需要遍历该列表。
您正在将数据附加到data
,但您正在编写
smileyData
,从未输入任何数据。
每次调用FormatSmileyData
构造函数时,都是
重置数据。
看看像Postman这样的工具来美化JSON,这样你就可以看到结构了。这有助于弄清楚如何解析它。
以下是您的脚本的更新版本,似乎有效: 我删除了着色并使其适用于Python 3。
import requests, json, sys
class SmileyGrabber():
def __init__(self):
# requests vars
self.smileysFound = 0
self.smileysLost = 0
self.url="https://sticker-service.appspot.com/v2/collection/smiley"
self.session = requests.Session()
self.data = []
self.grabSmiley()
self.writeSmileyData()
def grabSmiley(self):
r = self.session.get(self.url)
j = r.json()
print ("got json")
print (str(len(j)))
for element in j:
for meta in element["smileys"]:
print ("---------------")
print (str(meta))
sID = meta["id"]
sType = meta["type"]
sName = meta["name"]
self.addSmileyData(sID, sType, sName)
print ("Smiley Found:" + "({0})".format(sName))
self.smileysFound += 1
print ("found " + str(self.smileysFound))
else:
print("Could not grab smiley")
self.smileysLost += 1
def addSmileyData(self, sID, sType, sName):
self.data.append({"SMILEY_ID":sID, "SMILEY_TYPE":sType, "SMILEY_NAME":sName})
def writeSmileyData(self):
dataFile = open("smileys.json", "a+")
dataFile.write(json.dumps(self.data)+"\n")
dataFile.close()
if __name__ == "__main__":
SmileyGrabber()