tumblrのdashboard見てたら何時間も経ってた、なんてこともよくあります。。
動機
tumblrが面白いのはいいんだけど、followする人を見つけるのが大変。大変というか見つけ方がよくわからん。ということで、twitterでfollowしてる人がtumblrやってたらfollowしてみようかなーって。
方法
- twitter apiでfriends(followee)のscreen_name一覧を取得する
- screen_nameをtumblrのurlにする
- urlが存在するか確認する
こんな感じ。
$ twitter-friends valvallow | awk '{print $1".tumblr.com"}' | available-url
- twitter-friends(gaucheスクリプト)で指定したuserがfollowしているuserのscreen_name一覧を取得する
- awkでtumblrのurlにして
- available-url(gaucheスクリプト)でurlが存在するか確認する
コード
Gaucheです。
This file contains 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
#!/usr/local/bin/gosh | |
(use rfc.json) | |
(use rfc.http) | |
(use util.list) | |
;; http://api.twitter.com/1/statuses/friends.json?cursor=-1&id=valvallow | |
(define (usage) | |
(print "Usage: twitter-friends <twitter-id>") | |
(exit 1)) | |
(define (query-compose query) | |
(string-join (map (cut string-join <> "=") query) "&")) | |
(define (twitter-api-get server url params) | |
(receive (status header body) | |
(http-get server | |
(string-append url "." "json" | |
"?" (query-compose params))) | |
(rlet1 r (parse-json-string body) | |
(when (and (not (vector? r)) | |
(string=? "error" (caar r))) | |
(raise "user not found.")) | |
))) | |
(define (twitter-api-friends id :optional (cursor "-1")) | |
(twitter-api-get "api.twitter.com" | |
"/1/statuses/friends" | |
`(("cursor" ,cursor) | |
("id" ,id)))) | |
(define (main args) | |
(if (null? (cdr args)) | |
(usage) | |
(let1 user (cadr args) | |
(let rec ((cursor -1)(count 0)(acc '())) | |
(if (zero? cursor) | |
(for-each print (apply append (reverse acc))) | |
(let* ((friends (twitter-api-friends user (x->string cursor))) | |
(users (vector->list (assoc-ref friends "users"))) | |
(next_cursor (assoc-ref friends "next_cursor")) | |
(friends-name (map (^l (assoc-ref l "screen_name")) | |
users))) | |
(with-output-to-port (current-error-port) | |
(^ _ (display " ") | |
(display count) | |
(display " users ...\r"))) | |
(rec next_cursor | |
(+ count (length friends-name)) | |
(cons friends-name acc)))))))) |
This file contains 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
#!/usr/local/bin/gosh | |
(use rfc.http) | |
(use srfi-1) | |
(define (main args) | |
(let ((urls (remove (pa$ equal? "") | |
(string-split (port->string (current-input-port)) "\n")))) | |
(for-each print | |
(filter-map (^u (guard (ex (else (print u))) | |
(receive (status header body) | |
(http-get u "/") | |
(rlet1 ret (and (equal? status "200") u) | |
(with-output-to-port (current-error-port) | |
(^ _ (display (boolean ret)) | |
(display ":") | |
(print u))))))) | |
urls)))) |
自分なんりに一番てっとり早い方法でやったつもり。
探せばそういうサービスがあったりして・・・
んで、実際に存在したurlは手動で開いて手動でfollowするという情弱ぶり。
参考
追記
結果に余計なものが含まれてたので、さらに$ cat url.txt | awk '!/#/' | awk '!/_/'する必要があった。(結果がurl.txtに入ってるとして)
追記
それでも600くらいあって、とても手動じゃ開ききれない・・・。さてテキストに羅列してあるurlを一気にブラウザで開くには・・・
これでいいか
追記
同じことやってる人がいた追記
!/[#_]/
0 件のコメント:
コメントを投稿