• ベストアンサー

RSS非対応サイトから情報収集

RSS非対応サイトのURLを登録するとHTMLのアンカーが張られている箇所だけ収集して、RSS(XML)に変換しているサイトがありました。 どういう仕組みになっているのか知りたいのです。 URLからHTMLファイルをDLして、http://で始まるパスをマッチングさせて抽出しているのでしょうか。 その場合、PHPとjavascriptを使ってそういうことを作ることは可能なのでしょうか。 似たようなシステムを作られた方がいらっしゃったら 教えてください。

  • PHP
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • rioriost
  • ベストアンサー率100% (4/4)
回答No.2

以前にexpatで試したときには実用的な速度にならなかったため断念しました。某大手サイトのエンジニアの知り合いもPerlの正規表現でやっていると言ってましたし。 1項目の「見出し」と「リンク」だけを抜き出せば良いので、実際にパースする必要があるのはhtml全体の一部分であることが多いですね。例えば、<a href=" ([^"]+)"[^>]*>([^<]+)</a>?(([0-9]{4})/([0-9]{2}/([0-9]{2}))?)でリンクと見出しと日付が拾えますが、これを各サイトのhtmlに合わせていく必要があります。phpの場合、eregとpregがありますが、eregはpregの10倍ぐらい遅いので、pregで。

gincyoko
質問者

お礼

ご丁寧にありがとうございます。 さっそく、教えていただいた内容で やってみようと思います。

その他の回答 (1)

  • rioriost
  • ベストアンサー率100% (4/4)
回答No.1

phpを使って正規表現でhtmlをパースしてます。RSSには変換していませんが、DBに格納しているのでRSSにしようと思えばすぐ出来ますね。

参考URL:
http://rio.st/news_index.php
gincyoko
質問者

補足

何度もすみません。的外れな質問かもしれないのですが、RSSの場合、PHPだとXMLパーサという関数を使ってXMLを解読?読み込んでいると思うのですが、この場合、XMLパーサでHTML文書をパースできるようにすればいいのでしょうか。 具体的にはexpatをHTML対応化にするためエレメントの終了タグの省略を許せばいいのでしょうか。 私の未熟なスキルでの質問なので、意味不明な部分はご指摘下さい。

