• 締切済み

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

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

noname#172236
noname#172236

みんなの回答

回答No.2

>汎用的な取得方法を教えてほしいのです。 もう#1でその答えを書いてるけど見えないの?

noname#172236
質問者

お礼

-

noname#172236
質問者

補足

見えねぇよ

回答No.1

なんでそんなので正規表現使うの? DOM知らないの?

noname#172236
質問者

補足

>なんでそんなので正規表現使うの? rssの<link>タグの記入方法が人によってバラバラだから めんどくさいので正規表現でまとめて取得しようとした。 title="RSS"とか書いている人がいたり、rssのデータの拡張子が記載されてなかったり、当然rssのバージョンもバラバラだから。 汎用的な取得方法を教えてほしいのです。

関連するQ&A

  • RSSリーダーに表示させないようにするには?

    FC2でブログをやろうと思うのですが、RSSリーダーに表示させないように出来ますでしょうか。 素人考えでスキンの <link rel="alternate" type="application/rss+xml" href="<%url>?xml" title="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
  • 人気blogランキングにpingを送信してもRSSが反映されません

    他のランキングサイト(FC2など)で認識しているRSSが人気blogランキングだけ認識してくれません。どなたかわかる方がいましたら教えてください。 RSSのURLはhttp://anime-max.net/rss.xmlです。 トップページのソースには<link rel="alternate" type="application/rss+xml" title="RSS" href="http://anime-max.net/rss.xml">と記入しています。 よろしくお願いします。

    • ベストアンサー
    • XML
  • RSS2.0の書き方

    自分のHPのRSSフィード(RSS2.0)を書いたのですが、RSSリーダー(RSSリーダーは既にある前提)で何故か読めません。どこが悪いのか、御指摘いただければ幸いです。 ・RSSフィード名:rss.xml(rss.txtで下記のものを作成して、utf-8に変換してから、拡張子を.txt -> .xmlに変更) ・TOPのHTMLファイルのheadタグ内に以下を記述して、RSSフィードの置いてある場所を指定 : <link rel="alternate" type="application/rss+xml" title="RSS" href="[RSSフィードのあるアドレス]" /> ・RSSフィードの内容: <?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xml:lang="ja"> <channel> <title>[サイトのタイトル]</title> <link>[サイトのアドレス]</link> <description>[サイトの紹介、説明文]</description> <language>ja</language> <item> <title>[エントリーのタイトル]</title> <link>[エントリーのアドレス]<link> <guid isPermaLink="true">[エントリーのアドレス]</guid> <category>[エントリーのカテゴリー]</category> <pubDate>[作成日時]</pubDate> <description><[エントリーの紹介文]></description> </item> </channel> </rss> (注)[作成日時]は、Wed, 10 Mar 2010 23:32:13 +0900 のように記述しています。 以上なのですが、何が駄目なのでしょうか? よろしくお願い致します。

    • 締切済み
    • XML
  • preg_match_all関数でaタグの属性を

    PHPのpreg_match_all関数でaタグの属性hrefの値だけをすべて取得するにはどうしたらよいでしょう?? 正規表現の部分が分かりません。 お願いします。

    • ベストアンサー
    • PHP
  • PHPでXMLから正規表現で特定の要素を抜き出しているんですが‥。

    このようなXMLがあったとします。 sample.xml ---------------------------- <rss> <xml> <title>タイトル</title> <link>ttp://xxx.jp/</link> </xml> </rss> ---------------------------- ここから <xml> ~ </xml> の部分だけを抜き出すのですが、 $data = file_get_contents("sample.xml"); preg_match_all("|<xml>((?:(?!</xml>).)*)</xml>|si", $data, $matchs); で、$matchs[1] の中に <xml> ~ </xml> の部分が配列で入っています。 この『((?:(?!</xml>).)*)』の部分の意味がよく分かりません。 これは先輩から教えてもらった構文ですが、先輩に聞いても詳しい意味を知らないそうです。 『? ! . *』の意味は理解しているけど『:』は参考書でもよく分かりませんでした。 ネットを少し検索したけどこの取得構文の解説が見つからないため質問します。 simpleXML のようなクラスを使わずに、他にも正規表現で XML から要素を取得できる簡単な方法をご存知の方がいましたらどうか教えてください。 急ぎではありませんのでよろしくお願いします。

    • ベストアンサー
    • 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
  • PHPでHTMLソースから特定のURLを抽出したい

    PHPで外部サイトのHTMLソース内の特定のURLを取得するにはどうすればいいでしょうか? 具体的には楽天市場の個別商品ページのHTMLソースにあるレビューページのURLを抽出したいと思っています。 ttp://item.rakuten.co.jp/asagao/332/のHTMLソースから レビューページのURLのttp://review.rakuten.co.jp/item/1/229861_10000050/1.1/を取得するようなプログラムを作りたいと思っています。 自力で頑張ってみたもののPHP初心者のため、preg_matchや正規表現でお手上げ状態になってしましました。 プログラムのソースコードを教えていただけると助かります。 ご回答よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP 正規表現改行したい

    preg_match でHTMLタグを解析するために正規表現を組んでますが、正規表現部分が長すぎてソースがわかりづらいので機能に影響すること無く改行して見やすくする方法はありますか? もしくはHTMLのパースならこうした方がいいよ的アドバイスでも

    • ベストアンサー
    • PHP
  • preg_matchで指定ファイルのタグを抽出?

    preg_matchを使って指定したファイルのタグを抽出するにはどうしたらいいのでしょうか? 例えば、 <title>●●</title> の●●を抜き出すにはどうすれば良いのでしょうか? ご回答よろしくお願いいたします。

    • 締切済み
    • PHP