RSSからブログの本文を抽出する方法と問題点

このQ&Aのポイント
  • 以前、RSSからブログの本文を抽出する方法について質問をしましたが、特定のブログのRSSでは問題が発生しました。
  • リンクやタイトルは取得できるが、本文が記述されている要素のデータを取得できず、空白となってしまいます。
  • 他のブログのRSSでは成功したので、特定のブログの仕様に問題がある可能性があるかもしれません。
回答を見る
  • ベストアンサー

RSSからblog(ブログ)の本文を抽出 特定のブログのRSSにて…

以前、「RSSからblog(ブログ)の本文を抽出したい」という質問をした者です。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1677591 以前ご教授いただいた方法でプログラムを作り、 javaのDOMを使ってRSSからブログの本文を抽出することができましたが、 (参考:http://www.hellohiro.com/xmldom.htm HelloWorldDOMPageList.java) 特定のブログのRSSからは本文のデータを取得することができませんでした。 例えば、exiteやFC2などのブログのRSSからはデータを取得することができませんでした。 リンクや、タイトルなどは問題なく取得できるのですが、 本文が記述されている要素(例えば、exiteならdescription,FC2ならcontent:encoded) 内のデータを取得しようとすると、プログラムの結果として、 何も取得できずに、空白となってしまいます。 ライブドアやヤフーなど他のブログのRSSでは成功したのですが… 何か問題があるのでしょうか? よろしくお願いします。

  • shows
  • お礼率96% (48/50)
  • XML
  • 回答数2
  • ありがとう数9

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>何か問題があるのでしょうか? 何が問題で片方で取れて片方で取れないのか ちょっとよくはわからないのですが、 とりあえず NodeList contentList = element.getElementsByTagName("content:encoded"); Element contentElement = (Element)contentList.item(0); String content = contentElement.getTextContent(); のようにgetTextContentを使ってみるとうまくいきました。

shows
質問者

お礼

再びありがとうございます。 上記の方法で取得することができました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>何も取得できずに、空白となってしまいます。 の原因は、 ライブドアなどが <content:encoded><![CDATA[ になっているのに対し、うまくいかない方は <content:encoded> <![CDATA[… のように別の行になっていることが原因ですね。 改行が1つ入っているためにCDATAセクションの前にテキストノードが1つできていて、 content:encodedの最初のノードの内容を取り出すと空行しかないので値が取れないということだと思います。 対処としては#1でいいと思います。

shows
質問者

お礼

分かりやすい説明ありがとうございます。 よく理解することができました。

関連するQ&A

  • RSSからblog(ブログ)の本文を抽出したい

    RSSからblogの本文を抽出するプログラムを 作りたいと思っています。 例えば、以下のようなRSSに対して (省略部分があります。) <?xml version="1.0" encoding="UTF-8" ?> - <rdf:RDF xmlns:rdf="http://~> + <channel rdf:about="http://~"> - <item rdf:about="http://blog.livedoor.jp/~"> <title>ショッピング</title> <link>http://blog.livedoor.jp/~</link> <description>今日はとてもいい天気だったので…</description> <dc:creator>shows</dc:creator> <dc:date>2005-09-24T22:00:21+09:00</dc:date> <dc:subject>ブログ</dc:subject> - <content:encoded>  - <![CDATA[   <a href="http://image.blog.livedoor~">   </a>今日はいい天気だったので、<br>   ショッピングに出かけました<br>   <br>     本文略   <br>   新しいibookが欲しいなぁ~<br>  ]]> </content:encoded> </item> (以降略) <content:encoded>のCDATAセクションの中の、 今日はいい天気だったので ~ 新しいibookが欲しいなぁ~ までがブログの本文なのでこれを抽出したいと思っています。 そこで、現在ではjavaを使ってDOMで抽出しようと試みているのですが、 こちらのサイト http://www.hellohiro.com/xmldom.htm のHelloWorldDOMPageList.javaを参考にしてプログラムを作ったのですが、 title,link,descriptionの抽出は出来ましたが、 ブログ本文が記述されている、 <content:encoded> or <![CDATA[ 内の要素(データ)を取得できません。 どのような方法(プログラム)をすれば取得できるようになるでしょうか? よろしくお願いします。

    • ベストアンサー
    • XML
  • RSSからblogデータの抽出(直接URLを入力して)

    以前、「RSSからblog(ブログ)の本文を抽出したい」の質問にて、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1677591 回答を参考に、RSSからblogのタイトル・リンク・本文を 抽出するプログラムを作成させていただきました。 ところで、このプログラムは、参考サイトの http://www.hellohiro.com/xmldom.htm HelloWorldDOMPageList.javaを参考に作成したのですが、 このプログラムでは、参考サイトのプログラム中 // パースを実行してDocumentオブジェクトを取得 Document doc = builder.parse(new File("site.xml")); // ルート要素を取得(タグ名:site) Element root = doc.getDocumentElement(); System.out.println("ルート要素のタグ名:" + root.getTagName()); … にもあるように、対象となるXML(私の場合はRSS)を保存して、 そのファイルに対してプログラムを実行しています。 今回は、RSSからblog(ブログ)のタイトル・リンク・本文を抽出する際に、 対象となるRSSを一度、site.xmlなどにXML形式で保存して、 そのファイルに対してプログラムを実行するのではなく、 プログラム中でRSSのURLを入力して、 それに対してプログラムを実行できるようにしたいです。 例えば、RSSが、http://blog.livedoor.jp/example/index.rdfだとしたら、 プログラム中でこのURLを直接入力するようにして、プログラムを実行させたいです。 そのためにはどのようにプログラムを作成すればいいでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • RSSからblogデータの抽出(プログラムにURLを記述して)

    先日、RSSからblogデータの抽出(直接URLを入力して)の質問をしたものです。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1719152 前回の質問では、参考サイトの(http://www.hellohiro.com/xmldom.htm) HelloWorldDOMPageList.javaを参考にして作った RSSからブログのデータを取得するプログラムでは、 // パースを実行してDocumentオブジェクトを取得 Document doc = builder.parse(new File("site.xml")); // ルート要素を取得(タグ名:site) Element root = doc.getDocumentElement(); System.out.println("ルート要素のタグ名:" + root.getTagName()); … のように、RSSからblog(ブログ)のタイトル・リンク・本文を抽出する際に、 対象となるRSSを一度、site.xmlなどにXML形式で保存して、 そのファイルに対してプログラムを実行していたので、 これを、プログラム実行時にRSSのURLを直接入力するようにして、プログラムを実行する方法を教えていただきました。 今回の質問は、プログラム実行時にURLを入力するのではなく、 プログラム中にRSSのURLを記述してプログラムを実行させたいです。例えば、 Document doc = builder.parse(new File("site.xml")); の部分を以下のような感じにして、RSSのURLに直接パースを実行して、 Documentオブジェクトを取得させたいです。 Document doc = "http://blog.livedoor.jp/example/index.rdf"; ただ、上記の書き方では当然プログラムが動かないので、 どのようにプログラムを書けばいいのか教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • RSS取得について

    今シーサーブログとFC2ブログでブログを作っているのですが、 シーサーの方にはRSS取得と言うのがあってそこにRSSのURLを入れるだけでいいのですがFC2ブログにはそういう機能はないようです。 ここでFC2などのこういう機能の付いていないブログでRSSを取得して表示するにはどうすればいいのでしょうか? またRSS取得のHTMLなども教えていただきたいです。 よろしくお願いします。

  • blogのRSSデータよりtitleとdateの取得を・・・

    RSSデータよりtitleとdateの取得を取得し、別ページに表示したいと考えています。 以前内容自体を表示させるものは、お手伝いいただきできるようになったのですが、titleなどを取得する事ができませんでした・・・ (以下がRSSより本文を取得して、表示するPHPコードの質問となります。) http://okwave.jp/kotaeru.php3?q=2053985 上記コードでtitle,dateを取得して、表示したいと考えています。 素人考えだと、$contents=$root->getElementsByTagName("encoded"); の部分で本文を取得しているので、これを$contents=$root->getElementsByTagName("title");などとして、取得できないかと試したのですが、うまくいきませんでした・・・ titleとdateの取得をして表示するコード・・・アドバイスでもいいですのでご教授の方お願い致します。

    • ベストアンサー
    • PHP
  • ブログの記事を過去にさかのぼり抽出したい

    はじめて質問をしますよろしくお願いします。 ブログの記事を過去にさかのぼり本文のみを抽出したいのですが、なにかよいほう法はないでしょうか? RSSリーダーでは最近の記事しか吸い上げてくれないようですので 過去の記事もすべて抽出するほう法がありましたら、教えてください 視覚障害者の友人が音声読みあげソフトで読みあげやすいように加工したデータを作りたいのです よろしくお願いします。

  • ブログのRSSをウェブサイトで表示させたい

    ブログのRSSをウェブサイトで表示させたい こんにちは。 spryを使ってブログのRSSをウェブサイトで表示させています。 今は <title>や<description>を新着情報として表示しているのですが、画像やリンクも表示したいと思い<content:encoded>の中身の利用を考えています。 試しに<content:encoded>を表示させたら画像やリンクのHTMLがそのまま表示されてしまいました。 HTMLとして?(画像やリンクが)表示されるようにするにはどうすればいいのでしょうか。 下にHTMLがそのまま表示されてしまったデータを記載します。 ------------------------------------------------------------ <head> <script type="text/javascript"> <!-- var updata = new Spry.Data.XMLDataSet("RSSのアドレス", "rdf:RDF/item"); //--> </script> </head> <body> <div spry:region="updata" id="updata"> <div spry:repeat ="updata"> <p>{updata::title}</p> <p>{updata::content:encoded}</p> </div> </div> </div> ------------------------------------------------------------

  • ブログのHTMLから本文を抽出したい

    いつもお世話になっています。 ブログのHTMLから本文を抽出したいと思っています。 ヤプログを例にとると、ヤプログのHTMLは以下のようになっています。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> … <!-- entry --> …  <td class="entry_title">  <h3>タイトル<span class="date">2005年10月29日(土)</span></h3> … <td class="entry_text"> … <div class="entry_layer"><div style="text-align: center;"> <img src="/cafe_life/img/25/cafe67.jpg" border="0"> </div> <br> 今日はとてもいい天気だったので、<br> 渋谷に買い物に行きました。<br> … <br> 新しいiMacが欲しいなぁ~<br> <br> </div> … <!-- entry --> … </html> そこで、本文を抽出するのに、 <td class="entry_text"> から<!-- entry -->までをHTMLから抽出し、 さらにそれに対してタグを除去するようにしてブログの本文の 「今日はとてもいい天気だったので、  渋谷に買い物に行きました。  …  新しいiMacが欲しいなぁ~」 を抽出させたいと思っています。 このようにするにはプログラムをどのように作成すればよいでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • phpのHTMLからのRSS linkタグ抽出

    こんにちは phpを使ってrssを配信している サイトのhtmlデータを取得し、 rssのリンクが書いてある<link>タグを抽出しようとしています。 preg_matchなどを使った抽出の時に使っている正規表現は一応、 |.*<link rel=[\"\']alternate[\"\'](.*rss.*xml.*)?>|s なのですが、上記のrss xmlという文字列の順序や、 rssのバージョンを考えずに取得できる方法、 タグ内の他の属性値、属性値の順序など、 人によって書き方が異なり、 取得が難しいです。 これ以外の、より簡単な取得方法や、抽出におけるよい正規表現を知っておられる方、 どうか抽出方法を教えていただけませんでしょうか?

  • ブログのRSS閲覧の疑問

    ブログのアクセスレポートを時々見ていると、以前はブログ本文の閲覧が95%だったのですが、最近はRSSの閲覧も50%ほどに増えてきました。 その中で気になったのは1日6時間も10分おきに私のブログのRSSを閲覧している事実があることです。 1日8時間のときもあります。 これは何をしているのでしょうか? その目的は? ご存知の方おられますでしょうか?