Remote rss bestand openen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Niels

Niels

22/11/2009 01:08:00
Quote Anchor link
Hoi,

Ik ben bezig met het schrijven van een script om een rss feed uit te lezen op mijn website. Het probleem is alleen dat ik geen gebruik kan maken van fopen (); omdat ik volgens de instellingen in mijn php.ini geen remote files kan openen.

Nu schijnt er een javascript alternatief te zijn om toch remote files te openen. Weet iemand misschien hoe dit werkt?

Alvast bedankt!
 
PHP hulp

PHP hulp

24/11/2024 11:14:43
 
Toine vd P

Toine vd P

22/11/2009 01:24:00
 

22/11/2009 10:19:00
Quote Anchor link
domdocument.load kan ook van andere server laden. Weet alleen eigenlijk niet of dat werkt als safe mode aanstaat.
Javascript oplossingen zijn niet oké.
 
Niels

Niels

22/11/2009 14:11:00
Quote Anchor link
Ben maar weer aan het experimenteren gegaan. De uitkomst van deze experimenten zijn dat zowel file_get_contents(); als de dom methode beiden geblokkeerd zijn in de php.ini.

Er moet toch een manier zijn?!
 
Bart V B

Bart V B

22/11/2009 14:44:00
Quote Anchor link
Heb je wel simple_xml tot je beschikking?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

    $xml
= simplexml_load_file('http://www.elsevier.nl/web/RSS/Homepage-RSS.htm?output=xml');
  
    echo '<pre>';
    print_r($xml);
     echo '</pre>';

?>
 
Niels

Niels

22/11/2009 14:52:00
Quote Anchor link
Nope, ook niet. Maar ik ben nu bezig met CURL. Gebruik het volgende script:

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
if (function_exists('curl_init')) {
           // initialize a new curl resource
           $ch = curl_init();
        
           // set the url to fetch
           curl_setopt($ch, CURLOPT_URL, $feed_link);
        
           // don't give me the headers just the content
           curl_setopt($ch, CURLOPT_HEADER, 1);
        
           // return the value instead of printing the response to browser
           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        
           // use a user agent to mimic a browser
           curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');
        
           $file_feed = curl_exec($ch);
        
           // remember to always close the session and free all resources
           curl_close($ch);
        } else {
           // curl library is not installed so we better use something else
        }
    
    echo($file_feed);


Probleem is dat hij alle tags verwijderd. Zodat ik met preg_match geen titles, links, PubDates etc kan verkrijgen.

Hoet goede nieuws is wel dat hij 'm wel kan openen. Iemand oplossing om ook tags te laten zien?!
 
Bart V B

Bart V B

22/11/2009 15:08:00
Quote Anchor link
"Nope, ook niet."
Ehm.. Hebben we het over XML of een gewone html pagina?
Geef eens een link van de betreffende RSS feed.
 
Niels

Niels

22/11/2009 15:37:00
Quote Anchor link
Ik bedoel dat mijn hosting die simplexml functie niet accepteerd. Het is een twitter rss file: http://twitter.com/statuses/user_timeline/39709745.rss.

Maar ik heb het probleem opgelost door
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$ch2 = curl_copy_handle($ch);
    $file_feed = curl_exec($ch2);

toe te voegen.

Ik heb nu de inhoud van het bestand in $file_feed. Nu probeer ik de items eruit te halen met preg_match();
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$get_items = preg_match_all("/<item>(.*)<\/item>/", $file_feed, $matches);
echo $matches['0'];

Het resultaat is "Array". Doe ik iets verkeerd?
 
Stefan

Stefan

22/11/2009 16:14:00
Quote Anchor link
Als hij Array als resultaat geeft, zit er nog een array in [0]

Doe eens
echo '<pre>';
print_r $matches;
echo '</pre>';
 
Niels

Niels

22/11/2009 16:31:00
Quote Anchor link
Het resultaat is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
        )

)
 
Stefan

Stefan

22/11/2009 18:29:00
Quote Anchor link
Je arrays zijn dus leeg, zit er dus een fout in the preg_match regex.

De goede regex =

#<item>(.*)<\/\item>#

