Twitter 內容過濾器

Twitter 上很多有趣的訊息,但相對的也有很沒營養、沒有閱讀價值或煩人的內容,像是 foursquare 的消息,或者有人拿 adf.ly 來縮網址,這時用一個有詞彙過濾器功能的 client 就會很方便,如果是 opensource 的 client 那就更開心了。

Twittering-mode 就是個非常好的東西,opensource、以上的事情當然也都做得到,目前我還不知道還有哪個 Twitter client 自由度可以像 Twittering-mode 這樣大到讓所有高興的人亂搞的(而且必須要很容易拿來亂搞)。類似應用還有像是可以輕易地拿來產生這種頁面

之前 Emacswiki 上有人有寫 filter 功能(不過這功能一直沒被 merge,不知道為什麼),但如果要過濾 URL 就會有問題,因為 Twitter API 抓下來所有網址都會被 t.co 再縮一次,不過回報一下就有大神改好了(詳細內容),自由軟體真是美妙。

(此程式碼為 Emacs 搭配 Twittering-mode 使用)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
;;;; Filtering.
(defvar twittering-filter-users '()
"*List of strings containing usernames (without '@' prefix) whose tweets should not be displayed in timeline.")
(defvar twittering-filter-tweets '()
"*List of strings containing phrases which will prevent a tweet containing one of those phrases from being displayed in timeline.")

(defun twittering-filters-apply ()
(setq non-matching-statuses '())
(dolist (status twittering-new-tweets-statuses)
(setq matched-tweets 0)
(dolist (pat twittering-filter-users)
(if (string-match pat (cdr (assoc 'user-screen-name status)))
(setq matched-tweets (+ 1 matched-tweets))))
(dolist (pat twittering-filter-tweets)
(if (string-match pat (twittering-make-fontified-tweet-text-with-entity status))
(setq matched-tweets (+ 1 matched-tweets))))
(if (= 0 matched-tweets)
(setq non-matching-statuses (append non-matching-statuses `(,status)))))
(setq new-statuses non-matching-statuses))

(add-hook 'twittering-new-tweets-hook 'twittering-filters-apply)

(setq twittering-filter-tweets '("http://4sq.com/.*" "http://adf.ly/.*" "I liked a @YouTube video" "我喜歡一部.* @YouTube 影片"))

注意可以使用 Emacs Regexp。

我跟一些推友在貼含有政治內容的 tweet 時會習慣在內容加上一個 [政治慎入][政治滲入],其實這標籤不是要給人看,而是讓不喜歡政治內容的推友可以用類似方法過濾。其餘還有[R-15] [R-18]之類的。

看到很多人在嫌 Twitter 的 web 界面越做越奇怪,反正我全用 3rd client 用得很開心。=w=