Xml Feed

Ερωτήσεις και απαντήσεις σχετικές με την HTML, XHTML και την κατασκευή σελίδων για το Web.

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
mavros
Δημοσιεύσεις: 86
Εγγραφή: 08 Οκτ 2003 03:47

Xml Feed

Δημοσίευση από mavros » 02 Ιουν 2005 03:12

Πως γίνετε ρε παιδιά να παίρνω κάποια δεδομένα με αυτό τον τρόπο ;Τι είναι αυτό και πως "δουλεύετε"

Σε πολλά site και εδώ στο freestuff (αν δεν κάνω λάθος) έχω δει αυτό το xml feed

Χρειάζετε βάσεις δεδομέων;

Λίγη βοήθεια δεν μπορώ να καταλάβω τίποτα
:oops: :oops: :oops: :oops:

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

Xml Feed

Δημοσίευση από ThyClub » 02 Ιουν 2005 07:29

Για να το δημιουργήσεις είναι βασικό να υπάρχει μια βάση δεδομένων. Αν απλά θέλεις να χρησιμοποιήσεις ενα feed για την σελίδα σου τότε το μόνο που χρειάζεται είναι μια script γλώσσα (PHP,java,javascript and so on...)

mavros
Δημοσιεύσεις: 86
Εγγραφή: 08 Οκτ 2003 03:47

Xml Feed

Δημοσίευση από mavros » 02 Ιουν 2005 14:33

Ακρτιβώς το 2ο Thy αλλά πως γίνετε;
Αν μπορείς να γράψεις κάτι παραπάνω

Αντε και μετά ο Cordis θα το βάλει στα βοηθήματα :wink:

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

Xml Feed

Δημοσίευση από ThyClub » 02 Ιουν 2005 19:20

Λοιπόν θα σου παραθέσω 4 αρχεία που εγώ χρησιμοποιώ στο ZeusCMS.

Αυτά τα αρχεία μπορούν να εμφανίσουν τα περιεχόμενα ενός feed με 2 τρόπους.

Ο ένας είναι ο κλασσικός. Απλό parsing του αρχείου και δημιουργία HTML κώδικα:

1ος τρόπος:

Αρχείο 1.

Κώδικας: Επιλογή όλων

<?php
function aggregation&#40;$maxitems, $rdf_file&#41;&#123;
	include&#40;"rdf_parser_class.php"&#41;;
	
	$f = new RDFParser&#40;&#41;;
	$f->setResource&#40;$rdf_file&#41;;
	$f->parseResource&#40;&#41;;
	$f_channel = $f->getChannelInfo&#40;&#41;;
	$f_items = $f->getItems&#40;&#41;;
	
	for &#40;$x=0; $x<$maxItems; $x++&#41;&#123;
		if &#40;is_array&#40;$f_items&#91;$x&#93;&#41;&#41;&#123;
			// print data
			$item = $f_items&#91;$x&#93;;
			echo"
		<span class=\"rssLink\">
		<a href=" . $item&#91;"link"&#93; . ">" . $item&#91;"title"&#93; ."</a>
		</span>
		<span class=\"rssDescription\">
		".$item&#91;"description"&#93;."
		</span>
		";
		&#125;
	&#125;
&#125;

aggregation&#40;"10","articles.rdf"&#41;;
?>
Αρχείο 2.

Κώδικας: Επιλογή όλων

<?php 
class RDFParser &#123;
	
	var $currentTag ="";
	var $flag = "";
	var $count = 0;
	var $channel = array&#40;&#41;;
	var $items = array&#40;&#41;;
	
	
	function setResource&#40;$file&#41;&#123;
		$this->file = $file;
	&#125;
	
	function parseResource&#40;&#41;&#123;
		// create parser
		$this->xp = xml_parser_create&#40;&#41;;
		// set object reference
		xml_set_object&#40;$this->xp, $this&#41;;
		// set handlers and parser options
		xml_set_element_handler&#40;$this->xp, "elementBegin", "elementEnd"&#41;;
		xml_set_character_data_handler&#40;$this->xp, "characterData"&#41;;
		xml_parser_set_option&#40;$this->xp, XML_OPTION_CASE_FOLDING, TRUE&#41;;
		xml_parser_set_option&#40;$this->xp, XML_OPTION_SKIP_WHITE, TRUE&#41;; // read XML file
		if &#40;!&#40;$fp = fopen&#40;$this->file, "r"&#41;&#41;&#41;&#123;
			die&#40;"Could not read $this->file"&#41;;
		&#125; // parse data
		while &#40;$xml = fread&#40;$fp, 4096&#41;&#41;&#123;
			if &#40;!xml_parse&#40;$this->xp, $xml, feof&#40;$fp&#41;&#41;&#41;&#123;
				die&#40;"XML parser error&#58; " . xml_error_string&#40;xml_get_error_code&#40;$this->xp&#41;&#41;&#41;;
			&#125;
		&#125; // destroy parser
		xml_parser_free&#40;$this->xp&#41;;
	&#125; // opening tag handler
	function elementBegin&#40;$parser, $name, $attributes&#41;&#123;
		$this->currentTag = $name; // set flag if entering <channel> or <item> block
		if &#40;$name == "ITEM"&#41;&#123;
			$this->flag = 1;
		&#125;
		elseif&#40;$name == "CHANNEL"&#41;&#123;
			$this->flag =2;
		&#125;
	&#125;
	// closing tag handler
	function elementEnd&#40;$parser, $name&#41;&#123;
		$this->currentTag = "";
		// set flag if exiting <channel> or <item> block
		if &#40;$name == "ITEM"&#41;&#123;
			$this->count++;
			$this->flag = 0;
		&#125;
		elseif&#40;$name == "CHANNEL"&#41;&#123;
			$this->flag = 0;
		&#125;
	&#125; // character data handler
	function characterData&#40;$parser, $data&#41;&#123;
		$data = trim&#40;htmlspecialchars&#40;$data&#41;&#41;;
		if&#40;$this->currentTag == "TITLE" || $this->currentTag == "LINK" || $this->currentTag =="DESCRIPTION"&#41;&#123;
			// add data to $channels&#91;&#93; or $items&#91;&#93; array
			if &#40;$this->flag == 1&#41;&#123;
				$this->items&#91;$this->count&#93;&#91;strtolower&#40;$this->currentTag&#41;&#93; .= $data;
			&#125;
			elseif&#40;$this->flag== 2&#41;&#123;
				$this->channel&#91;strtolower&#40;$this->currentTag&#41;&#93; .= $data;
			&#125;
		&#125;
	&#125; // return an associative array containing channel information
	// &#40;the $channel&#91;&#93; array&#41;
	function getChannelInfo&#40;&#41;&#123;
		return $this->channel;
	&#125; // return an associative array of arrays containing item information
	// &#40;the $items&#91;&#93; array&#41;
	function getItems&#40;&#41;&#123;
		return $this->items;
	&#125;
