tvl-depot/third_party/lisp/trivial-backtrace/dev/mucking.lisp

75 lines
1.8 KiB
Common Lisp

(in-package #:metabang.gsn)
#|
Need to account for different kinds of links
in gsn-nodes-from-json, need to return pairs of node and attributes
hash-table for nodes to prevent duplicates
queue or stack for nodes to expand
hash-table for links (triples of A link B?) to handle duplicates
|#
(defgeneric expand-node (context node)
)
(defgeneric find-neighbors (context node)
)
(defgeneric expand-node-p (context node)
)
(defgeneric add-node (context node)
)
(defgeneric add-link (context node neighbor direction)
)
(defgeneric update-node-data (context node data)
)
(defclass abstract-context ()
())
(defclass gsn-context (abstract-context)
())
(defparameter +gsn-root+ "http://socialgraph.apis.google.com/")
(defmethod expand-node ((context abstract-context) node)
(bind (((to from) (find-neighbors context node)))
(dolist (neighbor to)
(add-node context neighbor)
(add-link context node neighbor :to))
(dolist (neighbor from)
(add-node context neighbor)
(add-link context node neighbor :from))))
(defmethod find-neighbors ((context gsn-context) node)
(bind (((result headers stream)
(http-get
(format nil "~alookup?edo=1&edi=1&pretty=1&q=~a"
+gsn-root+ node)))
json)
(unwind-protect
(setf json (json:decode-json stream))
(close strea))
(update-node-data context node json)
(list (gsn-nodes-from-json json :to)
(gsn-nodes-from-json json :from))))
(gsn-nodes-from-json x :from)
(defun gsn-test (who)
(destructuring-bind (result headers stream)
(http-get
(format nil "http://socialgraph.apis.google.com/lookup?edo=1&edi=1&pretty=1&q=~a" who))
(declare (ignore result headers))
(json:decode-json stream)))
(assoc :nodes_referenced
(assoc :nodes (gsn-test "TWITTER.COM/GWKING") :key #'first))
(setf x (gsn-test "TWITTER.COM/GWKING"))