আমি বর্তমানে ম্যাগপি আরএসএস ব্যবহার করছি তবে আরএসএস বা অ্যাটম ফিডটি ভালভাবে তৈরি না হলে এটি কখনও কখনও পড়ে যায়। আরএসএস এবং অ্যাটম ফিডগুলি পিএইচপি দিয়ে পার্স করার জন্য অন্য কোনও বিকল্প নেই?
আমি বর্তমানে ম্যাগপি আরএসএস ব্যবহার করছি তবে আরএসএস বা অ্যাটম ফিডটি ভালভাবে তৈরি না হলে এটি কখনও কখনও পড়ে যায়। আরএসএস এবং অ্যাটম ফিডগুলি পিএইচপি দিয়ে পার্স করার জন্য অন্য কোনও বিকল্প নেই?
উত্তর:
আপনার অন্যান্য বিকল্পের মধ্যে রয়েছে:
এক্সএমএল ডকুমেন্টগুলি পার্স করার জন্য আমি পিএইচপিতে অন্তর্নির্মিত সিম্পল এক্সএমএল ফাংশনগুলি সর্বদা ব্যবহার করেছি । এটি সেখানে কয়েকটি জেনেরিক পার্সারের মধ্যে একটি যা এর স্বজ্ঞাত কাঠামো রয়েছে, যা আরএসএস ফিডের মতো নির্দিষ্ট কোনও কিছুর জন্য অর্থবিত বর্গ তৈরি করা অত্যন্ত সহজ করে তোলে। অতিরিক্তভাবে, এটি এক্সএমএল সতর্কতা এবং ত্রুটিগুলি সনাক্ত করবে এবং কোনও আবিষ্কার করার পরে আপনি এটি পরিষ্কার করার জন্য আবার চেষ্টা করার জন্য এইচটিএমএল পরিচ্ছন্নতার মতো (যেমন সিজেজোজ উল্লিখিত) উত্সটি চালাতে পারেন।
সিম্পল এক্সএমএল ব্যবহার করে এটি অত্যন্ত রুক্ষ, সাধারণ শ্রেণীর বিবেচনা করুন:
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;
... এর বাইরে, এই কোডের জন্য আপনাকে ধন্যবাদ! এটি দুর্দান্ত কাজ করে!
eregi_replace
বর্তমানে অবচিত হয়েছে এবং দিয়ে প্রতিস্থাপিত করা হয়েছে preg_replace
এবং সেইসাথে eregi
সঙ্গে preg_match
। ডকুমেন্টেশনগুলি যথাক্রমে এখানে এবং এখানে পাওয়া যাবে ।
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');
ফাইল +
আরএসএস পার্স করার জন্য আমি সাধারণ স্ক্রিপ্টটি প্রবর্তন করতে চাই:
$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- এর সুগঠিত না হয়, তবে আপনাকে এটি অস্বীকার করার কথা, কোনও ব্যতিক্রম নেই। আপনি ফিড নির্মাতাকে বোজো বলার অধিকারী ।
অন্যথায় আপনি এইচটিএমএল শেষ হয়ে গিয়েছিল এমন গোলযোগের পথ তৈরি করছেন।
আমি গুগল রিডার ফিড পার্স করার জন্য সিম্পলপিকে ব্যবহার করি এবং এটি বেশ ভালভাবে কাজ করে এবং একটি শালীন বৈশিষ্ট্য সেট রয়েছে।
অবশ্যই, আমি এটি অ-সুগঠিত আরএসএস / এটম ফিডগুলির সাথে পরীক্ষা করে দেখিনি যাতে এটি কীভাবে এটির সাথে মোকাবিলা করে তা আমি জানি না, আমি ধরে নিচ্ছি যে গুগল মোটামুটি মান সম্মত! :)
পিএইচপি আরএসএস রিডার - http://www.scriptol.com/rss/rss-reader.php - হাজার হাজার ব্যবহারকারী দ্বারা ব্যবহৃত একটি সম্পূর্ণ তবে সাধারণ পার্সার ...
আর একটি দুর্দান্ত ফ্রি পার্সার - http://bncscriptts.com/free-php-rss-parser/ এটি খুব হালকা (কেবল 3 কেবি) এবং ব্যবহার করা সহজ!