2016-12-25 1 views
4

Je suis en train de scrapper des sites Web à l'aide du package FriendsOfPHP/Goutte. Tout fonctionne bien. Je suis en train de gratter les sites pour les balises de graphique ouvert comme image, titre, etc, lorsqu'un utilisateur colle une URL dans une entrée. Le problème se produit lorsqu'un utilisateur copie l'URL à partir d'un périphérique mobile, l'URL est maintenant une URL pour mobile, comme https://m.datpiff.com/tape/818948, et sur cette URL, il n'y a pas de balises de graphique ouvert.Forcer une version de site du bureau lors de la récupération à l'aide de file_get_contents()

Lorsque j'accéder à la même URL et remplacer le sous-domaine m avec www par exemple https://www.datpiff.com/tape/818948 à partir d'un ordinateur de bureau, il me redirige vers: http://www.datpiff.com/Chance-The-Rapper-Jeremih-Merry-Christmas-Lil-Mama-mixtape.818948.html.

et cette URL de bureau contient des balises de graphique ouvert.

Y a-t-il un moyen pour que mon serveur forcer ou tromper le serveur de réception à rediriger toutes les URL vers la version de bureau, afin que je puisse utiliser les balises de graphique ouvertes? Le serveur de réception redirige déjà vers l'URL appropriée, mais uniquement si je tape directement à partir d'un navigateur sur un bureau.

Voici le code que j'utilise - ça marche très bien. Je dois juste être en mesure de rediriger l'URL que je raccroche à la version de bureau.

D'abord, je suis remplaçant le m avec www dans mes js comme ceci:

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

qui convertit https://m.datpiff.com/tape/818948 en https://www.datpiff.com/tape/818948

puis dans mon code PHP j'utilise quelque chose comme ceci:

$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" 'm.'); 'semble être un mauvais appel, en partie parce qu'il va transformer' https: // m.datpiff.com/tape/818948' en 'https: // wwwdatpiff.com/tape/818948' et en partie parce qu'il est va remplacer 'http: // example.com/m.html' dans' http: // example.com/wwwhtml'. – ceejayoz

+0

ceejayoz, mon erreur je remplace 'm' avec 'www', j'ai consolé le journal l'URL et je reçois ce dont j'ai besoin qui est https://www.datpiff.com/tape/818948, anyIdea sur la façon dont Je peux obtenir une réponse à la question originale., Merci – Luna

+0

ceejayoz Je comprends maintenant ce que vous voulez dire, ce que je fais maintenant, est fullurl.replace (": // m.", ": // www.") – Luna

Répondre

0

Vous devez utiliser les cookies pour vous rediriger vers la version desktop:

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

Il est étrange que si vous remplacez m. avec www. ne fonctionne pas. Essayez également d'ajouter l'agent utilisateur du bureau.

0

Sauf si vous avez besoin d'utiliser cette classe client, vous pouvez utiliser file_get_contents() avec DOMDocument (code d'emprunt de this answer) pour obtenir un SimpleXMLElement et appelez SimpleXMLElement::xpath() pour accéder aux balises graphique ouvert.

$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 />'; 
} 

Voir démontré dans this playground example.

0

Vous pouvez configurer votre client pour qu'il suive les réponses de redirection (état HTTP 3XX + en-tête Emplacement). Ajoutez cette ligne après l'instanciation $client:

$client->followRedirects(true); 

Il ne redirige pas les liens mobiles de navigateur de bureau, vous avez encore besoin de remplacer m. avec www.