オープンソースの画像生成AIをセットアップから使い方まで解説する『Stable Diffusion AI画像生成ガイドブック』(ソシム刊)発売中(→本のサポートページ

RSSが全文配信されていないダイアリーをRSSリーダーで全文読めるようになるパイプ

はてなダイアリーが発行するRSSフィードの内容は、書いてる人が「全文配信」と「要約のみ配信」の2種類から選べます。「要約のみ配信」のはてなダイアリーRSSリーダーで読むと、長い本文は途中までで切れ、ASIN記法や貼り付けた画像なども展開されず、記法や画像のURLをそのまま見ることになります。

はてなダイアリーの現在のデフォルトは「全文を掲載する」ですが、「要約のみ配信する」だった時期もあり(参照:「はてなダイアリーの提供しているRSS - はてなダイアリーのヘルプ」)、またそのほかの理由で「要約のみ配信」を選んでいる人もいます。

でも読む側としては、できればRSSリーダーで全文を読みたい!

ということで作ってみました。「要約のみ配信」のダイアリーでも、RSSリーダーで全文読めるようにするYahoo! pipesです。日記の表示モードが「日記モード」「日記モード・見出し別ページ」「ブログモード」のどれでも使えます。

はてなダイアリー全文取得パイプ」の使い方

http://pipes.yahoo.com/pipes/pipe.info?_id=3eebace824bb60a10f13c841c2c64478

  1. 「Diary URL(not RSS)」のテキストボックスに、全文取得したいダイアリーのURLを入れます。うっかりして、特定の日付やRSSのURLを入れても大丈夫なように、いちおう最低限の処理をしています。
  2. 「Run Pipe」ボタンをクリックします。
  3. 結果が表示されたら(表示結果が変でも大丈夫です)、登録先に合わせて「+My Yahoo!」なり「+Google」なりをクリック。素のRSSを取得したいときは「More options」をクリックして「Get as RSS」を右クリック→リンク先をコピー。

RSSのタイトルは「はてなダイアリー全文取得」で固定なので、RSSリーダーへの登録時に適宜変更してください。

ただし、このパイプははてなグループでは使えません。コメントの手前でHTMLの切れ目を見つける、汎用的な方法があればいいんですが。

自分のダイアリーのRSSが全文配信かどうかを確認する方法

ところで、自分のダイアリーがRSSに全文を配信しているのかどうか、ご存じない方もいるかもしれません。確認してみましょう。

「日記の公開設定」(http://d.hatena.ne.jp/あなたのユーザーID/configpermission)にある「RSSの公開設定」−「RSSフィードへの全文掲載」欄を見てみましょう。「RSSフィードに全文を掲載しない(要約のみ掲載)」/「RSSフィードに全文を掲載する」という選択肢があります。

個人的には「全文を掲載する」をおすすめしたいです。

パイプはこんな処理をしています

  1. 入力されたURLの末尾に「rss」をつけます。入力されたURLの「http://d.hatena.ne.jp/ユーザーID/」以下になにかついていたら、まずそれを除去します。
  2. 得られた「http://d.hatena.ne.jp/ユーザーID/rss」を「URL Builder」と「Fetch Feed」の各モジュールに素通りさせてRSSフィードとし、その内容を取得します。
  3. フィード内の「item.link」には各記事へのURLが含まれます。そのURLは「日記モード」のダイアリーだと、「http://d.hatena.ne.jp/ユーザーID/日付#p1」というように「#」が区切り文字に使われているので、「Regex」モジュールで「/」に置換します。
  4. 「Loop」モジュールに入り、各記事のURLに対する処理を行います。各記事の個別ページを取得して、その中の「<div class="section">」から「<!-- google_ad_section_end -->」までを日記の本文と考えて取り出し(「Fetch Page」モジュール)、「item.fetch」として出力します。
  5. 「item.fetch.content」には、日記の各記事の本文がHTMLも含めて格納されています。その冒頭から「</h3>」までは個別記事のタイトルなので除去します(ひとつ前ではなくここで処理するのは、日ごとに1エントリのみで、h3要素となる個別の記事タイトルを持たない日記もあるためです)。またブログモードのコメント欄は上に出てきた「<!-- google_ad_section_end -->」の手前にあり、日記にコメントが登録されると内容が変化→再取得、ということになってしまう気がするので、「<p class="sectionfooter">〜</p>」を除去します。これらの除去処理には「Regex」モジュールを使います。
  6. 「item.fetch.content」を「description」に「Rename」し、RSSとして出力します。

既知の問題

ユーザーIDに「_」を含む方のダイアリーは、Yahoo! pipes内でRSSを取得できないようです。本当にそういう問題なのか、また解決方法などありましたらご教示ください。

今後の目標

はてなダイアリーRSSには「今日の一枚」が出力されません。これをうまいこと盛り込めそうなので、方法を考えたいと思います。

参考にした記事

というか、この記事とここで紹介されていた「Pipes: Ameblo Content Allがなかったら、今回のパイプは自分にはとても作れなかったでしょう。感謝感謝です。

パイプがほぼ完成してから見つけたページ。次はお世話になるかも。

ほかに作ったパイプ

以前こんなパイプも作りました。これも手直しすれば、汎用的な言葉をウォッチするパイプにできるかも?

2/4追記

パイプを改良しました。また、新しいパイプも公開しました。

2010年10月追記

こんなパイプも作りました。これはかなりいいです。おすすめです。