diff --git a/modules/jsonbot.py b/modules/jsonbot.py index fca0b4e..a784849 100644 --- a/modules/jsonbot.py +++ b/modules/jsonbot.py @@ -11,9 +11,39 @@ nemubotversion = 3.4 def help_full(): return "Retrieves data from json" +def getRequestedTags(tags, data): + response = "" + if isinstance(data, list): + for element in data: + repdata = getRequestedTags(tags, element) + if repdata: + if response: + response = response + "\n" + repdata + else: + response = repdata + else: + for tag in tags: + if tag in data.keys(): + if response: + response += ", " + tag + ": " + str(data[tag]) + else: + response = tag + ": " + str(data[tag]) + return response + +def getJsonKeys(data): + if isinstance(data, list): + pkeys = [] + for element in data: + keys = getJsonKeys(element) + for key in keys: + if not key in pkeys: + pkeys.append(key) + return pkeys + else: + return data.keys() @hook("cmd_hook", "json") -def get_hn_info(msg): +def get_json_info(msg): if len(msg.cmds) < 2: raise IRCException("Please specify a url and a list of JSON keys.") @@ -23,13 +53,9 @@ def get_hn_info(msg): json_data = json.loads(request_data) if len(msg.cmds) == 2: - raise IRCException("Please specify the keys to return (%s)" % ", ".join(json_data.keys())) + raise IRCException("Please specify the keys to return (%s)" % ", ".join(getJsonKeys(json_data))) tags = msg.cmds[2].split(',') - response = "" - for tag in tags: - if not tag in json_data.keys(): - raise IRCException("The key '%s' was not found in the JSON retrieved." % tag) - response += tag + ": " + str(json_data[tag]) + "\n" + response = getRequestedTags(tags, json_data) return Response(response, channel=msg.channel, nomore="No more content", count=" (%d more lines)")