web-dev-qa-db-fra.com

Possible de ne charger que des divisions spécifiques d'un site Web?

J'ai ce projet sur lequel je travaille et j'aime bien ajouter une très petite liste d'endroits à proximité utilisant les emplacements de Facebook dans une fonctionnalité iframe de touch.facebook.com. Je peux facilement utiliser touch.facebook.com/#places.php mais cela charge les barres du haut.

Quoi qu'il en soit, y a-t-il un moyen de manipuler l'URL pour qu'il ne charge que le contenu des espaces au lieu d'avoir les barres de menus supérieure et inférieure. Après avoir examiné le code, il semble y avoir un div id="content". Je pensais qu'il y avait peut-être un moyen de créer l'URL pour qu'il ne charge que cette div? J'ai aussi essayé de créer une URL qui pourrait bien passer au contenu en utilisant touch.facebook.com/#places.php#content, mais apparemment de cette façon, touch.facebook.com a été construit et ne fonctionne pas.

Je préférerais vraiment trouver un moyen de ne charger que la section de contenu.

Je suis allé de l'avant et essayé cette approche en PHP. J'ai lu les exemples pour file_get_contents et ce qui se passe ici semble bien, d'après l'exemple 1:

<?php
$page = file_get_contents('http://touch.facebook.com');
$doc = new DOMDocument();
$doc->loadHTML($page);
$divs = $doc->getElementsByTagName('div');
foreach($divs as $div) {
      if ($div->getAttribute('id') === 'content') {
         echo $div->nodeValue;
    }
}
?>

Mais, je reçois une page complètement blanche.

6
brybam

Vous ne pourrez pas manipuler l'URL pour obtenir seulement une partie de la page. Donc, ce que vous voudrez faire est de récupérer le contenu de la page via le langage côté serveur de votre choix, puis d'analyser le code HTML. À partir de là, vous pouvez saisir le fichier DIV que vous recherchez et l'imprimer à l'écran. Vous pouvez également utiliser pour supprimer le contenu indésirable.

Avec PHP, vous pouvez utiliser file_get_contents() pour lire le fichier que vous souhaitez analyser, puis utiliser DOMDocument pour l’analyser et récupérer le fichier DIV souhaité.

Voici l'idée de base. Ceci n’a pas été testé mais devrait vous orienter dans la bonne direction:

$page = file_get_contents('http://touch.facebook.com');
$doc = new DOMDocument();
$doc->loadHTML($page);
$divs = $doc->getElementsByTagName('div');
foreach($divs as $div) {
    // Loop through the DIVs looking for one withan id of "content"
    // Then echo out its contents (pardon the pun)
    if ($div->getAttribute('id') === 'content') {
         echo $div->nodeValue;
    }
}
3
John Conde

D'après d'autres réponses, je comprends que vous souhaitiez en obtenir au-delà de la page d'authentification.

Eh bien, vous devez d'abord vous connecter, puis accéder à la page dont vous avez besoin et enfin traiter l'itération DOM.

Curl est une option qui permet de gérer les demandes, donc connectez-vous. Vous pouvez également utiliser curl pour obtenir le contenu des pages.

http://php.net/manual/en/book.curl.php

http://devzone.zend.com/article/1081

0
Dave

La page à laquelle vous essayez d'accéder requiert une authentification. Vous étiez probablement en train de regarder les données que vous vouliez après votre connexion. C'est la raison pour laquelle, lorsque vous essayez de gratter la page par programmation, elle affiche le contenu de la page de connexion.

Au lieu d'utiliser cette approche, vous pouvez vérifier si les informations dont vous avez besoin peuvent être extraites par programme à l'aide de API de Facebook

Sur une note connexe, vous pouvez utiliser YQL pour récupérer une partie d’une page Web sur un site public. Toutefois, dans votre cas, il se peut que cela ne fonctionne pas car la page à laquelle vous essayez d'accéder nécessite une authentification.

0
mvark