Plagger初挑戦

インストールはしてあったのだけど、なかなか暇を見つけられなくてさわれなかったPlaggerを(やっと)いじる機会ができた。

とりあえず、今入ってる0.5.4から最新の0.5.7にアップデート。

で、基本のbloglines2gmailをhack通りに

ん?うごかねぇ。

っていうかTimezoneがとか出るんですけど、、、、

PerlDocみると環境変数がとかあるので、JST-9をセットしておく

$ export TZ=JST-9

これでOK。再度Plagger実行。今度は違うエラーが、gmail_notify.ttがないと出てますゾ。

$ ./plagger Plagger [info] plugin Plagger::Plugin::Subscription::Bloglines loaded. Plagger [info] plugin Plagger::Plugin::Publish::Gmail loaded. Plagger::Plugin::Subscription::Bloglines [info] You have 11 unread item(s) on Bloglines. Plagger::Plugin::Subscription::Bloglines [info] 12 feed(s) updated. Plagger::Plugin::Publish::Gmail [fatal] file error - gmail_notify.tt: not found at line 92

hackに書いてないのでググってみるとビンゴなエントリ発見。 しかも、タイムゾーンってGlobalで設定すればいいのか、、、、なるほど。

07.02.19追記

下のやり方はダメ。 こっちとかのようにsvnで。 ここまで追記

assets_path設定して、その下にcommonっていうディレクトリ掘ったら、その中にgmail_notify.ttっていう空ファイルをtouchしてもう一度Plagger実行したら今度はうまくいったヨ。

bloglines2gmail

あとでTTいじるか。

まだこんな感じで、ほんのさわりしかいじってないけど、なかなか面白そうな感じですな。

個人的にはPipeline PilotみたいなGUIで直感的にわかりやすいソフトにぶち込むのも素敵な感じがしてますが。

Pipeline Pilotクローンってオープンソースのプロジェクトでないのかなぁ。

PlaggerでChangeLogを扱う(2)

以前書いたのは改行がスキップされたりして困るので、書き直した

Parse::RecDescent::FAQ - Parse::RecDescent 公式FAQ

デフォルトでは、P::RDはトークンの前にある全ての空白(改行も含む)を スキップする。

ということなので、$Parse::RecDescent::skipにタブを含めないようにして対処。あと、せっかくGmailに送るのでText::MarkdownでHTML化するようにした。でも本当はFilterでやるべきことなのかな?

なんでMarkdown使うのかというと、僕はblosxomをMarkdown使って書いてるので、メモも勢いMarkdownぽくなっちゃってるの。だから、いっそそういう記法で縛っておけば後々楽かなと。

さて、動作確認はせっかくなのでYAPCでのPlaggerとXSのメモをgmailに送ってみたヨ。

今回、設定ファイルは前回のに加えて、Filter::BreakEntriesToFeedsでエントリ毎にメールするようにしてあるので注意だ。

2006-03-30  kzfm  

* YAPC: XS
        はじめてのXS
        ====
        XSUBs
        数値計算はCのほうがいいから**ちょっと覚える**か

MakeMaker,Module::Build  
        サンプルがあっぷされるので動かしてみる  
        inline Cというのもあるらしい

2006-03-29  kzfm  

* YAPC: Plagger
        global:
        widget::delicious
        ボタンをつける

Planet Clone  
        EgoSearch  
        Publish::Feed

ロードマップ

- 0.6 Custom feeds revamp
        - 0.7 エンクロージャー
        - 0.8 重複チェックのためのサーバーとDB
        - 0.9 incoming Server
        - 1.0 web interface w/Ajax

実際にGmailで見るとこうなる。

cl2pl

あとは、PlaggerでCOOKPADのピックアップレシピをGmailへなどを参考に、Rule::Deduped で重複エントリーを削除すればよいかな。あーあと、タグで処理わけしなきゃならん。

それにしても、 PlaggerでCOOKPADは良かった(料理も食べるのも好きなので)

いつもは、自分のためにyaml書いてるけど、U隊長のgmailアドレスにも送るようにしといた。

嫁も読めだからyomeggerだ(wifehack)!

あーただ、言ってみたかっただけ。

Plaggerのgmail_notify.tt

gmail_notify.tt0.5.0をコピーして解決。

わかってしまえば、そりゃそうだと思うんだが、実は結構はまったり(謎)。ソースみればforeachでまわすんだろうナァと思いつつmail.ttをgmail_notify.ttという名前でコピーして、

エントリーが出ねぇ!何故じゃ!!

とかいって、WebService::Bloglinesをいじってみたりとか。

だんだん楽しくなってきた。


検索してきた向け(いい加減?)

