Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/06/2011, 11h45   #1
Invité régulier
 
Inscription : mai 2011
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 49
Points : 7
Points : 7
Par défaut récupérer du contenu de site externe

Hello,

Je ne sais pas si vous connaissez evernote, mais l'extension chrome permet de récupérer une page web OU (et c'est le plus intéressant), uniquement l'article !
C'est vraiment impressionnant.

Est-ce qu'il serait possible avec php de récupérer uniquement l'article d'un blog ?

J'ai l'impression qu'il faudrait se servir du div class="blabla, blibli, hentry, blabla"
Mais comment faire ça en php ? quelle est la syntaxe ? sachant qu'il faudrait récupérer du début à la fin de Ce div (qui a hentry comme class), qui doit comporter bien sûr d'autres div...

j'aimerais vraiment vos lumières pour m'aider, car je souhaite le faire sur mon site.

Merci d'avance !
maxence64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 11h51   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
utilise DOMDocument pour parser du HTML
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 22/06/2011, 12h08   #3
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
+1
Par contre, si tu dois parser un site qui sépare ses class avec des virgules, fuit.
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/06/2011, 12h30   #4
Invité régulier
 
Inscription : mai 2011
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 49
Points : 7
Points : 7
Merci pour l'info

J'ai donc fait ça :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<?php
$remote = file_get_contents('http://www.presse-citron.net/prodcast-le-reseau-social-oriente-produits');
 
$doc = new DomDocument();
$file = @$doc->loadHTML($remote);  
$cells = $doc->getElementsByTagName('td');
 
foreach($cells AS $div)
{
    if($div->getAttribute('class') == 'hentry')
    {
 
        echo $div->nodeValue . '<br />';
    }
}
?>
Mais ça ne m'affiche rien
maxence64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 13h18   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
pas besoin de file_get_contents, utilise direct loadHTMLFile, n'utilise pas @ pour supprimer les erreurs, utilise libxml_use_internal_errors

sinon pourquoi cherché les <td> sachant qu'en a pas dans la page ?

pourquoi tu n'utilises pas le RSS du site ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/06/2011, 13h42   #6
Invité régulier
 
Inscription : mai 2011
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 49
Points : 7
Points : 7
ok voici mon nouveau code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<?php
$remote = file_get_contents('http://www.presse-citron.net/prodcast-le-reseau-social-oriente-produits');
$remote = utf8_encode($remote);
$doc = new DomDocument();
$file = $doc->loadHTMLfile($remote);  
$divs = $doc->getElementsByTagName('div');
 
foreach($divs AS $div)
{
    if($div->getAttribute('class') == 'posts')
    {
 
        echo $div->nodeValue . '<br />';
    }
}
?>
mais ça m'affiche ceci :

Citation:
Warning: DOMDocument::loadHTMLFile() [domdocument.loadhtmlfile]: I/O warning : failed to load external entity "<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.d in /home/sochatty/www/test.php on line 25
Je n'utilise pas rss car pour la plupart des sites web je n'aurais que le début du texte.

J'aimerais que ce code marche et je me pose 2 nouvelles questions :
1 - est-ce autorisé de parser le contenue d'un autre site sur son site, sinon ne vaut-il pas mieux un code php qui affiche la page web en question SANS tout autre balise que class = "hentry"
2 - y a-t-il possibilité de faire un if site=presse-citron, afficher le code, else ne pas afficher.

Merci d'avance
notez que je copie/colle des codes trouvés sur le web car perso je n'y entends pas beaucoup en php
maxence64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 13h48   #7
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
lit bien la doc : http://php.net/manual/fr/domdocument.loadhtmlfile.php
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 14h09   #8
Invité régulier
 
Inscription : mai 2011
Messages : 49
Détails du profil
Informations forums :
Inscription : mai 2011
Messages : 49
Points : 7
Points : 7
j'ai beau lire la doc, je ne vois pas l'erreur dans mon code..;
C'est pour ça que je demande votre aide
maxence64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 14h10   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 456
Points : 8 456
Citation:
Envoyé par maxence64 Voir le message
j'ai beau lire la doc, je ne vois pas l'erreur dans mon code..;
C'est pour ça que je demande votre aide
je ne vois pas ce que tu ne comprends pas quand je dis :

Citation:
pas besoin de file_get_contents
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 14h34   #10
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
ou sinon utiliser loadHTML() (qui prend le contenu du HTML pris dans file_get_content()) au lieu de loadHTMLfile() (qui prend le chemin vers le html)

Tout ceci est marqué dans le manuel...

Néanmoins, pourquoi passer par file_get_contents() et loadHTML() alors que loadHTMLfile() fait directement les 2 comme il faut ?
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h35.


 
 
 
 
Partenaires

Hébergement Web