平衡点


2011/11/06

_ feed2imap で UTF-8 以外の Feed を読む場合

Feed2imap は RSS/Atom feed をパースして imap サーバに送信する, Ruby で書かれたソフトウェアです. 作者は Lucas 先生. RSS/Atom feed を読むために慣れた MUA が使えるのがとても便利で良いところだと思います.

feed のパースと整形には Ruby-Feedparser) が使われています. これは内部で REXML を呼んでいるのですが, 文字列が全て UTF-8 決め打ちになっていたりして, euc-jp とか shift_jis な feed を食べさせると, 綺麗に文字化け(?)してくれます.

というわけで, ad hoc ですが feed を fetch して feedparser(REXML) に渡す前に NKF で文字コードを変換してみたり.

% diff -u httpfetcher.rb.bak httpfetcher.rb
--- httpfetcher.rb.bak  2011-11-06 05:49:55.000000000 +0900
+++ httpfetcher.rb      2011-11-06 05:26:05.000000000 +0900
@@ -24,6 +24,7 @@
 rescue LoadError
 end
 require 'uri'
+require 'nkf'


 # max number of redirections
@@ -81,7 +82,7 @@
     end
     case response
     when Net::HTTPSuccess
-      return response.body
+      return NKF.nkf('-w', response.body)
     when Net::HTTPRedirection
       # if not modified
       if Net::HTTPNotModified === response

いちおうコレで動きますが, 相変わらず ad hoc.

ちなみに feed2imap は Ruby1.8 決め打ちなので NKF にしましたけれど, Ruby1.9 系列からは Encoding 使うのが良いんでしょうね.

_ Banshee で取得したアルバムアートを jpg にして出力

メモがてら. 要 ruby-mpi3info, unf_ext

#!/usr/bin/ruby1.9.1
# -*- mode: ruby; coding: utf-8-unix; indent-tabs-mode: nil -*-
# Copyright(C) 2011 Youhei SASAKI All rights reserved.
# License: GPL-2+
#
#  Code:

require 'rubygems'
require 'mp3info'
require 'digest/md5'
require 'RMagick'
require 'unf_ext'

musicdir = Dir.glob(ENV['HOME']+"/Music/*/*/")
list = Hash.new
norm =  UNF::Normalizer.new
musicdir.each do |src|
  Dir.chdir(src)
  mp3file = Dir.glob("*.mp3")[0]
  unless mp3file.nil?
    Mp3Info.open(mp3file) do |info|
      artist = info.tag.artist
      album = info.tag.album
      name = artist + "\t" + album
      digest = Digest::MD5.hexdigest(norm.normalize(name, :nfkd))
      list[src] = "album-" + digest + ".jpg"
    end
  end
end

cachefiles = Dir.glob(ENV['HOME']+'/.cache/media-art/**.jpg')
cache = cachefiles.collect{|x| File.basename(x)}
found_count = 0
list.each_pair {|key, value|
  if cache.index(value)
    puts "cp " + cachefiles[cache.index(value)] + " to " + key+"/cover.jpg"
    img = Magick::ImageList.new(cachefiles[cache.index(value)])
    img.resize_to_fit!(340,300).write(key+"/cover.jpg")
    found_count += 1
  end
}
puts "hash mismatch is " + (cachefiles.size - found_count).to_s

画像が「アーティスト名+タブ+アルバム名」の nkfd ノーマライズ, なので MP3 のタグから情報を取得して, 画像を探すことに.


連絡先など
最近の日記
  • 2024/10/09
    • 1. Mastodon でのメール通知, というか Exim4 と Apparmor
  • 2024/06/19
    • 1. WSL2 での gpg-agent, ssh-agent
  • 2024/06/18
    • 1. WSL で Windows 側のフォントを利用する
  • 2024/06/17
    • 1. WSLとWindowsの時刻同期
  • 2024/06/12
    • 1. wsl2 で systemd
    • 2. wslg の設定
一覧
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|02|03|04|08|09|10|11|12|
2013|01|02|03|04|05|06|08|09|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|09|10|
2016|02|03|
2017|01|02|03|05|06|07|09|11|12|
2018|03|06|07|10|11|12|
2019|01|02|03|04|05|07|10|12|
2020|01|02|03|04|05|08|09|10|11|12|
2021|01|02|03|05|06|07|08|09|11|12|
2022|01|02|03|04|05|06|08|10|11|12|
2023|02|03|04|06|08|09|11|12|
2024|01|02|03|04|05|06|10|
Back to Top ▲