我正在尝试制作一个脚本,每次运行时都会显示随机饮料配方。
我发现有几个网站有这个,并在页面刷新时显示随机配方,但其中一些需要3-4秒加载,我试图避免这种情况。
所以我找到了这个网站:http://www.shotdrinks.com/p/recipes/…它没有"显示随机食谱"的功能。然而,这个网站上的每个食谱都有编号,所以它们可以通过在url末尾添加1到11000之间的任何数字来"调用"。外汇。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中。所以我试着"隔离"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);
但是我不能让这个工作,它只是输出一个空数组。
我做错了什么?这是"正确"的做法吗?
可以这样使用DOMDocument
:
$doc = new DOMDocument;
$doc->loadHTMLFile('http://example.org/path/to/data');
$ingredients = $doc->getElementsByClassName('rIngredients');
echo $doc->saveHTML($ingredients);
自5.3.6起增加了->saveHTML()
的可选参数;另一种方法是使用->saveXML($ingredients)
。