2007/09/10
曇り
[Projects::Clipping] Livedoor Clip のクリップを Blosxom のエントリ化するスクリプト
お久しぶりです(色々な意味で)。
最近、いわゆるソーシャルブックマークツールとして Livedoor Clip を使い始めたので(理由:Livedoor Reader と連携していて動作も機敏で使いやすいので)、クリップした内容を Blosxom のエントリ化するスクリプトを作成しました。
→Livedoor Clip to Blosxom スクリプト (2007/09/09版)
スクリプトを実行すると、$LIVEDOORID で指定したユーザーの Livedoor Clip の RSS を読み込み、コメントが書かれているクリップを抽出して $BLOSXOM_PATH で指定したディレクトリに(HTML::Templateを使って生成した)blosxom 形式のファイルを出力します。また Amazon の商品をクリップした場合、Amazon から AWS 経由で画像を持って来て表示します。
とりあえず、cron で定期的に実行して運用してみます。
なお、今回は RSS の解析に(XML::RSS ではなく)XML::Simple を使っています。
Livedoor Clip の RSS は1つのクリップにタグを複数指定した場合、「dc:subject」タブをこの数だけ並列に並べたRSSを出力しますが、XML::RSS でパースするとそれが全て連結された1つの文字列になってしまうという現象が発生します。
この問題についてちょっと調べてみたところレンタルサーバでは対応するのが面倒くさそうだったので(横着)、XML::Simpleを使うことで問題を回避しました。
2007/04/16
曇のち雨
[Projects::itread] It Read! - Twitterで自分が発言したメッセージを取得+Amazonリンクを作成
自分が管理してるマンガ感想サイト向けに、Twitterに自分が書き込んだテキストを取り込んで表示する(ついでに、ASINやISBNが書かれていたらAmazonから書影を引っ張ってアサマシ用リンクを生成する)perlのスクリプトを作りました。
せっかくなのでここで公開しておきます。
→It Read! (07/04/16版)
※実行するにはLWP::UserAgent, JSONモジュールが必要です
これを実行するとtwitter.txtというファイルができるので、それを何らかの手段で表示してやれば良いです。マンガ感想サイト(blosxomで運用中)の方では、テキストファイルの中身を表示するblosxom のプラグインを作って表示してます。スクリプトの実行は普通にcronで。
以下、これを作った時に気になったポイント。
・user_timeline で取得できないメッセージがある
自分自身の発言の取得は Twitter API の user_timeline を使っているのですが、発言したはずのメッセージがAPI経由では取得できないケースが(わりと頻繁に)発生します。原因は不明。
時間が経つと取得できることもあるので、反映されるまでにタイムラグがあるのかも知れません。
・user_timeline で取得できないメッセージも、friends_timeline からだと取得できる
friends_timeline で最近の友達メッセージを取得した場合、user_timeline では漏れる自分のメッセージも取得することができます。friends_timeline の方が信頼性が高いみたい。
ただし friends_timeline は直近の20発言しか取得できないので、頻繁にメッセージが流れがちな friends_timeline では確実に自分の発言が取得できる保証がないのが(今回のアプリでは)問題。
仕方がないので、とりあえず
- user_timeline を呼び出して自分のメッセージを取得
- friends_timeline を呼び出してメッセージを取得、そこから自分のメッセージ($item->{user}->{name}が自分の名前のもの)だけを抽出
- IDをキーにしてマージ、発言時刻を降順にソートして出力
というやり方で自分のメッセージを取得してます。まだ友達が少ないので、今のところ取りこぼしはないです。
早くuser_timelineだけでメッセージが確実に取れるようになるといいなあ。
2006/11/28
雨時々曇
[Projects::awsxom] awsxomプラグイン修正
お久しぶりです!(SPAMトラックバックを消す作業をしながら)
以前作ったawsxomプラグインですが、ECS3(旧バージョン)を使っているためか最近は発売日が正常に表示されなくなる現象が発生しており、さすがにそろそろECS4に移行しないとマズイと思ったので、ECS4からデータを持ってくる版のawsxomを作成しました。
→awsxomプラグイン(06/11/24版)
データ取得元は変更になりましたが、プラグインが出力するテンプレート用の変数($ASINとか)はそのまま流用しているため、テンプレートファイルは前のものがそのまま使用できます。(追記)ただし、Amazonが提供しているXMLのフォーマットが以前と今回とでは異なるので、plugins/states/aws_cacheディレクトリにあるファイルは全てクリアしてから今回のプラグインを使用する必要があります。
どうぞご利用ください(慣用句)。
あと、コメント付けて下さった皆さん、お返事できなくて申し訳ありません。
時間ができたらコメント返します。
2006/08/21
晴のち曇
[Projects::ishinao] 1470.net のメモから blosxom のエントリを作成するプラグイン
MM/Memoの1470.net本格移行に伴い、登録したメモをblosxomのエントリ化する自作プラグインを作成しました。
名前は ishinao です。そのまんまですね!(だって考えつかなかったんだもん)
→ ishinaoプラグイン (2006/08/21版)
MM/Memoは基本的に「1つのメモ=1つのURI」という関係でメモを取るツールだったので、MM/Memoをエントリ化するプラグイン(MMToday)では「1日に登録したメモを1つのエントリにまとめる」ということをしていたのですが、1470.netのメモは1つのメモが複数のURIや書籍やイベントなどの複合した情報を持つことが可能である(というか、そういう風に使って欲しいツールになっているように思える)ので、「1つのメモを1つのblogのエントリにする」方が自然だろうと考え、このプラグインではそのような形でエントリを生成するようにしました。
結果的に、1470.netのメモ機能を自分のブログのフロントエンドとして使うようなイメージのプラグインになりました。
とりあえず、しばらくはこれを使ってここを運用してみます。
まだほとんど使ってないので、すごいバグとかあるに違いない。
[Projects::ishinao] use JSON
以下はメモ。
1470.netは、メモの配信フォーマットとしてJSONを使っています。
PerlでJSONを扱う場合は JSON モジュールを使うのが楽なので ishinao プラグインでも JSON を使ったんですけど、さすがのロリポップもJSONモジュールまでは標準でインストールされていませんでした。
なので、ActivePerl の ppm で取得した JSONモジュールをそのまんまロリポの自分のサーバ領域の適当なディレクトリに突っ込み、プラグインの中で「use lib」でJSONを入れたディレクトリにパスを通すという手法で、JSON を使う環境を作ることに成功(強引)。
自分が入れたモジュールは以下の通りです:
- JSON.pm
- JSON/Parser.pm
- JSON/Converter.pm
- JSONRPC.pm
- JSONRPC/Transport/HTTP.pm
- Apache/JSONRPC.pm
上3つだけで十分な気がする。
2006/08/19
晴時々曇
[Projects::awsxom] awsxomプラグイン修正
お久しぶりです。かまけてました(仕事に)。
Amazonの仕様変更でアソシエイトIDのくっつけ方が変わったとのことなので、それに対応した awsxom プラグインを作成しました。
→awsxomプラグイン(06/08/19版)
なお、今回の修正箇所は以下の部分のみなので、既にお使いの方は awsxom を直接修正して下さっても問題ありません。
# Amazonへのリンク $detail{"Link"} = "http://www.amazon.co.jp/exec/obidos/ASIN/$asin/$asoid/";
2006/06/13
曇り
[Projects::plagger] Plagger 入れるのに苦労したモジュールリスト
Plagger をインストールしました(いきなり)。ようやく、Bloglines To GMail が動いたところです。
その際、入れるのに一手間かかったCPANモジュールを、参考として書いておきます。
環境:
coLinux 0.6.3 + Debian-3.0r0.ext3.1gb.bz2。
ほとんど素の状態からのインストール。
DateTime::Format::Mail
現象:
「signature_verify NO」でテストが失敗。暗号化まわりの設定が必要?
対応:
手間がかかりそうだったため、とりあえず force Install DateTime::Format::Mail
XML::LibXML
現象:
make時に「xmlversion.hがない」みたいなコンパイルエラーが発生。
対応:
事前にlibxml2をインストールする必要がある。
→apt-get install libxml2 libxml2-dev libxml2-doc
XML::RSS::LibXML
現象:
make時に "ExtUtils::MakeMaker version 6.25 required--this is only version 6.17 at Makefile.PL line 2.
" が発生。
対応:
ExtUtils::MakeMakerのバージョンが古いのが原因。インストールし直す。
install ExtUtils::MakeMaker → install XML::RSS::LibXML
XML::Parser
現象:
make時に「expat.hがない」みたいなコンパイルエラーが発生。
対応:
expatのソースコードをapt-get source expat でインストールし、./configure → make → make install。
その後、install XML::Parser を実行
Encode::Detect
現象1:
make時に "Module::Build is not configured with C_support at /usr/local/share/perl/5.8.4/Module/Build/Base.pm line 3726.
" が発生。
対応:
http://rt.cpan.org/Public/Bug/Display.html?id=16334 によると、ExtUtils::ParseXS モジュールが必要とのこと。
→ install ExtUtils::ParseXS
現象2:
make時に "cc: installation problem, cannot exec `cc1plus': No such file or directory
" が発生。
対応:
cc1plus は g++ の中に入っているとの情報を見つけたのでインストールしてみたが、変化なし。PATHにcc1plusがあるディレクトリを追加したら、オプションが対応していないという旨のエラーが発生。根性切れたのでインストールせず。
Encode::Detectは文字コード判別時に使われているっぽく、ない場合はEncode::Guessで処理するみたい。なくても何とかなる?
HTTP::Cookies::Mozilla
現象:
インストール時のモジュールには出て来ないが、Plagger のテスト時に使われており、ないとテストが失敗する。
対応:
install HTTP::Cookies::Mozilla
Net::SMTP::TLS
現象:
Publish::Gmail プラグインを使ってメールを出そうとすると、Net::SMTP::TLSがないというエラーが出る。
対応:
install Net::SMTP::TLS
Net::SSLeay
現象:
Net::SMTP::TLS インストール時にインストールされるが、make時に "Please provide OpenSSL-0.9.6j or OpenSSL-0.9.7b installation directory
" というメッセージが表示される。
対応:
OpenSSLのインストールが必要。
wget http://www.openssl.org/source/openssl-0.9.8b.tar.gz → tar xvfz openssl-0.9.8b.tar.gz → cd openssl-0.9.8b → ./config → make → make install。その後、再度モジュールをインストール。
installation directory には /usr/local/ssl を指定
また、Publish::Gmail を使う時の設定ファイルの書き方については、海賊たろさんのブログ「僕トイフ事」の plagger 0.5.4 -> 0.5.7が参考になります。
2006/03/07
曇り
[Projects::Memo] Wishlist機能追加中
お久しぶりです(MM/Memoのメモ以外では)。
私は、ネットを巡回していて気になった本を見つけたらとりあえずMM/Memoにbookタグを付けて片っ端から登録するようにしているのですが、その本を「ウィッシュリスト」のような形でまとめてサイドバーなんかに表示することができたら便利かな?(自分が) と思い立ってしまったので、現在自作の mmtodayプラグインにその機能を追加するテストを行っています。
処理としては、MM/Memoが出力するRSSで拾った記事の中にAmazonへのリンクがあったら、そこからタイトル文字列と書影のURLを適当に抜き出して、ウィッシュリストを保存しているキャッシュファイルに追加するという感じ。しばらく運用してみて、特に問題がなければ正式に公開してみます。
まあ、公開しても使うのは自分だけなのでアレなんですけどね。
これが Blosxom + MM/Memo というマニアック極まりない組み合わせではなく、「はてなブックマークにブックマしたAmazonへのリンクをMovable Typeにエントリとして自動的に取り込むプラグイン」とか作った方がモテるんだろうなあといつも思うのですが、まあモテたくてブログツールいじってる訳じゃないから別にいいや(投げやり)。
2006/02/21
曇のち晴
[Projects::weather] ldweatherプラグイン
みんな大好きライブドアがWebアプリケーションオタク達に仕掛けた壮大な釣り行為である livedoor Weather Web Service ですが、せっかくなので釣られる形で blosxom 用のプラグインを作ってみました。
インストールと設定:
- pluginsディレクトリに、ldweather をコピーして下さい。
- ldweather の19行目にある
my $CITY = 70; # 都市番号
を、ライブドアが提供している「全国の地点定義表」を参照して、お好みの都市番号に修正して下さい。 - plugins/states ディレクトリに、cache という名前のディレクトリを作成して下さい(ない場合はプラグインが自動的に作ります)。ここに、取得したXMLが保存されます。
使い方:
お天気情報の取り込み
お天気情報は、今日のデータをまだ取得していない場合、あるいは前に今日のデータを取得してから6時間以上経過した場合、自動的に取得されます。
フレーバーにお天気情報を埋め込む
date, story, footフレーバーに以下の変数を埋め込むことにより、その場所にお天気情報を表示します。
date, story で使った場合はそのエントリの日付のお天気情報を、foot は常に今日のお天気情報を参照します。
$weather::telop | 今日の天気 |
$weather::link | livedoor 天気情報のURL |
$weather::title | タイトル・見出し |
$weather::area | 地方名 |
$weather::pref | 都道府県名 |
$weather::city | 1次細分区名(要は街の名前) |
$weather::image | 天気アイコン(livedoor天気情報へのリンク付き) |
$weather::description | 天気概況 |
$weather::max | 最高気温 |
$weather::min | 最低気温 |
エントリの中にお天気情報を埋め込む
エントリの中にお天気情報を記述する場合、上記の変数を「<」~「>」で囲って記述することで、そこがその日付のお天気情報に置き換わります。
<a href="<$ldweather::link>"><$ldweather::title></a><br />
<$ldweather::image><$ldweather::telop>(<$ldweather::max>℃)<br />
<small><$ldweather::description></small>
↓
神奈川県 横浜 - 今日の天気
曇のち晴(℃)
日本の南海上には前線が停滞しています。 現在、関東甲信地方は、全般に曇りとなっています。 今夜は、前線の影響で曇りとなりますが、前線が次第に南下するため...
なお、XMLの解析は(XML::Simpleなどを使わず)普通に正規表現で済ませています。なので、XMLのフォーマットが微妙に変わっただけでガタガタになる可能性もあります。まあそれはそれで(手抜き)。
なお文字コードの変換はしていないので、UTF-8以外で運用している方が使う場合は改造する必要があります。
要望としては、市町村ごとのピンポイント情報へのリンクの有無を選択できたらいいかも(このプラグインみたいな使い方する程度なら不要なので)というのと、都市番号に変なデータ入れた時などのエラー時にはXMLでエラーを返した方が良い(ライブドアのトップページに飛ばされる?)という点でしょうか。
何はともあれ、面白いサービスの公開ありがとうございました。
2005/11/01
[Projects::Memo] ツンデレには勝てないなあ
お久しぶりです(MM/Memoの履歴以外では)。
10/16から10/30までの間、MM/Memoから今日のメモを持ってきて自動的にBlosxomのエントリ化するMMTodayが内部的にコケていたようで、まったく動作していませんでした。
コケていた原因ですが、自分がMM/Memoにブックマークした
http://nya.livedoor.biz/archives/50144165.html
の記事を取り込んでXML::Parserに通した時に、「ナニヨ!
」と言ってるツンデレっ娘AAの部分でパースエラーになっていたのが原因だったみたいです。タイトルのAAを外したら、MMTodayが正常に動くようになりましたよ。
ツンデレには勝てないなあと思いました(まちがい)。