いろいろ
Seize the day.
2005-08-17 [長年日記]
■ [misc] 地震
宮城方面にはけっこう知合いがいるのでとっさに心配したけど,どこも大きな被害はなかったようで一安心.ただ,食器や棚の物が落ちて割れてとても怖かったという話があるいっぽうで,ほとんど被害もなかったという所もある.お盆休みだったせいで,そもそも現地にいなかったという人も何人かいた.東京でもかなり揺れた.戸棚の中の物ががたがたぶつかり合ってるのが聞こえたし,地下鉄もまた止まった.
2 分くらい揺れてたかな.衝撃は少ないけどゆっくりと大きく長く揺れる気持の悪い揺れで,震源が遠いのがよくわかった.阪神大震災の時に東京で感じた揺れに似ていた (誰も信じてくれないんだけど,確かに東京でも震度 1 程度は揺れたのだ).
■ [comp] Perl プログラマのレベル 10
自分はレベル 4 くらいだと思います….正規表現? わからないに決まってるじゃないか!(ぉ [2005-08-18] 実は Perl の勉強というものをまともにしたことがない.perldoc もラクダ本もほとんど眺めたことない.だからすごく基本的な知識が時々すっぽり抜けてたりする.何かいい勉強法ありませんかね.
■ [comp] BibTeX から iTunes へ
以前,PDF の管理を iTunes でできるという記事を /.-j で読んだ.フォルダ指向でなく属性指向のインタフェースで使い勝手がいいという.なんとなく気になってた. 試しに手元の数個の PDF を放り込んでみたが,確かに検索やソートが使いやすい.うん,悪くない.で,本格的に使おうとしたときに障害になるのが,ファイルのプロパティをどう入力するか,である.手持ちの PDF は論文が多いのだけど,曲名=論文タイトル,アーティスト=著者,アルバム名=書誌名…みたいなのを数百件も手で入力するなんてヤダ.
/.-j でも同意見がちらほら.
- http://slashdot.jp/comments.pl?sid=243522&cid=704358
- http://slashdot.jp/comments.pl?sid=243522&cid=704139
ていうことで,Perl でなんとかなりそうなので,BibTeX ファイルを読み込んで iTunes 用インポートファイルを吐き出すようなものを,やっつけ仕事で作ってみた.Perl レベル 4 なのでそのつもりで(ぉ.なお,インポートファイルはタブ区切りテキストです.iTunes の扱う XML は仕様がまるで謎だったので.
なお,以下では
- Perl スクリプトは Unix で動かす
- iTunes は Windows で動かす
- PDF ファイルは単一のディレクトリに置いてある.このディレクトリは Samba かなんかで共有されてて,Unix からは $pdfdir,Windows からは $pdfdirwin として見える.
- PDF ファイルの名前は,BibteX エントリ名 に拡張子 .pdf をつけたものである.
では,とりあえず Text::BibTeX というものを入れて手を抜く. あとは Perl レベル 3 くらいの人であればすぐに書ける.
まず iTune インポートファイル用のヘッダを出力.これをはじめ,iTunes に喰わせるテキストは SJIS,CL+LF でないといけない.
$header = "名前\tアーティスト\t作曲者\tアルバム\t分類\tジャンル\tサイズ\t時間\tディスク番号\tディスク数\tトラック番号\tトラック数\t年\t変更日\t追加日\tビットレート\tサンプルレート\t音量調整\t種類\tイコライザ\tコメント\t再生回数\t最後に再生した日\tマイレート\t場所\x0D\x0A"; jcode::convert(\$header, 'sjis'); print $header;次に bib ファイルの読み込み.ここで気をつけないといけないのは,bib ファイルは EUC で書かれてないといけない.必要なら前段で文字コード変換する.Perl でのスマートな方法が思い付かないので略(ぉ.
$bibfile = new Text::BibTeX::File "hoge.bib";
$bibfile->set_structure ('Bib');
while ($entry = new Text::BibTeX::Entry $bibfile)
{
&action;
}
で,sub action の中ではまず,
warn "error in input" unless $entry->parse_ok;
my $type = $entry->type;
my $key = $entry->key; # only for BTE_REGULAR metatype
my $num_fields = $entry->num_fields;
my @fieldlist = $entry->fieldlist;
my $title = $entry->get ('title');
my $year = $entry->get('year');
my $vol = $entry->get('volume') unless ( $entry->get('volume') =~ /\D/ );
my $num = $entry->get('number') unless ( $entry->get('number') =~ /\D/ );
my $pages = $entry->get('pages');
if ( $entry->exists ('journal') ){
my $journal = $entry->get('journal');
}
if ( $entry->exists ('booktitle') ){
my $journal = $entry->get('booktitle');
}
my $comment = $entry->get('comment');
if ( $entry->exists ('author') ){
my @authors = $entry->split ('author');
($first_author) = $entry->names ('author');
} else {
my @authors = $entry->split ('editor');
}
my ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev,
$size, $atime, $mtime, $ctime, $blksize, $blocks) = stat( "$pdfdir$key.pdf" );
雑誌によっては,数字以外の文字が含まれる巻号だったりしますが (J82-D-II とかww),そういうのは省いてます.iTunes のアルバム番号エントリは数字以外許さないので.次に,ファイル情報から出力をでっちあげます.
if ( $size ne "" ){
my $pdfpath = "$pdfdirwin$key\.pdf";
my @mdate = localtime( $mtime );
my $mt = sprintf("%d/%02d/%02d %d:%d",
$mdate[5]+1900, $mdate[4]+1, $mdate[3], $mdate[2], $mdate[1]);
my @cdate = localtime( $ctime );
my $ct = sprintf("%d/%02d/%02d %d:%d",
$cdate[5]+1900, $cdate[4]+1, $cdate[3], $cdate[2], $cdate[1]);
my @adate = localtime( $atime );
my $at = sprintf("%d/%02d/%02d %d:%d",\
$adate[5]+1900, $adate[4]+1, $adate[3], $adate[2], $adate[1]);
my $output = "$title\t@authors\t\t$journal\t$pages\t$type\t$size\t\t$vol\t\t$num\t\t$year\t$mt\t$ct\t\t\t\tPDF 書類\t\t$comment\t\t\t\t$pdfpath\x0D\x0A";
jcode::convert(\$output, 'sjis', 'euc');
print $output;
}
ctime,mtime,atime はなくても動く.ていうか所詮合ってないので,単なる気休め.で,最後にこんなことを書くと怒られそうなのですが,なぜか手元の環境では年号が正しく iTunes で読めません.出力したテキストファイルは合ってるはずなんだけど.謎.
あと,これをやると iTunes の「ジャンル」の項目が汚くなるのも問題.Rocks とか Classics の中に inproceedings とか入ってきちゃうので.なので,スクリプトを書いただけで満足して,結局活用してません(激ぉ
[ ツッコミ | permalink | trackback ]
[TrackBack URL: http://nao.s164.xrea.com/td/tb.rb/20050817]
[(注) スパム対策のため,言及リンクのないトラックバックは受け付けていません.]
[(注) スパム対策のため,言及リンクのないトラックバックは受け付けていません.]
本日のリンク元
検索
- キーワード不明 ×101 / perl 勉強法 ×6 / perl bibtex ×4 / itune unix ×3 / perl レベル ×3 / bibtex itune ×2 / iTunes インポートファイル ×2 / perl itunes 自動 ×2 / Text::BibTeX itunes ×2 / プログラマのレベル10 ×2 / itunes perl unix ×2 / perl entry get ×2 / itunes xml perl ×2 / perl プログラマ レベル ×2 / bibtex itunes ×1 / itunes pdf bibtex ×1 / 激 男 p01 ×1 / perl ctime mtime ×1 / bitex itunes ×1 / itunes bibtex ×1 / perl レベル10 ×1 / bibtex entry ×1 / perl ctime 変更 ×1 / bibtex エントリー名 ×1 / Rubyプログラマのレベル ×1 / perl 勉強法 -2ch ×1 / "$entry->get;" perl ×1 / perl \x1A ×1 / cdate mdate perl ×1 / itunes perl ×1 / マイレート perl ×1 / perl iTunes ×1 / perl ディレクトリ mdate ×1 / itunes 論文 bib ×1 / itune インポート テキスト ×1 / perl get volume ×1 / perl ctime localtime ×1 / itune perl ×1 / iTunes インポート レート 再生回数 ×1 / itunes インポート テキスト xml 変換 ×1 / perl iPod 曲名 ×1 / perl cdate ×1 / perl mdate localtime ×1 / pdf bibtex author script ×1 / BIBfile bib ×1 / ITUNES EUC ×1 / booktitle bibtex pdf ×1 / perl ctime mtime atime ×1 / itunes 属性指向 ×1 / bibtex 読み込み ×1 / itunes アルバム番号 ×1 / Perl iTunes ×1 / perl localtime mtime ×1 / perl exists ×1 / bibtex entry type ×1 / perl のレベル ×1 / iTunes API COM レート ×1 / bibtex 文字コード ×1 / itunes xml 仕様 ×1 / perl 足し算 時間 ×1 / perl mtime ctime atime ×1 / bibtex 雑誌名 略称 ×1 / perl itunes title new ×1 / bibtex perl ×1 / Rubyプログラマのレベル10 ×1 / itunes perl win ×1 / $atime = $mtime = ctime; ×1 / 再生回数 itune インポート ×1 / perl pdf title author ×1
以下の広告はサーバによって自動的に挿入されています.
Copyright © 2004-2006, nao. All rights reserved.





