Source code for acscsv.disqus_acs

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__="Scott Hendrickson"
__license__="Simplified BSD"
import sys
import acscsv
[docs]class DiacsCSV(acscsv.AcsCSV): """ DiacsCSV determins the parse order and included fields when parsing Disqus Activity Streams JSON records to CSV fields. """ def __init__(self, delim, options_keypath, options_user, options_rules, options_lang, options_struct, options_status): super(DiacsCSV, self).__init__(delim,options_keypath) self.options_user = options_user self.options_rules = options_rules self.options_lang = options_lang self.options_struct = options_struct self.options_status = options_status
[docs] def procRecordToList(self, d): """Take a JSON Activity Streams payload as a Python dictionary. Check activity for system information and compliance handling. If necessary, return the system info or compliance message. Otherwise, if the activity is valid, return list of fields as specified by the input flags. Flags:: delim options_keypath options_user options_rules options_lang options_struct options_status """ record = [] try: if "verb" in d: verb = d["verb"] else: msg = "Unidentified meta message" for mtype in ["error", "warning", "info"]: if mtype in d: if "message" in d[mtype]: msg = d[mtype]["message"] elif "message" in d: msg = d["message"] continue mtype = "Unidentified" record.append(acscsv.gnipRemove) record.append(mtype) record.append(msg) return record if verb == "delete": record.append(acscsv.gnipRemove) record.append(verb) #record.append(self.cleanField(d["object"]["id"])) record.append(d["object"]["id"]) return record # record.append(d["id"]) record.append(d["postedTime"]) #record.append(self.cleanField(d["body"])) record.append(d["body"]) # gnip = d["gnip"] actor = d["actor"] if self.options_lang: glang = "None" if "language" in gnip: glang = gnip["language"]["value"] record.append(glang) if self.options_rules: rules = '[]' if "matching_rules" in gnip: rules = self.buildListString([ "%s [%s]"%(l["value"], l["tag"]) for l in gnip["matching_rules"]]) record.append(rules) if self.options_struct: target = d["target"] # site tmp = self.splitId(target["website"]["id"]) record.append(tmp) # thread tmp2 = self.splitId(target["id"]) record.append(tmp2) # thread link if "link" in target and target["link"] is not None: record.append(target["link"]) else: record.append("None") # in reply to if "inReplyTo" in d: in_reply_to = d["inReplyTo"] # comment tmp2 = self.splitId(in_reply_to["id"]) record.append(tmp2) # reply to user tmp3 = self.splitId(in_reply_to["author"]["id"]) if tmp3 == "-1": tmp3 = "Anon" record.append(tmp3) else: record.append("None") record.append("None") if self.options_user: tmp = self.splitId(actor["id"]) if tmp == "-1": tmp = "Anon" record.append(tmp) if self.options_status: record.append(verb) if "disqusType" in d: record.append(str(d["disqusType"])) else: record.append("None") if "disqusTypePrev" in d: record.append(str(d["disqusTypePrev"])) else: record.append("None") # return record except KeyError: sys.stderr.write("Field missing from record (%d), skipping\n"%self.cnt) record.append(acscsv.gnipError) return record