我正在尝试为我的API获取Instagram的Embed页面的HTML代码,但是它返回了一个奇怪的错误,我不知道现在该怎么做,因为我是PHP新手。该代码可在其他网站上使用。
我已经在apple.com等其他网站上尝试过,奇怪的是,当我在“普通”帖子页面上调用此函数时,它起作用了,该错误仅在我在“ / embed” URL上调用时出现
这是我的PHP代码:
<?php
if (isset($_GET['url'])) {
$filename = $_GET['url'];
$file = file_get_contents($filename);
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($file);
libxml_use_internal_errors(false);
$bodies = $dom->getElementsByTagName('body');
assert($bodies->length === 1);
$body = $bodies->item(0);
for ($i = 0; $i < $body->children->length; $i++) {
$body->remove($body->children->item($i));
}
$stringbody = $dom->saveHTML($body);
echo $stringbody;
}
?>
我这样调用API:
https://api.com/get-website-body.php?url=http://instagr.am/p/BoLVWplBVFb/embed
我的目标是获得网站的正文,例如当我在https://apple.com URL上调用此代码时。
答案 0 :(得分:0)
如果使用CURL及其比file_get_content更快的速度,则可以使用直接url抓取数据。这是不同网址的curl代码,这将单独删除正文数据。
if (isset($_GET['url'])) {
// $website_url = 'https://www.instagram.com/instagram/?__a=1';
// $website_url = 'https://apple.com';
// $website_url = $_GET['url'];
$website_url = 'http://instagr.am/p/BoLVWplBVFb/embed';
$curl = curl_init();
//curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_URL, $website_url);
curl_setopt($curl, CURLOPT_REFERER, $website_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0(Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/66.0');
$str = curl_exec($curl);
curl_close($curl);
$json = json_decode($str, true);
print_r($str); // Just taking tha page as it is
// Taking body part alone and play as your wish
$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML($str);
libxml_use_internal_errors(false);
$bodies = $dom->getElementsByTagName('body');
foreach ($bodies as $key => $value) {
print_r($value);// You will all content of body here
}
}
注意:在这里您不想使用https://api.com/get-website-body.php?url=....