| Server IP : 150.230.34.123 / Your IP : 216.73.217.23 Web Server : LiteSpeed System : Linux amd-instance-20210802-1657 5.15.0-1042-oracle #48~20.04.1-Ubuntu SMP Mon Aug 21 18:27:46 UTC 2023 x86_64 User : ubuntu ( 1001) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /usr/local/lsws/aloysius/html/aloysius_backup/ |
Upload File : |
<?php
class SimpleScraper {
public static function scrape($url) {
$html = self::fetchHtml($url);
if (!$html) {
return false;
}
return self::parseMetaTagsDom($html);
}
private static function fetchHtml($url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
$facebook_agent = 'facebookexternalhit/1.1 (+www.facebook.com)';
curl_setopt($ch, CURLOPT_USERAGENT, $facebook_agent);
$html = curl_exec($ch);
curl_close($ch);
return $html;
}
// Function using DOMDocument for reliable parsing
private static function parseMetaTagsDom($html) {
$data = ['title' => null, 'og_tags' => []];
// Create a new DOMDocument object
$dom = new DOMDocument();
// Suppress HTML5 parsing errors from messy real-world HTML
@$dom->loadHTML($html);
// Use XPath to query the document
$xpath = new DOMXPath($dom);
// 1. Get the Title
$titleNode = $xpath->query('//title');
if ($titleNode->length > 0) {
$data['title'] = trim($titleNode->item()->nodeValue);
}
// 2. Get Open Graph tags using XPath
// Query all meta tags that have a 'property' attribute starting with 'og:'
$ogMetaNodes = $xpath->query('//meta[starts-with(@property, "og:")]');
foreach ($ogMetaNodes as $node) {
$property = str_replace('og:', '', $node->getAttribute('property'));
$content = $node->getAttribute('content');
if ($property === 'image') {
$data['og_tags']['image'][] = $content;
} else {
$data['og_tags'][$property] = $content;
}
}
return $data;
}
}