Dat gerunt op <item>blabla</item> geeft als result:
Array
(
[0] => Array
(
[0] => <item>blabla</item>
)

[1] => Array
(
[0] => blabla
)

Dus dan echo je $var[1][0]
Gewijzigd op 01/01/1970 01:00:00 door Stefan
 

22/11/2009 19:45:00
Quote Anchor link
cURL verwijderd geen tags.
Dat doe je dus ergens zelf.
En je gaat al helemaal niet met preg_* op een xml bestand werken.
 
Niels

Niels

22/11/2009 20:03:00
Quote Anchor link
Goed om het even overzichtelijk te houden: ik heb het .rss bestand dus benaderd en in een string gestopt. Als ik deze string echo is de code uitvoer:
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
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<link/>http://twitter.com/nielsborn
<atom:link rel="self" href="http://twitter.com/statuses/user_timeline/39709745.rss" type="application/rss+xml">
<description>Twitter updates from Niels Born / nielsborn.</description>
<language>en-us</language>
<ttl>40</ttl>
<item>
<description>nielsborn: Super filmpje op: http://bit.ly/2SLLBh Lijst</description>
<pubdate>Wed, 07 Oct 2009 14:49:38 +0000</pubdate>
<guid>http://twitter.com/nielsborn/statuses/4683644158</guid>
<link/>
http://twitter.com/nielsborn/statuses/4683644158
</item>
</atom:link>
</channel>
</rss>


Hoe kan ik deze string ontleden?
Gewijzigd op 01/01/1970 01:00:00 door Niels
 

22/11/2009 20:55:00
Quote Anchor link
Als het goed is staat er nog een bericht in (iig dat zit in dat .rss gedoe).
Maar je hebt dus een xml string terug gekregen dus dan kan je met dom of simplexml aan de slag.
Als je die twee niet tot de beschikking hebt, raad ik je aan om te vragen aan je host om dat aan te zetten, aangezien goede xml support erg belangrijk is. Anders naar een andere host gaan.
 
Niels

Niels

22/11/2009 22:27:00
Quote Anchor link
Ik heb geen kennis van dom of simplexml. En uit de voorbeelden word ik ook niets wijzer. Heeft iemand misschien ervaring met het ontleden van een xml string met dom of simplexml?
 

22/11/2009 22:31: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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php

$string
= <<<XML
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>Twitter / nielsborn</title>
    <link>http://twitter.com/nielsborn</link>
    <atom:link type="application/rss+xml" href="http://twitter.com/statuses/user_timeline/39709745.rss" rel="self"/>
    <description>Twitter updates from Niels Born / nielsborn.</description>
    <language>en-us</language>
    <ttl>40</ttl>
  <item>
    <title>nielsborn: testtesttesttesttest</title>
    <description>nielsborn: testtesttesttesttest</description>
    <pubDate>Sun, 22 Nov 2009 19:08:09 +0000</pubDate>
    <guid>http://twitter.com/nielsborn/statuses/5952620172</guid>
    <link>http://twitter.com/nielsborn/statuses/5952620172</link>
  </item>
  <item>
    <title>nielsborn: Super filmpje op: http://bit.ly/2SLLBh Lijst</title>
    <description>nielsborn: Super filmpje op: http://bit.ly/2SLLBh Lijst</description>
    <pubDate>Wed, 07 Oct 2009 14:49:38 +0000</pubDate>
    <guid>http://twitter.com/nielsborn/statuses/4683644158</guid>
    <link>http://twitter.com/nielsborn/statuses/4683644158</link>
  </item>
  </channel>
</rss>

XML
;

$xml = simplexml_load_string($string);

foreach($xml->channel->item as $item)
{

var_dump($item);
}


var_dump($xml);

?>
 
Niels

Niels

22/11/2009 23:25:00
Quote Anchor link
Sorry maar ik snap niet hoe ik dan de afzonderlijke elementen in mijn output krijg.

De gewenste output is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<a href="$guid" title="$title" class="tweets"><strong><span>$pubDate</span>'.$title.'</strong></a>'


Kun je me nog iets verder op weg helpen?!

EDIT:

Ik heb het eindelijk voor elkaar. De oplossing:

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
function get_tweets(){
    // Editable below
    $feed_link = 'http://twitter.com/statuses/user_timeline/39709745.rss';
    $max_items = '5';
    $max_length = '70';
    
    if (function_exists('curl_init')) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $feed_link);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0');
    
    $ch2 = curl_copy_handle($ch);
    $file_feed = curl_exec($ch2);
    
    curl_close($ch2);
    curl_close($ch);
    } else {
    // curl library is not installed so we better use something else
    }
    
    $xml = simplexml_load_string($file_feed);
    
    $q_items = sizeof($xml->channel->item);
        if($q_items < $max_items){
            $max_items = $q_items;
        }
    
    for ($i = 0; $i < $max_items; $i++){
        $title = $xml->channel->item[$i]->title;
            $title = str_replace('nielsborn: ', '', $title);
            if(strlen($title) > $max_length){
                $title = substr($title, 0, $max_length);
                $title .= '...';
            }
        $description = $xml->channel->item[$i]->description;
            $description = str_replace('nielsborn: ', '', $description);
        $pubDate = $xml->channel->item[$i]->pubDate;
            $pubDate = explode(" ", $pubDate);
            $pubDate[2] = twitter_month($pubDate[2]);
            $date = $pubDate[1].'.'.$pubDate[2].'.'.$pubDate[3];
        $guid = $xml->channel->item[$i]->guid;
        
        echo('<a href="'.$guid.'" title="'.$description.'" target="_blank" class="tweets"><strong><span>'.$date.'</span>'.$title.'</strong></a>');
    }
}


Voor de mensen die me hebben geholpen in deze kwestie: bedankt!
Gewijzigd op 01/01/1970 01:00:00 door Niels
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.