Kijken of het een FEED is

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Harmen

Harmen

24/06/2008 13:59:00
Quote Anchor link
Hoi,

ik ben al een tijdje bezig met het het maken van een script waarbij ik kan kijken of een bestand een xml-feed is of niet.
Eerst probeerde ik te kijken naar de content-type van een bestand, of die text/xml, application/rss+xml, application/rdf+xml of application/atom+xm is. Dit lukte opzich wel, totdat ik erachter kwam dat de feed van wikipedia text/html is. Als ik text/html toe zou staan, dan zouden alle htmlpagina's ook een "xml-feed" zijn.

Dus nu probeer ik het zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
// ...
if(!@simplexml_load_file($_GET['url'])){
    echo 'Fout';
}

else{
    echo 'Goed';
}

// ...
?>

Dit is lelijke code, én het werkt niet goed. Namelijk, de feed van wikipedia is "niet goedgekeurd":
http://zjapske.no-ip.org/hoppelblog/validateAjax.php?url=http://en.wikipedia.org/w/index.php?title=Special:RecentChanges&feed=atom

De feed van phphulp weer wel:
http://zjapske.no-ip.org/hoppelblog/validateAjax.php?url=http://www.phphulp.nl/feeds/php_forum.php

En een gewoon php-bestand is ook "goedgekeurd":
http://zjapske.no-ip.org/hoppelblog/validateAjax.php?url=http://blog.netvibes.com/

Weet iemand een betere manier om te controleren of een bestand een xml-bestand is?
Gewijzigd op 01/01/1970 01:00:00 door Harmen
 
PHP hulp

PHP hulp

19/04/2024 06:24:43
 
Aron K

Aron K

24/06/2008 14:03:00
Quote Anchor link
Ik weet zo niet precies waar een feed specifiek aan te herkennen is, maar is het niet mogelijk om te kijken of bepaalde strings in het bestand voorkomen die alleen in feeds zitten?
 
Riemer

Riemer

24/06/2008 14:13:00
Quote Anchor link
Je zou het simpel kunnen checken of iets een XML bestand is door te kijken of het volgende aan het begin staat:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?xml version="1.0" ?>


Daarna kun je kijken of het een valid xml bestand is door te kijken of alle items worden afgesloten en in de correcte volgorde.

RSS kun je checken of de RSS tag na de xml tag komt.
Verder specifeert RSS aardig wat vaste tags waar je ook altijd nog op kan checken, bekijk de specificatie anders Hier
 
Douwe

Douwe

24/06/2008 14:14:00
Quote Anchor link
Hoezo Wikipedia-feed fout?:
http://zjapske.no-ip.org/hoppelblog/validateAjax.php?url=http%3A%2F%2Fen.wikipedia.org%2Fw%2Findex.php%3Ftitle%3DSpecial%3ARecentChanges%26feed%3Datom

Waarschijnlijk zie je het al, maar de URL die je meegeeft moet nog ge-urlencode() worden ;)

Anders ziet PHP 'validateAjax.php?url=http://en.wikipedia.org/w/index.php?title=Special:RecentChanges&feed=atom' zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$_GET['url'] = "http://en.wikipedia.org/w/index.php?title=Special:RecentChanges";
$_GET['feed'] = "atom";

En dat werkt dus niet.

- edit -
Zoals je zelf ook al zegt, xml != feed, dan kun je dus (zoals degene voor mij zegt) kijken naar feed-specifieke tags, zoals
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<?xml version="1.0"?>
<rss version="2.0">
Gewijzigd op 01/01/1970 01:00:00 door Douwe
 
Harmen

Harmen

24/06/2008 14:16:00
Quote Anchor link
@Aron
Wel een goed idee... maar volgens mij nog wel lastig. In elk soort bestand kan <item> staan zeg maar.

Ik doe het denk ik toch met het kijken naar de content-type. Een zichzelfrespecterende feed heeft normaal gesproken niet een content-type van text/html.

Edit:

woops, niet op vernieuwen geklikt.. eerst eensch die 2 latere berichten lezen


@Riemer
Ik kan idd op
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?xml version="1.0" ?>
gaan controleren. Daarvan weet ik zeker dat dat in het bestand staat. Bedankt verder :)

@Douwe M
Je hebt gelijk, maar nog steeds zegtie dat een php-bestand een xml-bestand is.

LAATSTE EDIT:
Kan ik er vanuit gaan dat elke RSS-feed een <rss /> tag heeft? Naast de "gewone RSS" heb je ook nog ATOM, RDF etc., en die hebben een andere structuur
Gewijzigd op 01/01/1970 01:00:00 door Harmen
 
Riemer

Riemer

24/06/2008 14:46:00
Quote Anchor link
Nee harmen, aangezien de specificatie zegt dat een RSS bestand met <rss> en eindigt met </rss>
de <rss /> is, zover dat ik weet, geen standaard van de specificatie.

Voor een voorbeeld bestandje volgens de 2.0 spec Klik hier
 
Harmen

Harmen

24/06/2008 14:53:00
Quote Anchor link
Riemer, kijk eens in de broncode van deze atom-feed:
http://en.wikipedia.org/w/index.php?title=Special:RecentChanges&feed=atom

Die heeft niet een <rss /> maar een <feed />... En er zijn nog wel meerdere verschillen in feeds.
 
Riemer

Riemer

24/06/2008 14:58:00
Quote Anchor link
Dat is dus een Atom feed, die dus ook een ander specificatie volgt dan de RSS.

Misschien dat ik je eerst wat verkeerd heb begrepen, maar om wat duidelijkheid te krijgen: welke feeds wil je allemaal zien als valid volgens je script? zoek dan die specificaties op en kijk naar tags waarop je kan checken.

Of je kan het wat losser doen en misschien simpel weg kijken of het een xml bestand is, dit is volledig jouw keuze.
 
Harmen

Harmen

24/06/2008 15:03:00
Quote Anchor link
Ik denk dat ik dat laatste doe, gewoon kijken of het een xmlbestand is.

Hartelijk dank. En misschien voor de volgende die een regular expression moet voor dit "probleem":
$pattern = "@\<\?xml[[:space:]].*[[:space:]]\?\>@i";
 
Hipska BE

Hipska BE

24/06/2008 15:25:00
Quote Anchor link
Xhtml is ook een XML bestand ...
 
Riemer

Riemer

24/06/2008 15:46:00
Quote Anchor link
Klopt, het is ook eigenlijk hoever je met zulke dingen wilt gaan. Wil je stricter validatie, zul je er dieper in moeten graven.
 
Harmen

Harmen

24/06/2008 15:55:00
Quote Anchor link
Niet over nagedacht... xhtml bestanden met een xml-declaratie gaan nu dus ook gewoon door...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
...

Volgens mij moet ik nog maar een regexp maken.
Gewijzigd op 01/01/1970 01:00:00 door Harmen
 



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.