livedoorブログのページ上にあるRDF情報について教えてください。
livedoorブログで各ページのソースを開くと各記事の直前にRDFタグ<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" ~中略~ </rdf:RDF>トラックバックの相手先に表示する情報でしたでしょうか?
これをRSSリーダーみないな感じにこの情報を読み取るツールはありますでしょうか?
WEBアプリケーションでもデスクトップ・アプリケーションでもかまいませんので、ご存知の方がいらっしゃいましたらよろしくお願いいたします。
回答(1)
1.

これなんかいかがでしょ?
どうもありがとうございました。
単純に抽出するだけならなんとなく方針は立ったのですが、一般的なサービスを使って実現しようとするとなかなか技術レベルが追いつかないところもあって、時間がかかりそうです。
ということで一旦閉めますね。
コメント(10)
そういえばナレッジで有名なあの人から先日こういうのをいただきました。
http://n.chu.in/r/rss.cgi?url=http%3A%2F%2Fblog.li...
詳しい使い方やRSSフィードの登録方法等は一切わかりません^^;
宣伝目的と誤解されてもしょうがないですがあえて。
万年床生活者さま
どうもありがとうございます。
RDFのフォーマットでもRSSとトラックバック・ピン通知では違うのですね。
RSSリーダでは読めなかったので、NIPO N WebのトラックバックPING通知の方を使ってみました。
タイトルとリンクだけは出てきましたが、詳細の情報が出てこないみたいですね。
このリストがまたフィードで拾えたら嬉しいのですが。。。
>RSSってなんですのん
要はフィードにはRSSとATOMがあって、
RSSはRDFのフォーマットで書かれていて、
RDFとATOMはXMLというマークアップ言語で書かれている…
…ということでしょうか。
うーん、、ややこしいです。。
>>#4
NIPOさんのサービスだったんですね。
さすがにすごいですねぇ。
質問の件はYahoo! Pipesを使ってページデータからRDFを抽出、フィードに変換できないかと奮闘中です。
これができるとRSSのプラグインを使ってブログのカスタマイズがいろいろできるんじゃないかな~と思うのですが。
すごい。かなり高度な技にトライされてるんですねぇ^^;
ひょっとしなくても
http://knowledge.livedoor.com/27098
これでしょうか。夢のあるカスタマイズですね♪
もはや私には完全に手が出せない領域ですので
草葉の陰から生暖かく見守らせていただくことにします。
<!-- 無駄話 ここから -->
私は以前、あるブログを参考に
dc:description="記事の概要"ここを利用してカテゴリ別・月別アーカイブで記事タイトル+見出しだけを表示するというカスタマイズをやったことがあります(私はまる1日かかったけどimqさんなら5分でできるかな)。
しかしTB送信時に、普通はそんなことする人はいないでしょうが、相手先に通知する概要を記事と違う内容に書き換えるとアーカイブのページにもそれがそのまま反映されてしまうのでやめました。
<!-- 無駄話 ここまで -->
この埋め込み式っぽいrdfがなんなのか、
全く最近知った(要するにソースを見た)ので、
なんだかなって感じなんです。
ただいま研究中です。
ただ、抜き出すのは容易なことだと思います。
Perlなら、
その部分を抜き出して別ファイルにして
XML解析すればいいと思うのですが...
う~ん...
kanzaki.comはやっぱり役に立つなぁ!
http://www.kanzaki.com/memo/2004/02/26-1
でもわけがわからない。
この方に聞いてみたほうが早いかもしれませんね。
基本的にトラックバックは、
相手のサーバーにPOSTでデータを送信するので、
関係ないはずです。
JavaScriptで簡易的に取り出してみました。
function read_rdf(rdf_text){
rdf_text.match(/dc:title=\"(.*?)\"/);
this.title = RegExp.$1;
rdf_text.match(/dc:identifier=\"(.*?)\"/);
this.identifier = RegExp.$1;
rdf_text.match(/dc:subject=\"(.*?)\"/);
this.subject = RegExp.$1.split(',');
rdf_text.match(/dc:description=\"(.*?)\"/);
this.description = RegExp.$1;
rdf_text.match(/dc:creator=\"(.*?)\"/);
this.creator = RegExp.$1;
rdf_text.match(/dc:date=\"(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d:\d\d:\d\d).*\"/);
this.date = new Date(RegExp.$1 + '/' + RegExp.$2 + '/' + RegExp.$3 + ' ' + RegExp.$4);
rdf_text.match(/rdf:about=\".*(\d\d\d\d\d\d\d\d).html\"/);
this.index = RegExp.$1;
}
続き.
function get_rdf(tx){
var rdf = new Array();
var tx_rdf = tx.match(/<rdf:Description\r\n.*\r\n.*\r\n.*\r\n.*\r\n.*\r\n.*\r\n.*\r\n.*>/g);
for(var i in tx_rdf){
rdf[i] = new read_rdf(tx_rdf[i]);
}
return rdf;
}
get_rdfにページのテキストを引数に与えると
read_rdfオブジェクトが記事数分の配列で戻ってきます。
例えば↓こんな感じで取り出せるかと思います。
var rdf = new Array();
var el = document.getElementById('content');
rdf = get_rdf(el.innerHTML);
とすると、rdf[0].titleで、一番目の記事のタイトル
rdf[1].subject[1]で、2番目の記事のカテゴリー2
rdf[2].indexで、3番目の記事のID
rdf[3].dateは、4番目の記事の日付がDate型のオブジェクトで返されます。