&#125;
?>
Εδώ η πρώτη function με την βοήθεια της κλάσης RDFParser απλά διαβάζει το αρχείο (feed) και δημιουργεί τα επιμέρους στοιχεία σε μορφή table.

2ος τρόπος:

Αρχείο 1.

Κώδικας: Επιλογή όλων

<?php
function parseRDFbyXSL&#40;$rdf_file&#41;&#123;
// XML file
// this needs to be a local file 
$xml = "$rdf_file";
// XSLT file 
$xslt = "fm.xsl";
// create a new XSLT processor 
$xp = xslt_create&#40;&#41;; 
// transform the XML file as per the XSLT stylesheet 
// return the result to $result 
$result = xslt_process&#40;$xp, $xml, $xslt&#41;;
if &#40;$result&#41; &#123;
// print it echo $result; 
&#125; 
// clean up 
xslt_free&#40;$xp&#41;; 
&#125;
?>
Αρχείο 2.

Κώδικας: Επιλογή όλων

<?xml version="1.0"?>
<xsl&#58;stylesheet xmlns&#58;xsl="http&#58;//www.w3.org/1999/XSL/Transform" xmlns&#58;rdf="http&#58;//www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns&#58;rss="http&#58;//purl.org/rss/1.0/" xmlns&#58;dc="http&#58;//purl.org/dc/elements/1.1/"
version="1.0">
<!-- main page -->
<xsl&#58;template match="/rdf&#58;RDF">
<html>
<head>
<basefont face="Arial" size="2"/>
</head>
<body>
<xsl&#58;apply-templates
select="rss&#58;channel" />
<ul>
<xsl&#58;apply-templates select="rss&#58;item" />
</ul>
</body>
</html>
</xsl&#58;template>
<!-- channel -->
<xsl&#58;template match="rss&#58;channel">
<b>
<a>
<xsl&#58;attribute name="href">
<xsl&#58;value-of select="rss&#58;link" />
</xsl&#58;attribute>
<xsl&#58;value-of select="rss&#58;title" />
</a>
</b>
</xsl&#58;template>
<!-- item -->
<xsl&#58;template match="rss&#58;item">
<li />
<a>
<xsl&#58;attribute name="href">
<xsl&#58;value-of select="rss&#58;link"/>
</xsl&#58;attribute>
<xsl&#58;value-of select="rss&#58;title" />
</a>
<br />
<xsl&#58;value-of select="rss&#58;description" />
</xsl&#58;template>
</xsl&#58;stylesheet>
Εδώ με την βοήθεια της XSL το αρχείο εμφανίζεται στην σελίδα. Είναι ο καλύτερος τρόπος αλλά απαιτεί PHP5

Μπορείς να τσεκάρεις τον κώδικα και να ρωτήσεις ξανά. Παραθέτω και τα αρχεία.
Συνημμένα
backend.zip
Όλα τα παραπάνω αρχεία.
(2.18 KiB) Μεταφορτώθηκε 235 φορές

mavros
Δημοσιεύσεις: 86
Εγγραφή: 08 Οκτ 2003 03:47

Xml Feed

Δημοσίευση από mavros » 02 Ιουν 2005 19:37

10000000000000000000000000000000000000 ευχαριστώ

Δούλος σου! :o :o :o :o :o :o :o :o :o :o :o

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Xml Feed

Δημοσίευση από skeftomilos » 03 Ιουν 2005 11:55

Ωραίος! ThyClub τον έγραψες μόνος σου όλο αυτό τον κώδικα;
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

Xml Feed

Δημοσίευση από ThyClub » 04 Ιουν 2005 12:14

Το περισσότερο είναι snipets που βρήκα στο νετ. Απο κεί και πέρα έκοψα & έραψα και βγήκε αυτό που βλέπεις.

Το έχω στο zeuscms.gr και δουλεύει πολύ καλά. :wink:

Απάντηση

Επιστροφή στο “HTML και XHTML”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες