2016-12-25 10 views
4

Я очищаю веб-сайты, используя пакет FriendsOfPHP/Goutte. Все отлично работает. Я очищаю сайты для открытых графических меток, таких как image, название и т. Д., Когда пользователь вставляет URL-адрес во вход.Принудительно использовать настольную версию сайта при очистке с помощью file_get_contents()

Проблема возникает, когда пользователь копирует URL-адрес с мобильного устройства, URL-адрес теперь является мобильным URL-адресом, например https://m.datpiff.com/tape/818948, и на этом URL-адресе нет открытых графических меток.

Когда доступ к той же URL и заменить суб-домен м с WWW например, https://www.datpiff.com/tape/818948 с рабочего стола, он перенаправляет меня на: http://www.datpiff.com/Chance-The-Rapper-Jeremih-Merry-Christmas-Lil-Mama-mixtape.818948.html.

, и этот URL-адрес рабочего стола содержит метки открытого графика.

Есть ли способ заставить мой сервер принудительно или обмануть принимающий сервер для перенаправления всех URL-адресов на настольную версию, чтобы я мог использовать открытые теги? Получающий сервер уже перенаправляет правильный URL-адрес, но только если я набираю текст непосредственно из браузера на рабочем столе.

Вот код, который я использую - он отлично работает. Мне просто нужно перенаправить URL-адрес, который я соскабливаю на настольную версию.

Сначала я заменить м с WWW в моих JS так:

fullurl.replace('m.',"www"); 

, который преобразует https://m.datpiff.com/tape/818948 в https://www.datpiff.com/tape/818948

тогда в моем PHP кода я использую что-то вроде этого:

$url_to_scrape = $urltoscrape; 
    $client = new Client(); 

    // Go to the example.com website 
    $crawler = $client->request('GET', $url_to_scrape); 


    $opengraphImage =$crawler->filterXpath('//meta[@property="og:image"]')->attr('content'); 
    $title = $crawler->filter('title')->text(); 
+2

'fullurl.replace («WWW»«м.»); 'похоже на плохой вызов, отчасти потому, что он превратит' https: // m.datpiff.com/tape/818948' в 'https: // wwwdatpiff.com/tape/818948' и частично потому, что это заменив 'http: // example.com/m.html' на' http: // example.com/wwwhtml'. – ceejayoz

+0

ceejayoz, моя ошибка я заменяю 'm' на 'www', я утешил log url, и я возвращаю то, что мне нужно, это https://www.datpiff.com/tape/818948, anyIdea о том, как я могу получить ответ на исходный вопрос. Спасибо, – Luna

+0

ceejayoz Я понимаю, что вы имеете в виду, что я сейчас делаю, это fullurl.replace (": // m.", ": // www.") – Luna

ответ

0

Вам необходимо передать куки для перенаправления на настольную версию:

name value  domain   path 
mredir 0 .www.datpiff.com /

Странно, что если вы замените m. с www. не работает. Попробуйте добавить пользовательский агент.

0

Если Вы не должны использовать этот класс Client, вы можете использовать file_get_contents() вместе с DOMDocument (кодом заимствования из this answer), чтобы получить SimpleXMLElement и вызвать SimpleXMLElement::xpath() для доступа к открытой метке графа.

$url = 'https://www.datpiff.com/tape/818948'; 
$html = file_get_contents($url); 
print substr(htmlspecialchars($contents),0,400).'<br />'; 
$doc = new DOMDocument(); 
//suppress errors when loading html 
@$doc->loadHTML($html); 
$xml = simplexml_import_dom($doc); 

$images = $xml->xpath('//meta[@property="og:image"]'); 
if (sizeof($images)) { 
    $opengraphImage = (string)$images[0]['content']; 
    echo 'opengraph image: '.$opengraphImage.'<br /><br />'; 
} 
$titles = $xml->xpath('//title'); 
if (sizeof($titles)) { 
    $title = (string)$titles[0]; 
    echo 'title: '.$title.'<br />'; 
} 

См. Это продемонстрировано в this playground example.

0

Вы можете настроить для своего клиента следующие ответы на перенаправление (статус HTTP 3XX + заголовок местоположения). Добавьте эту строку после инстанцировании $client:

$client->followRedirects(true); 

Это не перенаправляет мобильные ссылки из настольного браузера, так что вам еще нужно заменить m. с www.