
昔メモっといたんだけど、探すの大変だから書いとく。
Gaucheスクリプト。ネタ元はこちら。
Gauche-net-twitterがTwitterのapi v1.1に対応してないっぽくて間に合わんなーと思ったら
対応してるのがあった。
で、スクリプトの使い方は、consumer-keyなんかを書いたファイルを用意してコマンドを実行。それぞれのtweetは別スレッドで投稿されます。
% ./tweet-bals-batch-balk.scm ばるす > bals.log
結果はこんな感じでわかる。
% cat bals.log | grep done | awk '{print $1}'| sort | uniq -c
合計はこれで。
% cat bals.log | grep done | awk '{print $1}'| sort | uniq -c | awk '{ total+= $1}END{print total}'
コマンド名が長いのでシンボリックリンクを作成した。
% ln -s `realpath ./tweet-bals-batch-balk.scm` ~/bin/bals % bals ばるす > bals.log
詳しくはでたらめ英語なhelpをご覧ください。
% bals -h Usage: bals [option ...] message h|help : Show this help n|number : Number of continuous tweets (default:endress) k|key-file : The path of the file for which have listed the Consumer-key and Access-token ex) twitter-id1 consumer-key1 consumer-secret1 access-token1 access-token-secret1 twitter-id2 consumer-key2 consumer-secret2 access-token2 access-token-secret2 ... twitter-idn consumer-keyn consumer-secretn access-tokenn access-token-secretn (default: ~/.tbbbrc) i|interval :Interval (default: 0.1) s|suffix :Message suffix (default: !) d|debug :Debug mode. Print message to console, Twitter not update
ソースはこちら。
#!/usr/bin/env gosh | |
(use file.util) | |
(use net.twitter) | |
(use gauche.threads) | |
(use gauche.parseopt) | |
(define (usage cmd) | |
(print "Usage: " (sys-basename cmd) " [option ...] message") | |
(print " h|help : Show this help") | |
(print " n|number : Number of continuous tweets (default:endress)") | |
(print " k|key-file : The path of the file for which have listed the Consumer-key and Access-token") | |
(print " ex) twitter-id1 consumer-key1 consumer-secret1 access-token1 access-token-secret1") | |
(print " twitter-id2 consumer-key2 consumer-secret2 access-token2 access-token-secret2") | |
(print " ...") | |
(print " twitter-idn consumer-keyn consumer-secretn access-tokenn access-token-secretn") | |
(print " (default: " +RC_FILE_PATH+ ")") | |
(print " i|interval :Interval (default: 0.1)") | |
(print " s|suffix :Message suffix (default: !)") | |
(print " d|debug :Debug mode. Print message to console, Twitter not update") | |
(exit)) | |
(define +RC_FILE_PATH+ "~/.tbbbrc") | |
(define *threads* '()) | |
;; C-c to exit | |
(set-signal-handler! SIGINT (^ _ (exit))) | |
;; file spec: refer to the help option k|key-file | |
;; return (("twitter-id" . <twitter-cred>) ...) | |
(define (file->credentials file) | |
(if (not (file-exists? (expand-path file))) | |
'() | |
(map (^(line) | |
(let1 id&cred (string-split line #\space) | |
(cons (car id&cred) | |
(apply make <twitter-cred> | |
(append-map list | |
(list :consumer-key | |
:consumer-secret | |
:access-token | |
:access-token-secret) | |
(cdr id&cred)))))) | |
(file->string-list (expand-path file))))) | |
;; suffix=! | |
;; n=1, msg=hoge => "hoge!" | |
;; n=2, msg=hoge => "hoge!!" | |
;; n=3, msg=hoge => "hoge!!!" ... | |
(define (make-nth-tweet n msg suffix) | |
(apply string-append msg (make-list n suffix))) | |
(define (main args) | |
(let-args (cdr args) | |
((help "h|help" => (cut usage (car args))) | |
(number "n|number=i" +inf.0) | |
(keys "k|keys=s" +RC_FILE_PATH+) | |
(interval "i|interval=f" 0.1) | |
(suffix "s|suffix=s" "!") | |
(debug "d|debug") | |
(else (opt . _) | |
(print "Unknown option : " opt) | |
(usage (car args))) | |
. rest) | |
(when debug | |
(set! twitter-update | |
(^(cred msg) | |
(print cred " " msg)))) | |
(let1 credentials (file->credentials keys) | |
(when (or (null? rest) ; massage | |
(null? credentials)) | |
(usage (car args))) | |
(let/cc break | |
(dotimes (i number) | |
(let1 msg (make-nth-tweet i (car rest) suffix) | |
(when (< 140 (string-length msg)) | |
(break)) | |
(for-each (^c (thread-sleep! interval) | |
(let1 thread (make-thread | |
(^ _ (twitter-update (cdr c) msg) | |
(print (car c) " " i " done!"))) | |
(push! *threads* thread) | |
(thread-start! thread))) | |
credentials)))) | |
(print "Press any key to continue ...") | |
(read-line)))) |