Source code for acscsv.tumblr_acs
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__="Scott Hendrickson"
__license__="Simplified BSD"
import sys
import acscsv
[docs]class TblracsCSV(acscsv.AcsCSV):
"""Tumblr activities"""
def __init__(self, delim, options_keypath, options_user, options_rules, options_lang, options_struct):
super(TblracsCSV, 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
[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
"""
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(d["id"])
record.append(acscsv.gnipRemove)
record.append(verb)
return record
elif verb == "update":
# process as usual
pass
#
record.append(d["id"])
record.append(d["postedTime"])
#
gnip = d["gnip"]
actor = d["actor"]
obj = d["object"]
if "summary" in obj and obj["summary"] is not None:
#record.append(self.cleanField(obj["summary"]))
record.append(obj["summary"])
elif "content" in obj and obj["content"] is not None:
#record.append(self.cleanField(obj["content"]))
record.append(obj["content"])
else:
record.append("None")
record.append(obj["objectType"])
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:
# site
record.append(obj["link"])
if "tumblrRebloggedFrom" in d:
# thread - 1
reblogged_from = d["tumblrRebloggedFrom"]
record.append(reblogged_from["link"])
# thread root
reblogged_root = d["tumblrRebloggedRoot"]
record.append(reblogged_from["link"])
elif "inReplyTo" in d:
# there is no reblogged from
record.append("None")
# consider case where "link = null"
link = d["inReplyTo"]["author"]["link"]
if link is None:
record.append("None")
else:
record.append(d["inReplyTo"]["author"]["link"])
else:
record.append("None")
record.append("None")
if self.options_user:
try:
tmp1 = actor["id"].split("/")[1]
tmp2 = d["target"]["displayName"]
except IndexError:
tmp1 = "actor:id"
tmp2 = "target:displayName"
record.append(tmp1)
record.append(tmp2)
#
return record
except KeyError:
sys.stderr.write("Field missing from record (%d), skipping\n"%self.cnt)
record.append(acscsv.gnipError)
return record