Skip to content

Instantly share code, notes, and snippets.

@ktakashi
Created February 19, 2014 08:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ktakashi/9088096 to your computer and use it in GitHub Desktop.
Save ktakashi/9088096 to your computer and use it in GitHub Desktop.
Simple Twitter client for Sagittarius using json-tools
;; inspired by http://g000001.cddddr.org/3601131164
(import (rnrs)
(net twitter)
(text json select)
(text json tools)
(srfi :42))
#|
((consumer-key "......")
(consumer-secret ".....")
(access-key "...")
(access-secret "..."))
|#
(define *token*
(apply make-twitter-credential
(map cdr (call-with-input-file "token.scm" read))))
(define (create-selecor select)
(let ((selector (json:select select)))
(lambda (tw)
(let ((r (json:nodeset->list (selector tw))))
;; assume the first node is the one I want...
;; maybe :root > .id should be used but I'm lazy...
(cdr (car r))))))
(define get-name (create-selecor ".user > .name"))
(define get-id (create-selecor ".id"))
(define get-screen-name (create-selecor ".user > .screen_name"))
(define get-in-reply-to-status-id (create-selecor ".in_reply_to_status_id"))
(define get-created-at (create-selecor ".created_at"))
(define get-text (create-selecor ".text"))
(define (print-tweet tw)
(let ((name (get-name tw))
(id (get-id tw))
(screen-name (get-screen-name tw))
(in-reply-to (get-in-reply-to-status-id tw))
(text (get-text tw))
(created-at (get-created-at tw)))
(display "■")
(display name)
(display " (tw @")
(display screen-name)
(display " :re ")
(display id)
(display ")")
(cond ((not (eq? 'null in-reply-to))
(display "| Re: ")
(display in-reply-to)))
(newline)
(display text)
(newline)
(display ".....................................")
(display created-at)
(newline)
(newline)
(values)))
(define (home-timeline :key (count 10))
(do-ec (: tw (twitter-home-timeline *token* :count count))
(print-tweet tw))
(values))
(define (update msg :key (count 10) (re #f))
(let ((tw (apply twitter-update *token* msg :count count
(if re `(:in-reply-to-status-id ,re) '()))))
(and tw (print-tweet tw))))
(define (mentions :key (count 10))
(do-ec (: tw (twitter-mentions-timeline *token* :count count))
(print-tweet tw)))
(define tw update)
(define showtl home-timeline)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment