3D mode!

Entries tagged with "Plagger"

P::P::Publish::MixiDiaryに「interval」を追加

ありがたく使わせていただいているP::P::Publish::MixiDiaryですが,P::P::Publish::HatenaBookmarkなどのように「interval」を設定できたら便利だなぁということでやりました.ほとんど何も変えていないけれど一応メモとして残しておきます.

MixiDiary.pm
[perl]
package Plagger::Plugin::Publish::MixiDiary;
use strict;
use warnings;
use base qw ( Plagger::Plugin );

use WWW::Mixi;
use Encode;
use Time::HiRes qw(sleep);

sub register {
my($self, $context) = @_;
$context->register_hook(
$self,
‘publish.init’ => \&initialize,
‘publish.entry’ => \&post_diary,
);
}

sub initialize {
my($self, $context, $args) = @_;

my $cookie_jar = $self->cookie_jar;
if (ref($cookie_jar) ne ‘HTTP::Cookies’) {
$self->conf->{username} ||= ‘email@example.com’,
$self->conf->{password} ||= ‘p4ssw0rd’,
}

$self->{mixi} = WWW::Mixi->new(
$self->conf->{username},
$self->conf->{password},
-log => 0,
);

$self->{mixi}->cookie_jar($cookie_jar);

unless ($self->{mixi}->login) {
$context->log(error => “Login failed.”);
} else {
$context->log(info => “Login Successed.”);
}
}

sub post_diary {
my($self, $context, $args) = @_;

my $e = $args->{entry};

my $title = $e->title;
my $body = $e->body_text;
my @images;

if ($e->has_enclosure) {
for my $enclosure (grep { defined $_->url && $_->is_inline && ($_->url =~ /.*\.jpg$/) } $e->enclosure) {
push(@images, $enclosure->local_path);
}
}

my %diary = (
diary_title => encode(‘euc-jp’, $title),
diary_body => encode(‘euc-jp’, $body),
photo1 => shift(@images),
photo2 => shift(@images),
photo3 => shift(@images),
);

my $sleeping_time = $self->conf->{interval} || 3;
if ($self->{mixi}->get_add_diary_confirm(%diary)) {
$context->log(info => “Making diary succeeded. sleep $sleeping_time.”);
sleep( $sleeping_time );
} else {
$context->log(error => “Making diary failed.”);
}
}

1:
__END__
[/perl]

YAMLはこんな感じ.

[xml]
global:
timezone: Asia/Tokyo
log:
level: info

plugins:
– module: Subscription::Config
config:
feed:
– url: http://www.sample.com/rss

– module: Filter::Rule
rule:
module: Deduped
path: /home/user/plagger/cache_rule/feed2mixidiary.tmp
compare_body: 1

– module: Filter::Reverse

– module: Publish::MixiDiary
config:
username: username@example.com
password: password
interval: 10
[/xml]

激しく更新されるFeedをmixi日記に吐くときは,intervalを入れないとmixiに怒られちゃいますからね.良い子のみんなはそんなFeedをmixiにブチ込んじゃダメだよ.

とかPla

帯広市 北のくらし情報システムで「はらへった」と検索してから豚丼にありつくまで

北のくらし情報システム

豚丼とそばのセット

それ,とかちプラザでできるよ!

とかちプラザ

続Plaggerいじり補足

はてなブックマークのフィードを取ってきて全文配信にするには,EntryFullTextのconfigに「force_upgrade: 1」を加えなければいけません.

あと,リンク先がPDFだったりするとおかしなことになるかも.コンソールを見ていると,処理がしばらく止まるのが分かります.リンク先がPPTの場合で試してみると,処理は滞らなかったけれどとんでもないメールが送られてきました.リンクURLを見て例外扱いする必要があるなぁと思い調べていたら人力検索はてな – Plagger って何ですか?のotsuneさんの回答がまさに回答でした.というわけで下記が改良版です.

sbm2gmail.yaml
[code]
global:
timezone: Asia/Tokyo

plugins:
- module: Subscription::Config
config:
feed:
- FEED_URL_1
- FEED_URL_2
- FEED_URL_3


