muumoo.jp


ニュース記事検索


過去ログ 2007年07月19日 - ニュース過去ログ

ニュース過去ログ

2007/07/19 管理人日記 Plaggerで取得したGoogleブックマークのフィードを整えるFilter:GoogleBookmarksFeedを書いたけど日本語消えちゃう (管理人日記)

Plagger::Plugin::Filter:GoogleBookmarksFeed というのを書きました。でもまだ完成してません。日本語が消えてしまいます。誰か助けてー。

package Plagger::Plugin::Filter::GoogleBookmarksFeed;
use strict;
use base qw( Plagger::Plugin );

use Plagger::Tag;

sub register {
    my($self, $context) = @_;
    $context->register_hook(
        $self,
        'aggregator.entry.fixup' => \&fixup,
    );
}

sub fixup {
    my($self, $context, $args) = @_;
    
    my $ns = 'http://www.google.com/searchhistory';
    
    if ($args->{orig_entry}->isa('XML::Feed::Entry::RSS')) {
        if (my $orig_body = $args->{orig_entry}->{entry}->{$ns}->{bkmk_annotation}) {
            $args->{entry}->body($orig_body);
            $context->log(info => "Parsing Google Bookmarks title " . $args->{entry}->permalink);
        }
        if (my @orig_tags = @{$args->{orig_entry}->{entry}->{$ns}->{bkmk_label}}) {
            $args->{entry}->tags(@orig_tags);
        }
    }
}

1;

__END__

PlaggerのPluginを書いたのは初めてです。ていうかPerl自体かなり久しぶりで、よくわからないまま見よう見まねで書いただけです。基礎的なことすらわかってないと思います。

Googleブックマーク → livedoorクリップ がやりたかった

ちょっと事情があって、https経由でしかインターネットに向けて発信したくない場所(通信が監視されている場所)からlivedoorクリップに投稿したい。残念ながらlivedoorクリップはhttpsに対応してないため、そのまま投稿することはできません。

そこで考えたのが、「httpsでGoogleブックマークに投稿して、別な場所からPlaggerがそのGoogleブックマークの内容をlivedoorクリップに投稿する」という方法。Googleブックマークはhttpsでも通信できるので、なんか可能そうな気がします。

そこで、以下のようなconfig.yamlを書きました。

plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: https://www.google.com/bookmarks/?output=rss

  - module: UserAgent::AuthenRequest
    config:
      host: www.google.com:443
      auth: basic
      realm: Google Search History
      username: (Googleのアカウント名)
      password: (Googleのパスワード)

  - module: Publish::LivedoorClip
    config:
      livedoor_id: (livedoor ID)
      password: (livedoor IDのパスワード)
      interval: 2
      post_body: 1

Googleブックマークのフィードを取得して(Basic認証)、それをPublish::LivedoorClipしてるだけです。これで一応投稿できたのですが、

という状況でした。うーん残念。

Googleブックマークのフィード

Googleブックマークのフィードを見てみると、

<item>
    <title>ページのタイトル</title>
    <link>http://www.example.com</link>
    <pubDate>Wed, 18 Jul 2007 12:34:56 GMT</pubDate>
    <category>bookmark result</category>
    <description></description>
    <guid>なんかユニークっぽいID</guid>
    <smh:bkmk>yes</smh:bkmk>
    <smh:bkmk_id>ここもユニークっぽいID</smh:bkmk_id>
    <smh:bkmk_title>ページのタイトル</smh:bkmk_title>
    <smh:bkmk_label>タグ1</smh:bkmk_label>
    <smh:bkmk_label>タグ2</smh:bkmk_label>
    <smh:bkmk_annotation>コメント</smh:bkmk_annotation>
</item>

こんな感じになってます。

descriptionは空っぽだし、categoryは「bookmark result」。これがlivedoorクリップに投稿されてしまったっぽい。正しくはsmh:bkmk_annotationとsmh:bkmk_labelが使われればいいんだと思います。

Plugin作った

そこで、上記に書いたPluginを書いてみました。Filterにして、smh:bkmk_annotationをbodyに、smh:bkmk_labelをtagsにセットするような感じです。GoogleBookmarksFeed.pmというファイル名にして、perl/site/plagger/Plugin/Filterに配置します。

そしてこれを使うconfig.yamlは以下。

plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: https://www.google.com/bookmarks/?output=rss

  - module: UserAgent::AuthenRequest
    config:
      host: www.google.com:443
      auth: basic
      realm: Google Search History
      username: (Googleのアカウント名)
      password: (Googleのパスワード)

  - module: Filter::GoogleBookmarksFeed

  - module: Publish::LivedoorClip
    config:
      livedoor_id: (livedoorのアカウント名)
      password: (livedoorのパスワード)
      interval: 2
      post_body: 1

さっきのやつに「Filter::GoogleBookmarksFeed」の定義を追加しただけです。これで試してみると、うまく行ってるように見えました。やったー。

日本語が消える

喜んだのもつかの間、日本語の文字を含むタグやコメントを書くと、その文字が消えてしまうようです。Plaggerではありがちな問題なような気がしますが、このPluginでも起きてしまいました。

これがどうやっても解決できない。いや「どうやっても」っていうか、勉強不足なのでいろいろ試すネタがないんです。

うあー困った。

この記事のURI:
http://muumoo.jp/news/2007/07/19/0ppfgooglebookmarksfeed.html


Copyright© 2002-2007 muumoo.jp All Rights Reserved.