Randomize externe RSS-Feeds, um in PHP
Frage
Ich bin ein Drittanbieter AJAX Diashow für eine Website verwenden, die einen RSS-Feed als Bildquelle nimmt. Ich möchte die Reihenfolge der Bilder randomisieren, aber das ist kein Merkmal der Diashow (oder den RSS-Feed Ich ziehe aus).
Sicherlich sollte es nicht schwierig sein, eine kurze Funktion in PHP zu schreiben, die einen externen RSS-Feeds nimmt, randomisiert die Elemente und neu veröffentlicht das gleiche Futter ‚out of order‘. Ich kann einfach nicht scheinen, damit es funktioniert.
Lösung
Sind Sie mit DOM XML ? Dann mische nur das Array auf Import.
$xml = new DOMDocument();
$articles = $xml->getElementsByTagName("article");
$data = array();
foreach ($articles as $article) {
data[] = ...
}
shuffle($data);
Andere Tipps
Hier ist ein vollständiges Beispiel von dem, was für mich gearbeitet. Die beiden ersten Antworten nicht aus irgendeinem Grund in meinem Fall arbeiten. Dieser ist sehr ähnlich wie die zweite.
<?php
header("Content-Type: text/xml");
if (isset($_GET["rss"])) {
$url = $_GET["rss"];
randomizeAndDumpRss($url);
}
function randomizeAndDumpRss($url) {
$dom = new DOMDocument;
$dom->load($url);
$channel = $dom->getElementsByTagName('channel')[0];
$items = $channel->getElementsByTagName('item');
$allitems = array();
foreach ($items as $item) {
$allitems[] = $item;
}
foreach ($allitems as $item) {
$channel->removeChild($item);
}
shuffle($allitems);
foreach ($allitems as $item) {
$channel->appendChild($item);
}
print $dom->saveXML();
}
?>
Sie einfach diesen php mit ?rss=rss_url_to_randomize
verwenden.
Was hat funktioniert:
$dom = new DOMDocument;
$dom->load($url);
// Load the <channel> element for this particular feed
$channel = $dom->documentElement->firstChild;
$items = $channel->getElementsByTagName('item');
// duplicate $items as $allitems, since you can't remove child nodes
// as you iterate over a DOMNodeList
$allitems = array();
foreach ($items as $item) {
$allitems[] = $item;
}
// Remove, shuffle, append
foreach ($allitems as $item) {
$channel->removeChild($item);
}
shuffle($allitems);
foreach ($allitems as $item) {
$channel->appendChild($item);
}
print $dom->saveXML();
}
> <?php
$random = rand();
$url = "http://www.gaafilaa.com/index.php/shop/feed/?orderby=rand" . "&v=$random";
$rss = simplexml_load_file($url);
if($rss)
{
$items = $rss->channel->item;
foreach($items as $item)
{
$title = $item->title;
$link = $item->link;
$image = $item->product->image;
echo '<a href="'.$link.'" target="_blank">'.$title.'</a></br>';
echo '<a href="'.$link.'" target="_blank"><img src="'.$image.'" style="width:100%;"/img></a></br>';
echo '............................................</br>';
}
}
?>