1

実行するたびにランダムな飲み物のレシピを表示するスクリプトを作成しようとしています。

これがあり、ページが更新されたときにランダムなレシピを表示するサイトをいくつか見つけましたが、ロードに3〜4秒かかるサイトもあり、それを避けようとしています.

だから私はこのサイトを見つけました:http://www.shotdrinks.com/p/recipes/ ...これには「ランダムレシピを表示する」機能がありません。ただし、このサイトのすべてのレシピには番号が付けられているため、URL の末尾に 1 から 11000 までの任意の番号を追加して「呼び出す」ことができます。Fx。http://www.shotdrinks.com/p/recipes/4000 .

そのため、このコードを使用して、実行するたびにランダムなレシピを表示しています。

$min=1;
$max=11000;
$number=rand($min,$max);
$link = file_get_html("http://www.shotdrinks.com/p/recipes/$number");

ただし、これはメニューなどを含むページ全体を表示します。必要なのは、ヘッダー、グラスの種類、材料、および混合方向だけです。これらは異なる div、fx にあります。成分は「rIngredients」という div id にあります。だから私はdivを「分離」するためにこれを試しました:

$link = file_get_contents("http://www.shotdrinks.com/p/recipes/$number");
$file = strip_tags($link, "<div>");
preg_match_all("#<div class=\"rIngredients\">(?:[^<]*)<\/div>#i", $file, $content);
print_r($content); 

しかし、これを機能させることはできません。空の配列を出力するだけです。

私は何を間違っていますか?そして、これはこのようなことをする「正しい」方法ですか?

4

1 に答える 1

2

次のように使用できますDOMDocument

$doc = new DOMDocument;
$doc->loadHTMLFile('http://example.org/path/to/data');

$ingredients = $doc->getElementsByClassName('rIngredients');

echo $doc->saveHTML($ingredients);

オプションの引数 to->saveHTML()が 5.3.6 から追加されました。代わりに を使用することもできます->saveXML($ingredients)

于 2013-06-03T07:47:57.833 に答える