मैं वर्तमान में मैगपाई आरएसएस का उपयोग कर रहा हूं लेकिन यह कभी-कभी तब खत्म हो जाता है जब आरएसएस या एटम फ़ीड अच्छी तरह से नहीं बनता है। क्या PHP के साथ RSS और एटम फ़ीड को पार्स करने के लिए कोई अन्य विकल्प हैं?
मैं वर्तमान में मैगपाई आरएसएस का उपयोग कर रहा हूं लेकिन यह कभी-कभी तब खत्म हो जाता है जब आरएसएस या एटम फ़ीड अच्छी तरह से नहीं बनता है। क्या PHP के साथ RSS और एटम फ़ीड को पार्स करने के लिए कोई अन्य विकल्प हैं?
जवाबों:
आपके अन्य विकल्पों में शामिल हैं:
मैंने हमेशा XML दस्तावेज़ों को पार्स करने के लिए PHP में निर्मित SimpleXML फ़ंक्शन का उपयोग किया है । यह उन कुछ सामान्य पार्सरों में से एक है जिनके पास इसके लिए एक सहज संरचना है, जो RSS फ़ीड जैसी किसी विशिष्ट चीज़ के लिए एक सार्थक वर्ग बनाने में बेहद आसान बनाता है। इसके अतिरिक्त, यह XML चेतावनियों और त्रुटियों का पता लगाएगा, और इसे ढूंढने और इसे फिर से प्रयास करने के लिए आप किसी भी स्रोत को HTML साफ-सुथरा (जैसा कि ceejayoz उल्लेख किया गया है) के माध्यम से चला सकते हैं।
SimpleXML का उपयोग करते हुए बहुत ही मोटे, सरल वर्ग पर विचार करें:
class BlogPost
{
var $date;
var $ts;
var $link;
var $title;
var $text;
}
class BlogFeed
{
var $posts = array();
function __construct($file_or_url)
{
$file_or_url = $this->resolveFile($file_or_url);
if (!($x = simplexml_load_file($file_or_url)))
return;
foreach ($x->channel->item as $item)
{
$post = new BlogPost();
$post->date = (string) $item->pubDate;
$post->ts = strtotime($item->pubDate);
$post->link = (string) $item->link;
$post->title = (string) $item->title;
$post->text = (string) $item->description;
// Create summary as a shortened body and remove images,
// extraneous line breaks, etc.
$post->summary = $this->summarizeText($post->text);
$this->posts[] = $post;
}
}
private function resolveFile($file_or_url) {
if (!preg_match('|^https?:|', $file_or_url))
$feed_uri = $_SERVER['DOCUMENT_ROOT'] .'/shared/xml/'. $file_or_url;
else
$feed_uri = $file_or_url;
return $feed_uri;
}
private function summarizeText($summary) {
$summary = strip_tags($summary);
// Truncate summary line to 100 characters
$max_len = 100;
if (strlen($summary) > $max_len)
$summary = substr($summary, 0, $max_len) . '...';
return $summary;
}
}
$feed_uri = $feed_or_url;
के लिए $feed_uri = $file_or_url;
है कि तुलना में ... अन्य, इस कोड के लिए धन्यवाद! यह बहुत अच्छा काम करता है!
4 लाइनों के साथ, मैं एक आरएस को एक सरणी में आयात करता हूं।
$feed = implode(file('http://yourdomains.com/feed.rss'));
$xml = simplexml_load_string($feed);
$json = json_encode($xml);
$array = json_decode($json,TRUE);
अधिक जटिल समाधान के लिए
$feed = new DOMDocument();
$feed->load('file.rss');
$json = array();
$json['title'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
$json['description'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('description')->item(0)->firstChild->nodeValue;
$json['link'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('link')->item(0)->firstChild->nodeValue;
$items = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('item');
$json['item'] = array();
$i = 0;
foreach($items as $key => $item) {
$title = $item->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
$description = $item->getElementsByTagName('description')->item(0)->firstChild->nodeValue;
$pubDate = $item->getElementsByTagName('pubDate')->item(0)->firstChild->nodeValue;
$guid = $item->getElementsByTagName('guid')->item(0)->firstChild->nodeValue;
$json['item'][$key]['title'] = $title;
$json['item'][$key]['description'] = $description;
$json['item'][$key]['pubdate'] = $pubDate;
$json['item'][$key]['guid'] = $guid;
}
echo json_encode($json);
$feed = file_get_contents('http://yourdomains.com/feed.rss');
फाइल +
मैं RSS को सरल स्क्रिप्ट देना चाहूंगा:
$i = 0; // counter
$url = "http://www.banki.ru/xml/news.rss"; // url to parse
$rss = simplexml_load_file($url); // XML parser
// RSS items loop
print '<h2><img style="vertical-align: middle;" src="'.$rss->channel->image->url.'" /> '.$rss->channel->title.'</h2>'; // channel title + img with src
foreach($rss->channel->item as $item) {
if ($i < 10) { // parse only 10 items
print '<a href="'.$item->link.'">'.$item->title.'</a><br />';
}
$i++;
}
यदि फ़ीड अच्छी तरह से बनाई गई XML नहीं है, तो आपको इसे अस्वीकार करना चाहिए, कोई अपवाद नहीं। आप फ़ीड निर्माता को एक बोझा के हकदार हैं ।
अन्यथा आप HTML को समाप्त करने के लिए गड़बड़ कर रहे हैं।
मैं Google रीडर फ़ीड को पार्स करने के लिए SimplePie का उपयोग करता हूं और यह बहुत अच्छी तरह से काम करता है और इसमें एक सभ्य फीचर सेट है।
बेशक, मैंने इसे गैर-अच्छी तरह से गठित आरएसएस / एटम फ़ीड के साथ परीक्षण नहीं किया है, इसलिए मुझे नहीं पता कि यह उन लोगों के साथ कैसे मुकाबला करता है, मैं मान रहा हूं कि Google काफी मानक अनुरूप हैं! :)
PHP RSS रीडर - http://www.scriptol.com/rss/rss-reader.php - एक पूर्ण लेकिन सरल पार्सर है जिसका उपयोग हजार उपयोगकर्ता करते हैं ...
एक और महान मुफ्त पार्सर - http://bncscripts.com/free-php-rss-parser/ यह बहुत हल्का (केवल 3 केबी) और उपयोग करने के लिए सरल है!