Versio

extern rss-bestand inlezen

Overzicht Reageren

Barman V

Barman V

11/01/2006 13:29:00
Quote Anchor link
Beste allen,

www.emerce.nl heeft een rss bestand met het laatste nieuws. Ik wil automatisch de laatste nieuwsberichten op mijn website hebben. Ik heb al heel het internet nagezocht over hoe ik een extern rss bestand moet uitlezen, maar ik kom er niet uit.
Dit heb ik als code.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<?php
/////////////////////
// cls  = class    //
// p_  = parameter //
// m_  = member    //
// a   = array     //
// n  = numeriek   //
// s  = string     //
// obj  = object   //
/////////////////////


$objErrorHandler = new clsErrorHandler();

define('XML_URL', 'http://www.emerce.nl/rss/hea.rss');

define('SIMPLEXML', 1);
define('DOM', 2);
define('XPATH', 3);

class clsErrorHandler {
  private $m_sError;
  
  function
__construct(){
    error_reporting(E_ALL);
    set_error_handler(array($this, 'errorHandler'));
  }
  
  function
errorHandler($p_nType, $p_sBericht, $p_sBestand, $p_nRegel){
    $p_sError = '';
    $p_sError = '
    <p>
      <span style="font-weight:bold;">Fout ['
.$p_nType.']:</span> '.$p_sBericht.'<br>
      <span style="font-weight:bold;">Regel:</span> '
.$p_nRegel.'
    </p>'
;
    $this->m_sError .= $p_sError;
  }
  
  function
getError(){
    if ($this->m_sError){
      $p_sErrorKader = '';
      $p_sErrorKader = '
      <div style="position:absolute; right:5px; top:5px; width:400px; border:1px solid #000000; padding:2px;">
        <span style="font-size:14px; font-weight:bold; color:#993300;">Fout(en) op deze pagina</span><br>
        '
.$this->m_sError.'
      </div>'
;
      return $p_sErrorKader;
    }
  }
}


class clsLeesXML {
  private $m_nParser = 0;
  
  function
__construct($p_nParser){
    $this->m_nParser   = $p_nParser;
  }
  
