純粋なPHPを使用して外部WebサイトからDIVを取得したい。
外部ウェブサイト: http://www.isitdownrightnow.com/youtube.com.html
Isitdownrightnowから必要なDivテキスト(statusup div):<div class="statusup">The website is probably down just for you...</div>
すでにfile_get_contents
をDOMDocument
とstr_get_html
で試しましたが、動作させることができませんでした。
例えばこれ
$page = file_get_contents('http://css-tricks.com/forums/topic/jquery-selector-div-variable/');
$doc = new DOMDocument();
$doc->loadHTML($page);
$divs = $doc->getElementsByTagName('div');
foreach($divs as $div) {
// Loop through the DIVs looking for one withan id of "content"
// Then echo out its contents (pardon the pun)
if ($div->getAttribute('class') === 'bbp-template-notice') {
echo $div->nodeValue;
}
}
コンソールにエラーを表示するだけです:
リソースの読み込みに失敗しました:サーバーはステータス500(内部サーバーエラー)で応答しました
これは私がいつも使用するものです:
$url = 'https://somedomain.com/somesite/';
$content = file_get_contents($url);
$first_step = explode( '<div id="thediv">' , $content );
$second_step = explode("</div>" , $first_step[1] );
echo $second_step[0];
これは少しやり過ぎかもしれませんが、要点はわかります。
<?php
$doc = new DOMDocument;
// We don't want to bother with white spaces
$doc->preserveWhiteSpace = false;
// Most HTML Developers are chimps and produce invalid markup...
$doc->strictErrorChecking = false;
$doc->recover = true;
$doc->loadHTMLFile('http://www.isitdownrightnow.com/check.php?domain=youtube.com');
$xpath = new DOMXPath($doc);
$query = "//div[@class='statusup']";
$entries = $xpath->query($query);
var_dump($entries->item(0)->textContent);
?>
@mightyuhuによって提案されたxpathメソッドを使用し、彼が割り当てを追加することでうまく機能しました。情報を取得するWebページと、取得するタグを識別する「id」または「class」の可用性に応じて、使用するクエリを変更する必要があります。タグに「id」が割り当てられている場合、これを使用できます(サンプルはUSDの為替レートを抽出するためのものです)。
_$query = "//div[@id='USD']";
_
ただし、サイト開発者は私たちにとってそれほど簡単なものではないので、私の例では、さらにいくつかの「名前のない」タグを掘る必要があります。
_<div id="USD" class="tab">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>Ask Rate</td>
<td align="right">1.77400</td>
</tr>
<tr class="even">
<td>Bid Rate</td>
<td align="right">1.70370</td>
</tr>
<tr>
<td>BNB Fixing</td>
<td align="right">1.735740</td>
</tr>
</tbody>
</table>
</div>
_
そのため、クエリを変更して「Ask Rate」を取得する必要がありました。
_$doc->loadHTMLFile('http://www.fibank.bg/en');
$xpath = new DOMXPath($doc);
$query = "//div[@id='USD']/table/tbody/tr/td";
_
したがって、上記のクエリを使用しましたが、itemを0ではなく1に変更して、為替レートがある2番目の列を取得しました(最初の列には「Ask Rate」というテキストが含まれています):
_$entries = $xpath->query($query);
$usdrate = $entries->item(1)->textContent;
_
別の方法は、クエリ内で直接値を参照することです。名前またはスタイルがない場合は、タグのインデックス付けを行う必要があります。これは、Maxthonブラウザおよびその「Inspect element」機能「Copy XPath」右メニューオプション(ニート、ええ?):
_"//*[@id="USD"]/table/tbody/tr[1]/td[2]"
_
_//
_の後にアスタリスク(*)も挿入していることに注意してください。この場合、他の値はないため、item(0)
を使用して値を再度取得する必要があります。
必要に応じて、抽出した文字列に変更を加えることができます。たとえば、好みに合わせて数値形式を変更できます。
_$usdrate = number_format($usdrate, 5, ',', ' ');
_
上記の答えを見つけたので、誰かがこれを助けてくれることを望み、正しいクエリと構文を探す時間をこの誰かに与えてくれます。