関連するQ&A

  • RSS配信していないサイトのフィードを取得する方法は?

    WEBサイトにRSSボタンがないサイト(たとえば、NTTのサイトなどhttp://www.ntt-west.co.jp/news/) のフィードを取得する方法はないでしょうか。 http://○○○/▼▼.xmlなどの”URL”で取得したいです。 自分の情報収集のために、WEBページにお気に入RSS情報を表示 させる目的です。 ブラウザやソフトウェアのRSS機能ではなく、私のWEBページに 情報を羅列するサイトを構築しました(PHPで) RSS配信しているサイトは、URLがあるので問題なく表示できているのですが RSS配信していないサイトも表示させたいと考えています よろしくお願いします

    • ベストアンサー
    • PHP
  • magpierssを利用して携帯サイトにRSS情報を表示

    magpierssを利用して携帯サイトにRSS情報を表示 magpierssを利用して携帯サイトにツイッターのつぶやきを表示させたいと思っています。 現時点でサイトにつぶやきを表示するところまでいきましたが、 つぶやき内容に書かれてあるURLを自動リンクにしたいのですが可能でしょうか? 現在は、リンクをクリックすると、PCのツイッターのページへリンクされております。 このリンクではなく、つぶやきにURLが書かれていた場合、そのURLを自動リンクにしたいと思っております。 PHPに関しては知識がないもので、 下記PHP表記も他サイト様に掲載されていた情報を元に作成しました。 rssはssiを利用して読み込んでおります。 -------------------- rss.phpの表記 <?php require_once 'rss_fetch.inc'; require_once 'code_table.ucs2jis'; require_once 'jcode.php'; $url = 'http://twitter.com/statuses/user_timeline/ツイッターID.rss'; $rss = fetch_rss($url); $title = $rss->channel['title']; // 表示する件数の上限 $rss = fetch_rss($url); $rss->items = array_slice($rss->items, 0, 5); //JcodeConvert($str, $from, $to) //0:PASS(無変換)1:EUC-JP 2:Shift_JIS 3:ISO-2022-JP(JIS) 4:UTF-8 $title = JcodeConvert($title, 4, 2); foreach ($rss->items as $item ) { $title = $item[title]; $title = JcodeConvert($title, 4, 2); $url = $item[link]; echo '<dt><a href="'.$url.'">'.$title.'</a></dt>'; } ?> ------------------------------- 読み込むhtmlの表記 <dl> <!--#include virtual="../magpie/rss.php"--> </dl> 色々なサイトを見てみましたが、基本的なPHPの知識がなく、 まったくわからない状態です。 どなたかご教授いただければと思います。よろしくお願いいたします。

    • 締切済み
    • PHP
  • 他のサイト(RSS)を自サイトより出力したい

    現在、複数のrssをyahoopipesを使って合体させて出力しています。 自サイトにそのrssをHTML形式で表示はできているのですが、feedを参照すると、yahoopipesのアドレスになります。 そこで、このyahoopipesのアドレスを、自サイトが出力したかのようにしたいです。 http://pipes.yahoo.com/pipes/pipe.run?_id=**********&_render=rss を http://www.*****.com/feed.rdfやxml等 にしたいです。 なにかcgi・php等のプログラムを介して、自サイトにfeedファイルを出力できるものはないでしょうか。

    • 締切済み
    • PHP
  • RSSはサイトマップの代用になりますか?

    お世話になります。 HPを作成し、xmlファイルでRSSを作成しました。 利用したRSS作成ソフトは、「Fumy RSS & Atom Maker」です。 http://www.nishishi.com/soft/rssmaker/ 作成された 「rss20.xml」は、サイトマップの代わりになるのでしょうか? HPのheader部分には、 <link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="http://(URL名)/rss20.xml" /> と記述しました。 sitemap.xmlファイルを、RSSファイルとは”別に”作成すべきなのですしょうか? 一般的に検索エンジンがサイトをクロールできることを目的としています。 ---- また、もし、ウェブマスターツールに登録しないのであれば、 特に、sitemap.xmlなどは、作成する必要ないのでしょうか? 検索していますと、  インデックス(登録)してもらうためにサイトマップ(XML形式ファイル)を作成して、  「Googleウェブマスターツール」を利用してサイトマップを登録します。 という言い方多いので、saitemapは、ウェブマスターツールを利用するときに必要であって、 単にクロールしてきたときにインデックスしてもらうだけであれば、 sitemap.xmlは特に必要ないのかどうかが理解できません。 よろしくおねがいします。

  • phpのHTMLからのRSS linkタグ抽出

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

  • rss xmlをhtmlで表示させる。

    rss.xmlでつくったxmlファイルをhtmlで表示させたいのですが、 <link rel="alternate" type="application/rss+xml" title="RSS" href="rss/rss.xml" /> あるサイトでxmlファイル+上記のコードを<head>タグ内にいれると表示される。 と、説明が終わっているのですが、コードを打ちこんでも表示されません。 普通に考えて、これだけだとhtmlページ内のbodyのどこにxmlファイルを表示するのかも指定できてません。 質問は 1、xmlファイルが表示されないのは、何らかのコードをbody内に加えて表示する命令が無いからでしょうか。 その場合どのようなコードを打つべきでしょうか。 2、この方法がそもそも根本的に適切でないのでしょうか。 サイトで調べているとjavasqriptまたはphpによるxmlファイルの表示が多く見受けられました。 phpはまだ手が出せないのでjavasqriptの方法を取る場合、どのようなコードを使えばよいでしょうか。 というのも、サイトによってコードが異なるように感じられます。一番一般的であったり、軽くてよいコードなどがあれば教えていただきたいです。 回答よろしくお願いします。

    • 締切済み
    • XML
  • MYRSSのようにHTMLサイトのRSSを出力するには

    今までMYRSSのサービスを利用してHTMLサイトのRSSをつくってきたんですが、 http://myrss.jp/ もっとカスタマイズする項目がほしいので、自分用に簡単にHTMLサイトのRSSを出力できるようなツールがほしいと思っています。 CGIやPHPで再現できないんでしょうか?

  • 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のURLをチェック

    簡単なRSSリーダーを作っています。 フィードを追加するとき、RSSのURLかどうかをチェックしたいのですがどうすればいいのでしょうか? http://www.example.com/ だとダメ(false)で、 http://www.example.com/rss.xml だとOK(true)になるようにしたいのですが。 現在の環境はPHP4です。

    • ベストアンサー
    • PHP
  • 他のサイトのRSSをHTML上に表示したい

    他のサイトから配信されているRSSをHTML上に表示したいのですが、 最低でもタイトル、リンク先、更新時間(年、月、日、時、分、秒まで)の項目で表示できるものはありますか? javascriptでもPHPでもOKです。 ご存知の方いらっしゃいましたらお願いします。

    • ベストアンサー
    • HTML

専門家に質問してみよう