  function
laadXML(){
    $p_sInhoud  = '';
    switch ($this->m_nParser){
      case
SIMPLEXML:
        if ($objSimpleXML = simplexml_load_file(XML_URL)){
          foreach ($objSimpleXML->channel->item as $objItem){
            $p_sInhoud .= '
            <a href="'
.$objItem->link.'">'.$objItem->title.'</a><br>';
          }
        }
else {
          $p_sInhoud = 'Kan het XML document niet laden';
        }

      break;
      case
DOM:
        $objDOM     = new DOMDocument();
        if ($objDOM->load(XML_URL)){
          $objRootElement = $objDOM->documentElement;
          $aItemElementen  = $objRootElement->getElementsByTagName('item');
        
          foreach ($aItemElementen as $objHuidigElement){
            $aLinkElementen    = $objHuidigElement->getElementsByTagName('link');
            $aTitleElementen   = $objHuidigElement->getElementsByTagName('title');
            
            foreach ($aLinkElementen as $objItem){
              $p_sInhoud .= '
              <a href="'
.$objItem->textContent.'">';
            }

            foreach ($aTitleElementen as $objItem){
              $p_sInhoud .= $objItem->textContent.'</a><br>';
            }
          }
        }
else {
          $p_sInhoud = 'Kan het XML document niet laden';
        }

      break;
      case
XPATH:
        if ($objSimpleXML = simplexml_load_file(XML_URL)){          
          foreach ($objSimpleXML->XPath('//item') as $objDitItem){
            $p_sInhoud .= '
            <a href="'
.$objDitItem->link.'">'.$objDitItem->title.'</a><br>';
          }
        }
else {
          $p_sInhoud = 'Kan het XML document niet laden';
        }

      break;
      default:

        $p_sInhoud = 'Er is een fout opgetreden bij het selecteren van een XML-parser!';
    }

    return $p_sInhoud;
  }
}


//Titel van het document
$sPagina  = '
<h1>Nieuws vanuit emerce.nl</h1>'
;

//Het ophalen van de nieuwsberichten m.b.v. SimpleXML
$objXML    = new clsLeesXML(SIMPLEXML);
$sPagina  .= '
<h2>Ophalen met behulp van SimpleXML</h2>
'
.$objXML->laadXML().'<br>';

//Het ophalen van de nieuwsberichten m.b.v. DOM
$objXML    = new clsLeesXML(DOM);
$sPagina   .= '
<h2>Ophalen met behulp van DOM</h2>
'
.$objXML->laadXML().'<br>';

//Het ophalen van de nieuwsberichten m.b.v. XPath
$objXML    = new clsLeesXML(XPATH);
$sPagina   .= '
<h2>Ophalen met behulp van Xpath</h2>
'
.$objXML->laadXML();

$sPagina  .= $objErrorHandler->getError();

//het tonen van de opgehaalde nieuwsberichten
echo '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
  <title>XML document uitlezen</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <style type="text/css">
    BODY {
      font-family:Arial, Helvetica, sans-serif;
      font-size:12px;
    }
    H1 {
      font-size:18px;
    }
    H2 {
      font-size:14px;
      margin:2px 0px 0px 0px;
    }
  </style>
  </head>
  <body>
    '
.$sPagina;
    echo '
  </body>
</html>'
;
unset($sPagina);
?>


Als ik dit laad, dan doet hij erg lang met laden en geeft de melding dat 30 seconden zijn overscheden, of hij geeft een 500 error.

Een intern XML bestand kan hij wel uitlezen, maar waarom kan dat dan niet via extern, zoals hierboven?
 
PHP hulp

PHP hulp

24/05/2012 14:56:43
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Eris

Eris

11/01/2006 13:42:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
//define the source of the feed
define(feed,'http://feed.phpnieuws.nl/rss.xml');
//recive file form server
$xml_feed = file_get_contents(feed);
//create a xml phraser
$xml_praser = xml_parser_create();
//tell the vars to the xml phrasers
xml_parse_into_struct($xml_praser,$xml_feed,$xml_keys,$xml_index);
//lets phrase ^^
xml_parser_free($xml_praser);
//generate the headlines
for($i = 0; !empty($xml_index['TITLE'][$i]); $i++){
if($i == 0){
echo '<strong>Headlines van:<a href="'.$xml_keys[$xml_index['LINK'][$i]]['value'].'">PHPnieuws</a></strong><br />';
}
else{

echo '<a href="'.$xml_keys[$xml_index['LINK'][$i]]['value'].'">'.$xml_keys[$xml_index['TITLE'][$i]]['value'].
'</a><br />
'
;
}
}

?>



Volgens mij gaat dit sneller :P
 
Barman V

Barman V

11/01/2006 15:53:00
Quote Anchor link
Grandioos bedankt. Ik ben je eeuwig dankbaar. Het werkt, dus ik kan weer ademhalen.

Wat ik heb ontdekt is dat het op mijn Abyss server niet goed gaat, maar dat het online wel goed gaat.
www.bvveen.com/phphulp.php
Maar mijn host ondersteund geen PHP5, dus kan ik mijn script online niet werkend krijgen.

Is er iemand die wil controleren of mijn bovenstaande script wel werkt? Aan die informatie heb ik namelijk heel veel. Ik wil namelijk verschillende manieren tonen om xml uit te lezen.

Alvast bedankt voor de moeite.
 
Barman V

Barman V

11/01/2006 19:42:00
Quote Anchor link
Zou iemand het script kunnen testen?
Misschien vind je het script wel handig voor het afhandelen van errors en het lezen van xml bestanden.

Ik wil alleen weten of mijn code de juiste is om rss bestanden uit te lezen.
 
Kalle P

Kalle P

11/01/2006 19:46:00
Quote Anchor link
Ik weet niet of ik php5 heb maar ik wil het best uittesten van eris of van jou?
 
Kalle P

Kalle P

11/01/2006 19:49:00
Quote Anchor link
Die van eris werkt bij mij, maar bij die van jou krijg ik een error op regel 21.

+typo+
Gewijzigd op 11/01/2006 19:53:00 door Kalle P
 
Eris

Eris

11/01/2006 19:54:00
Quote Anchor link
Die van mij werkt zeker op php 4.3.x en PHP5 ;)
 
Barman V

Barman V

11/01/2006 20:10:00
Quote Anchor link
Allereerst bedankt voor het testen.
Ja die van Eris werkt bij mij ook. Kalle, ik denk dat jij geen PHP5 hebt, want jij krijgt error bij
private $m_sError;
Dit kan php4 niet lezen, daar is het:
var $m_sError;

Ik wil namelijk ook mijn scriptje sturen naar een bedrijf voor tbv een afstudeerplek, daarom is het zo belangrijk.

Zijn er nog mensen die het kunnen testen met PHP5?
Gewijzigd op 11/01/2006 20:11:00 door Barman V
 
Kalle P

Kalle P

11/01/2006 20:14:00
Quote Anchor link
Graag gedaan, sorry dat ik je niet verder kan helpen.
 
Barman V

Barman V

11/01/2006 20:30:00
Quote Anchor link
Geeft niet :)
Maar dit moet echt getest worden met PHP5, want PHP4 kent geen simpleXML, kan de DOM niet laden en kan dus ook niet met de XPath werken. PHP5 kan dat zeker wel, maar volgens mij staat mijn webserver zo geconfigureerd dat hij geen contact kan maken met een externe server.

Als er nog mensen zijn die willen testen. Heel graag.
 
Eris

Eris

11/01/2006 20:30:00
Quote Anchor link
Het wertk hier wel alleen wel erg langzaam
 
Barman V

Barman V

11/01/2006 20:43:00
Quote Anchor link
THX. Ik zal de resultaten opsturen. Hij is langzaam omdat hij 3x de nieuwsberichten ophaalt.

Het resultaat van de SAX manier is te zien op:
http://www.bvveen.com/emerce.php

Ik heb maar alles omgebouwd, zodat het werkt met PHP4. Hij doet het nu niet met de DOM, SIMPLEXML en XPath helaas. Maar wel met SAX.
 



Overzicht Reageren