Как улучшить этот код, чтобы file_get_contents извлекал изображения с таких сайтов, как Amazon? - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть этот код как часть плагина, и, хотя он отлично получает информацию с какого-то веб-сайта, существует довольно много сайтов, на которые не попадает указанное изображение, в том числе Amazon.Что мне нужно изменить в коде, чтобы сделать его более удобным для Amazon?

Если честно, я не пытался изменить код, потому что не знал, с чего начать.

function process_link(){

$url = $_POST["url"];

$data = file_get_contents($url);

if(!$data){
    echo "error";
}
$dom = new DomDocument;
@$dom->loadHTML(mb_convert_encoding($data, 'HTML-ENTITIES', 'UTF-8'));

$xpath = new DOMXPath($dom);
$metas = $xpath->query('//*/meta[starts-with(@property, \'og:\')]');

$og = array();

foreach($metas as $meta){
    $property = str_replace('og:', '', $meta->getAttribute('property'));
    $content = $meta->getAttribute('content');
    $og[$property] = $content;
}

$otherMeta = get_meta_tags($url);

if(!array_key_exists("description", $og)){
    if(array_key_exists("description", $otherMeta)){
        $og["description"] = $otherMeta["description"];
    }else{
        $start = strpos($data, '<p>');
        $end = strpos($data, '</p>', $start);
        $og["description"] = strip_tags(substr($data, $start, $end-$start+4));
    }
}
if(!array_key_exists("title", $og)){
    $matches = array();
    if (preg_match("/<title.*?>[\n\r\s]*(.*)[\n\r\s]*<\/title>/", $data, $matches)) {
        $og["title"] = $matches[1];
    }
}
if(!array_key_exists("image", $og)){
    preg_match_all('/<img[^>]+>/i',$data, $result);
    $og["images"] = $result;
}

echo json_encode($og);

exit();

}

Я ожидаю, что изображения будут возвращены, но для некоторых сайтов их просто нет.

...