subversion 入れて(Winだとtortoiseがいいのかな)

svn co http://svn.bulknews.net/repos/plagger/trunk/plagger/ Plagger

とかやる。でこれをassets_pathに設定する。

Plagger とプラグインシステムなどを参考に。

Plaggerではてなキャスト

ちょっと遅いんではないの?と言われそうですが、はてなのアカウントとりました、kzfmです。 というわけで、面白そうと思ってたPlaggerで、はてなのブックマーク読み込んでPodCastingするということをしてみた。

  • Subscription::Config
  • で、はてなブックマークのRSSをとってくる
  • Filter::HatenaMP3(自作)
  • MP3のエントリのみ抜き出す
  • Publish::PodCast(mizzy.org)
  • Podcastするヨ

PodCast用のPluginはmizzy.orgから頂いてきた。P::P::Filter::HatenaMP3はmp3でないentryを除きつつ、enclosure要素をmetaに放り込むようにしてある。length必要かな?とか思ったんだけど、なくても動いたのでとりあえずそのまま(本当は入れたほうがいいんだけど)。あと文字化けしてるとことか手を入れなきゃならんとこ多数な気が。

でもまあ、こんな設定で動く。

global:
  assets_path: /home/kzfm/plagger/assets
  timezone: Asia/Tokyo

plugins:
  - module: Subscription::Config
    config:
      feed:
       - url: http://b.hatena.ne.jp/kzfm/rss

- module: Filter::HatenaMP3

- module: Publish::PodCast
    config:
       dir: [RSSDIR]

これまた、なかなか快適だヨ。

はてなキャスト

これでまた、CDとかレコード買う量増えるんだろうナァ、、、、、

あと、もっとコードを読んだり書いたりして色々勉強せなあかんなぁ、、、、と思ったり。

enclosure要素のlength属性って

はてなのブックマークをPodcastに対応させるためにenclosure要素のlength属性をどうしようかなと考えていたが、結局LWP::SimpleとかLWP::UserAgent使って、ヘッダーとってきて調べることにした。

my $request = new HTTP::Request('HEAD', $url);
my $response = $ua->request($request);

if ($response->is_success) {
   print $response->content_length;
}

last.fmをPodcasting

時間が出来たらPlagger+Last.fmやってみたいなぁと思っているんだが、とりあえずMP3::Podcastを使ってうまくいくか試してみた。

last.fm-ripper使うと指定したディレクトリにmp3がたまるので、MP3::Podcastで連携しやすい。

#!/usr/bin/perl

use MP3::Podcast;
use strict;
use warnings;

my $dirname = "[MusicDIR]";
my $urlbase = "http://[URL]";
my $dir = "/";

my $pod = MP3::Podcast->new($dirname,$urlbase);
my $rss = $pod->podcast($dir,"kerolincast");
print $rss->as_string;

kerolincast

なかなか快適な感じです。

あと、かま田さんとこで知ったんですが、はてなブックマークにmp3が登録できるようになったそうなんで、Plagger::Plugin::Publish::PodCastを利用すれば、かまックマーク->かまックキャストとか、、、つまり、Plagger使ってはてなブックマークでPodcastingできるかなとか思ったヨ。

でもlengthどうやってゲットするのがいいのかな?

というか、はてなにアカウント作ろうか、、、、

Plagger+Last.fm

last.fm-ripperPlaggerを組み合わせればiPodにいれてlast.fmを聴けるんじゃないかと思ったり。

そうすると、車の中でlast.fmチェック出来るのでかなり嬉しいかも。

ただpodcastingさせるだけだったらPlagger使う必要ないかな?じゃぁ曲リストをgmailなんかに送ればいいのか(これも意味あるのかわからん)

それともmixiでおすすめ曲のタグの探してきてそのラジヲを追っかけるとか、なんかそんなフィルター入れた使い方をするとおもしろいのかな?または、last.fmにこだわらないで適当にフィルターかけてjuno recordsの視聴mp3とってくるとかでもいいかも。

R4にCatalystとPlaggerをインストール

R4のColinuxにCatalystPlaggerをインストールしようとしたら、Test::Treeあたりで、Weak referencesのエラーが出るので、perlのバージョンあげることにした。

といってもdebなパッケージの作り方良くわからんので、素直にソースからインストール。perl5.8.8のインストール完了。

で、改めてPerlモジュール突っ込み開始(4時間ほど)。途中Expatで躓いたが、libexpat-devでもlibexpat-develでもなく

apt-get install libexpat1-dev

だった。紛らわしい。

PerlMolもこれで動くようになったはず(確認してないけど)。Chemネタ的にはChemrubyも1.0.0がリリースされていましたね。こっちも、暇をみつけていじり倒さねば。