Created
February 19, 2014 08:31
-
-
Save ktakashi/9088096 to your computer and use it in GitHub Desktop.
Simple Twitter client for Sagittarius using json-tools
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; 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