2010-09-15 4 views
2

J'ai ce projet, je travaille sur et jaimerais ajouter une liste vraiment petit de lieux à proximité en utilisant POSITIONS Facebooks dans une iframe vedette de touch.facebook.com je peux facilement juste utilisez touch.facebook.com/#/places_friends.php mais ensuite cela charge les en-têtes et les autres barres de navigation pour des messes similaires, des ectes d'événements et je veux juste le contenu. Je suis assez sûr de regarder la source de touch.facebook.com/#/places_friends.php, tout ce que j'ai besoin de charger est le div "content" Quoi qu'il en soit, je suis extrêmement nouveau pour PHP et im assez sûr Ce que je pense que je suis en train de faire est appelé grattage Web. Par souci de comprendre les choses sur stackoverflow et ne pas avoir à s'inquiéter de l'authentification ou quelque chose encore je veux charger la page de connexion pour voir si je peux au moins obtenir le scrapper pour fonctionner. Une fois que j'ai un code de grattage, je suis sûr que je peux gérer le reste. Il a tout charger à l'intérieur de la div. J'ai déjà vu ça avant, donc je sais que c'est possible. et il ressemblera exactement à ce que vous voyez quand vous essayez de vous connecter à touch.facebook.com mais sans le logo facebook bleu en haut et c'est ce que j'essaie d'accomplir ici.Essayer de gratter le contenu entier d'un div

Alors, voici la page de connexion, im essayant de charger la div qui contient les zones de texte pour ouvrir une session sur le bouton de connexion réelle. Si c'est fait correctement, nous devrions juste voir ceux qui n'ont pas de barre d'en-tête Facebook flou dessus.

J'ai essayé

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

tout ce qui ne se charge une page blanche.

J'ai aussi essayé d'utiliser http://simplehtmldom.sourceforge.net/

et i modifié l'exemple sélecteur de base à

<?php 
include('../simple_html_dom.php'); 

$html = file_get_html('http://touch.facebook.com/login.php'); 

foreach($html->find('div#login_form') as $e) 
    echo $e->nodeValue; 

?> 

J'ai aussi essayé

<?php 
$stream = "http://touch.facebook.com/login.php"; 
$cnt = simplexml_load_file($stream); 

$result = $cnt->xpath("/html/body/div[@id=login_form]"); 

for($i = 0; $i < $i < count($result); $i++){ 
    echo $result[$i]; 
} 
?> 

qui ne fonctionne pas non plus

+1

J'imagine que ces données sont disponibles dans JSON via l'API Graph de FB, ce qui vous évite le scraping. Avez-vous vérifié les documents de l'API pour le moment? – Gordon

+0

J'y ai pensé, mais je suis vraiment fou de comprendre cette idée. Je l'ai déjà vu et j'ai vraiment aimé le résultat. – brybam

Répondre

0

Im en supposant que vous ne pouvez pas utiliser l'API facebook, si vous le pouvez, alors je vous suggère fortement de l'utiliser, parce que vous vous sauver de toute l'affaire à la casse.

à la ferraille texte la meilleure technologie utilise XPath, si le code html retourné par touch.facebook.com est xhtml de transition, qu'il Sould, la vous devez utiliser XPath, un échantillon devrait ressembler à ceci:

$stream = "http://touch.facebook.com"; 
$cnt = simplexml_load_file($stream); 

$result = $nct->xpath("/html/body/div[@id=content]"); 

for ($i = 0; $i < $i < count($result); $i++){ 
    echo $result[$i]; 
} 
+0

ce que vous dites est logique. J'ai changé quelques fautes de frappe et espaces, mais j'ai cette erreur Erreur d'analyse: erreur de syntaxe, inattendu '<' sur la ligne 7. Je ne suis pas vraiment sûr de ce qui se passe dans cette partie pour vraiment faire des ajustements. – brybam

0

Vous devez vous renseigner sur vos opérateurs de comparaison

=== est-pour comparer strictement, vous devriez être en utilisant ==

if ($div->getAttribute('id') == 'login_form') 
{ 

} 
1
$stream = "http://touch.facebook.com"; 
$cnt = simplexml_load_file($stream); 

$result = $nct->xpath("/html/body/div[@id=content]"); 

for ($i = 0; $i < count($result); $i++){ 
    echo $result[$i]; 
} 

il y avait une erreur de syntaxe dans cette ligne je l'ai enlevé maintenant il suffit de copier-coller et exécuter ce code

Questions connexes