リンク: [ホーム] [自己紹介] [リンク集] [アルバム] [ソフトウェア] [発表文献] [その他]

まさおのChangeLogメモ / 2007-03-06

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

2007-03-06 Tue

* URL memo

- 所蔵図書館マップ: delicious9 users
by NACSIS-CAT
- Database of Web Robots, Overview: delicious48 users
- Valgrind Home: delicious1586 users
- @IT:Windows TIPS -- Tips:ディスク・クリーンアップをバッチ実行する: delicious users
- News | 国立情報学研究所: delicious users
「Web 2.0に向けた新たな情報検索技術の研究を開始― 「Yahoo!知恵袋」の研究利用による情報アクセスの新展開 ―」報道発表・プレスリリース資料

* IMAP+spam delete

cf.[2006-05-23]

またQuota制限に近付いているようなので、スパムだけ消してみる。

#!/usr/bin/env ruby
# $Id$

require 'net/imap'
require 'ftools'
require "tempfile"
require "kconv"
require "time"

require "bsfilter"

HOST = "mp.nii.ac.jp"
UID = "masao"
PASSWORD = "XXXXXXXX"

bsfilter = Bsfilter.new
bsfilter.setup( ARGV + [ "-q" ])

delete_list = []

imap = Net::IMAP.new(HOST)
imap.login(UID, PASSWORD)
imap.select("INBOX")
# 90日(約3ヶ月)以上前のものに限定
before90days = ( Time.now - 60*60*24*90 ).strftime( "%d-%b-%Y" )
p before90days
uid_list = imap.uid_search( [ "BEFORE", before90days ] )
puts "loading #{ uid_list.size } mails..."

uid_list.each do |uid|
   m = imap.uid_fetch( uid, ["RFC822","ENVELOPE","INTERNALDATE"])[0]
   tmpf = Tempfile.open( File.basename( $0 ) )
   tmpf.puts m.attr["RFC822"].gsub(/\r$/, "")
   if bsfilter.run( tmpf.path )
      puts Time.parse( m.attr["INTERNALDATE"] )
      puts "Subject: " << NKF.nkf("-me", m.attr["ENVELOPE"].subject.to_s ).gsub(/\s+/, " ")
      delete_list << uid
   end
end

puts "deleting #{ delete_list.size } mails ..."
imap.uid_store( delete_list, "+FLAGS", [:Deleted] )
imap.expunge
imap.disconnect

→ だいたい8000通消えました。

90日以前に限定しているのは念のためというだけで、あまり意味はありま
せんが。

bsfilter のインタフェースがよく分からなくて Tempfile かましていた
り、fetch が遅かったため、毎回ネットワークアクセスしたりで、相当遅
くなってますが…。
Referrer (Inside): [2008-07-08-1]