- module: Filter::EntryFullText
rule:
expression: $args->{entry}->link !~ m/.*\.(ppt|pdf|swf|mov)$/
config:
store_html_on_failure: 1
force_upgrade: 1

- module: Filter::ResolveRelativeLink

- module: Filter::Rule
rule:
module: Fresh
mtime:
path: /home/june29/plagger/cache_rule/sbm2gmail.tmp
autoupdate: 1

- module: Filter::BreakEntriesToFeeds

- module: Publish::Gmail
config:
mailto: you@example.com
mailfrom: you@example.com
mailroute:
via: smtp
host: localhost:25
[/code]

続Plaggerいじり

del.icio.usのブックマークをはてなブックマーク及びLivedoor Clipへ

すごく便利だなぁと思ったのだけれど,ボクの環境ではソーシャルブックマーク管理ツールbookeyが動きません.でもいざというときのためにdel.icio.usのブックマークをはてなブックマークや他のソーシャルブックマークサービスにも残しておきたい.それPla,と思ってやってみました.

なぜブックマークのバックアップを考えたか,理由はいくつかあります.まず単純に,del.icio.usがメンテナンスなどで利用不能になっているときに,代わりに利用できるものがほしい.そして,それぞれのサービスにはそれぞれの良さがあって,上手に使い分けていけたらもっと便利に使えるだろうと考えました.del.icio.usは投稿がしやすくて好きです.一方ではてなブックマークは,再利用の仕組みがたくさんあって楽しいです.特に最近,はてなブックマークコメントその場で表示ライブラリがリリースされてますます楽しいです.ボクも自分の作ったWebサイトでこのライブラリを利用させてもらおうと思ったのですが,自分のコメントが表示されないってのは寂しいものです.それで,はてなブックマークにも同期させてしまえと思いました.ついでにサムネイル表示が嬉しいLivedoor Clipにも同期させます.

yamlはPlaggerグループ – Seacolor’s Labs. – del.icio.usとはてなブックマークを同期させるyaml(完全版)を参考にさせてもらいました.感謝です.

del.icio.us2hatebdoor.yaml
[code]
global:
timezone: Asia/Tokyo
log:
level: info

plugins:
- module: Subscription::Config
config:
feed:
- url: http://del.icio.us/rss/june29

- module: Filter::Rule
rule:
module: Deduped
path: /home/june29/plagger/cache_rule/delicious2hatebdoor.tmp
compare_body: 1

- module: Filter::Reverse
- module: Filter::DeliciousFeedTags

- module: Publish::HatenaBookmark
config:
username: (hatena_id)
password: (hatena_password)
interval: 8
post_body: 1

- module: Publish::LivedoorClip
config:
livedoor_id: (livedoor_id)
password: (livedoor_password)
interval: 5
post_body: 1
[/code]

Dedupedを指定して重複ポストを防ぎます.delicious2hatebdoor.tmpはそのためのファイルのようです.指定したファイルが存在しない状態でこのyamlを実行すると途中で止まります.事前に用意しておく必要があるのでしょうか.

[code]
touch /home/june29/plagger/cache_rule/delicious2hatebdoor.tmp
plagger -c del.icio.us2hatebdoor.yaml
[/code]

上記のようにコマンドを実行したところ,上手く動いてくれました.各intervalは適当です.急ぐものでもないので,他の使用者の皆さんのソースを参考にしつつ気持ち長めに設定.

自分と仲間たちのブックマークを全文にしてGmailへ

これはもう,「誰かがブックマークしていたなぁ」をいつでも全文検索できるようにしたい,それだけです.Bulknews::Subtech – atode.cc クローン by Plaggerをほとんどそのまま利用させてもらいました.感謝です.

sbm2gmail.yaml
[code]
global:
timezone: Asia/Tokyo

plugins:
- module: Subscription::Config
config:
feed:
- FEED_URL_1
- FEED_URL_2
- FEED_URL_3


- module: Filter::EntryFullText
config:
store_html_on_failure: 1

- module: Filter::ResolveRelativeLink

- module: Filter::Rule
rule:
module: Fresh
mtime:
path: /home/june29/plagger/cache_rule/sbm2gmail.tmp
autoupdate: 1

