Я написал сценарий PHP для анализа RSS-канала и попытаюсь получить открытые графические изображения из метатег og: image.Быстрый и эффективный способ извлечения конечного URL-адреса статьи
Для получения изображений мне нужно проверить, являются ли URL-адреса в RSS-канале 301 переадресацией. Это часто происходит, и это означает, что мне нужно следовать любым переадресациям к результирующим URL-адресам. Это означает, что скрипт работает очень медленно. Есть ли более быстрый и эффективный способ достижения этого?
Вот функция для получения окончательного URL:
function curl_get_contents($url) {
$agent= 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result=curl_exec($ch);
return $result;
}
И это функция для получения О.Г. изображения (если они существуют):
function getog($url) {
$doc = new DomDocument();
$doc->loadHTML(curl_get_contents($url));
if($doc == "") {return;}
$xpath = new DOMXPath($doc);
$query = '//*/meta[starts-with(@property, \'og:\')]';
$queryT = '';
$metas = $xpath->query($query);
foreach ($metas as $meta) {
$property = $meta->getAttribute('property');
$content = $meta->getAttribute('content');
if($property == "og:url" && $ogProperty['url'] == "") {$ogProperty['url'] = $content;}
if($property == "og:title" && $ogProperty['title'] == "") {$ogProperty['title'] = $content;}
if($property == "og:image" && $ogProperty['image'] == "") {$ogProperty['image'] = $content;}
}
return $ogProperty;
}
Существует довольно немного больше к сценарию, но эти функции - шея бутылки. Я также кэширую текстовый файл, что означает, что он быстрее после первого запуска.
Как я могу ускорить мой скрипт, чтобы получить окончательный URL-адрес и получить URL-адреса изображений из ссылок в RSS-фиде?
Невозможно ускорить последующие переадресации. Клиент должен сделать новый запрос, и это занимает время, которое требуется. С 'CURLOPT_FOLLOWLOCATION' cURL делает это автоматически уже, поэтому нет смысла, чтобы вы могли вставлять что-нибудь быстрее. – CBroe