1

外部のWebサイトからコンテンツを取得して、自分のWebサイトに表示するにはどうすればよいですか?(RSSフィードや他のアグリゲーターが行うことと同様です)。

たとえば、別のWebサイトのカレンダーのアイテムを表示したいとします。

その他のウェブサイト:

<h1>Here's our calendar:</h1>

<div class="calendar_item">
  <h2>Boston Marathon</h2>
  <p class="date">June 23, 2012</p>
  <p class="description">This marathon is 26.2 miles and lots of fun.</p>
</div>

<div class="calendar_item">    
  <h2>Irish Pub Crawl</h2>
  <p class="date">July 17, 2012</p>
  <p class="description">Shamrocks and green things are super-fun.</p>
</div>

<div class="calendar_item">
  <h2>Tim's Birthday</h2>
  <p class="date">August 25, 2012</p>
  <p class="description">It's Tim's birthday, yo.</p>
</div>

私のウェブサイト:

<h1>Here's a feed of some calendar items from someone else's website:</h1>

<div class="event_title">Boston Marathon</div>
<div class="event_date">June 23, 2012</div>
<div class="event_description">This marathon is 26.2 miles and lots of fun.</div>

<div class="event_title">Irish Pub Crawl</div>
<div class="event_date">July 17, 2012</div>
<div class="event_description">Shamrocks and green things are super-fun.</div>

<div class="event_title">Tim's Birthday</div>
<div class="event_date">August 25, 2012</div>
<div class="event_description">It's Tim's birthday, yo.</div>

これが私が試したものです(MAMPを使用):

<?php

$url = "http://example.com";

$page = curl($url);

$pattern = '%
<h2>(.+?)</h2>
%i';

preg_match($pattern,$page,$matches);

print_r($matches);

?>

...これは印刷します:

Array ( )

チュートリアルなど。「cURLを試してみてください」のようなあいまいな回答が含まれていることを確認しました。これはとても単純に思えますが、私は困惑した初心者です。

よろしくお願いします、みんな:)

4

3 に答える 3

3

HTMLの解析に正規表現はお勧めしません。PHP 5+には、以下に示すように使用できるパーサーが付属しています。

$content = file_get_contents('test.html');
$doc = 
<<<DOC
$content
DOC;
$dom = new DOMDocument();
$dom->loadHTML($doc);
$h2Tags = $dom->getElementsByTagName("h2");
$pTags = $dom->getElementsByTagName("p");
foreach($h2Tags as $h2 ) {
    //do something
}

foreach($pTags as $p ) {
if($p->getAttribute("class") == "date") {
    //do something
}

}

$h2のタイプはDOMElementです。DOMNodeを継承します。したがって、nodeValueプロパティを使用して値にアクセスできます。上記の例では、$h2->nodeValueと記述してコンテンツにアクセスできます。

于 2012-05-07T18:34:47.900 に答える
2

このライブラリを試すことができますhttp://simplehtmldom.sourceforge.net/

その後、ちょうど:

foreach($dom->find('p[class=date]' as $p) {
  $date = $p->innertext;
}

これはあなたに次の内容を与えるでしょう

またはあなたはそれをよりグローバルに行い、striposで掘り下げます

foreach($dom->find('p') as $p) {
  if(stripos($p->class, 'date') !== false) {
    //do something
  }
}
于 2012-05-07T18:00:27.797 に答える
0

cURLの使用例を次に示します。

http://tr2.php.net/manual/en/curl.examples-basic.php

適用する前に、データを取得しているかどうかを確認してくださいpreg_match。あなたがいくつかを得るならば、それはあなたの問題を引き起こす正規表現です。

于 2012-05-07T17:58:10.073 に答える