- module: Filter::BreakEntriesToFeeds

- module: Publish::Gmail
config:
mailto: you@example.com
mailfrom: you@example.com
mailroute:
via: smtp
host: localhost:25
[/code]

リンク先に説明があるのでここでは省きます.mtimeがよく分かっていないのですが,これも重複チェックのための機構だと思います.先ほどと同じように予めテンポラリを作っておくときちんと動きます.

[code]
touch /home/june29/plagger/cache_rule/sbm2gmail.tmp
plagger -c sbm2gmail.yaml
[/code]

指定するフィードの数が多くなると,全文取得や画像の相対パスを絶対パスに変換する処理などでけっこうな時間がかかるので,このyamlは3時間に1回だけ実行するようにcronを設定しました.

複数フィードを1つのフィードに統合

ウチの組織では,お互いがお互いに相手のブログ,ソーシャルブックマーク等のフィードをRSSリーダで購読しています.だからメンバーが1人増えるたびに登録の手間が発生するわけです.だったら全員分のフィードを1つにまとめて,みんなもそのフィードだけを購読するようにすれば良いということでPlaggerでやりました.

members2feed.yaml
[code]
global:
timezone: Asia/Tokyo
level: info
cache:
base: /home/june29/plagger/cache_rule

plugins:
- module: Subscription::Config
config:
feed:
- FEED_URL_1
- FEED_URL_2
- FEED_URL_3


- module: SmartFeed::All
config:
title: "FEED TITLE"

- module: Publish::Feed
rule:
expression: $args->{feed}->id eq 'smartfeed:all'
config:
dir: /var/www/public_html/rss/
format: RSS
filename: feedtitle.rss

[/code]

指定したフィードをまとめてタイトルを付けて外から見える場所にファイルとして出力しているだけです.最初,sudoなしではmkdirしようとして止まってしまっていたのですが,globalのところでcacheのbaseを指定したらsudoなしでも実行できるようになりました.仕組みはまだよく分かっていないので,これから勉強しなければなりません.

今回のまとめ

ひとまず「やりたい!」ことはPlaggerを利用して1つずつ実現できています.世間的にはPlaggerでなんでもできる感じになっていますが,ボクはまだまだ「誰かがすでにやっていて,記録を残してくれているもの」しかできていません.もう少し触ってみて理解を深めて,もっと便利な使い方を見付けられたらなぁと感じています.ともあれ,こんなに便利なツールを提供してくれている皆さんにはとても感謝です!Plagger!

追記

続Plaggerいじり補足にて内容を補足しています.

Plaggerメモ

あとでちゃんと書く(後日こちらに書きました).とりあえずメモしておく.

参考にさせていただいたWebサイト

やったこと

手始めにBloglines2gmail.yamlを使う.みんなのブックマークをGmailにアーカイブする.1エントリが1メールになるように設定.送信先アドレスには「+plagger」を付与しておいて,これでFilterに引っ掛けてInboxに入らないようにするとともに何かしらのLabelも付けておく.これであとから検索可能になる.

——————————————————————
global:
timezone: Asia/Tokyo
log:
level: info

plugins:
– module: Subscription::Bloglines
config:
username: USERNAME
password: PASSWORD
mark_read: 1
fetch_meta: 1

– module: Filter::BreakEntriesToFeeds

– module: Publish::Gmail
config:
mailto: USERNAME+plagger@gmail.com
mailfrom: miyagawa@example.com
mailroute:
via: smtp_tls
host: smtp.gmail.com:587
username: USERNAME
password: PASSWORD
——————————————————————

一定感覚でplaggerを実行するようcronを設定.「1時間に1回」としておいた.

>> crontab -e
——————————————————————

0 * * * * $PLAGGER_DIR/plagger -c $YAML_DIR/bloglines2gmail.yaml

——————————————————————

思ったこと

  • 設定さえ済んでしまえばあとは簡単に色々できる.設定してくれたkei-sさんありがとう
  • レポートの締め切りが迫っているときに触っちゃダメ
  • 研究用のデータ集めにも使えそうだと一瞬マジで惚れそう
  • それ,ソニープラザで買えるよ