আরএসএস / পরমাণু ফিডগুলি পিএইচপি [পার্ক করার] সাথে পার্স করার সর্বোত্তম উপায়


135

আমি বর্তমানে ম্যাগপি আরএসএস ব্যবহার করছি তবে আরএসএস বা অ্যাটম ফিডটি ভালভাবে তৈরি না হলে এটি কখনও কখনও পড়ে যায়। আরএসএস এবং অ্যাটম ফিডগুলি পিএইচপি দিয়ে পার্স করার জন্য অন্য কোনও বিকল্প নেই?


1
এই অনুরোধটির সাথে একটি সমস্যা আছে বেশিরভাগ ফিড পাঠকরা পিএইচপি এর মূল এক্সএমএল পাঠক ব্যবহার করছেন এবং এক্সএমএল মানগুলির দ্বারা প্রয়োজনীয় হিসাবে যদি এক্সএমএল ভাল-ফর্ম্যাটেড না হয় তবে এটি আপনার উপর পড়বে যা এক্সএমএল পাঠক ব্যবহার করে না এবং একটি ব্যবহার করে পাঠ্য পাঠক তবে সার্ভারে লোড নাটকীয়ভাবে বৃদ্ধি পাবে। আমি জানি যে এর উত্তর দেওয়া হয়েছে আমি এক্সএমএল ফিড পাঠকদের ব্যবহারের অসুবিধা সম্পর্কে কেবল মানুষকে সচেতন করছি
বার্কর্ম্ন ০১

1
কখনই অবৈধ XML পার্স করার চেষ্টা করবেন না। উত্স দোষারোপ।
লোথার

উত্তর:


28

আপনার অন্যান্য বিকল্পের মধ্যে রয়েছে:


5
com

189
কোনও মন্তব্য ছাড়াই লিঙ্কগুলি দেওয়া, আমি এই জাতীয় "উত্তরগুলি" পছন্দ করি না। দেখে মনে হচ্ছে আপনি এটি গুগল করেছেন এবং কয়েকটি শীর্ষ ফলাফলের সাথে লিঙ্ক করেছেন। বিশেষত যেহেতু প্রশ্নকর্তার কিছু আরএসএস অভিজ্ঞতা আছে এবং এর জন্য আরও ভাল পার্সার প্রয়োজন।
দ্বৈত_

3
কারও কাছে যদি একটু পরামর্শের প্রয়োজন হয় তবে উপরের তালিকাভুক্ত তিনটির মধ্যে শেষ আরএসএস সবচেয়ে সহজ। "প্রয়োজন" করতে কেবল 1 টি ফাইল, এবং শালীন অ্যারে আউটপুট সহ 5 টি লাইনের মধ্যে আরএসএস আনতে পারে।
র‌্যাটার


আমি এর মধ্যে দুটি ব্যবহার করেছি এবং লাস্টআরএস সম্পূর্ণরূপে কার্যকরী সহায়ক সরবরাহ করা যথেষ্ট ভাল বলে মনে হচ্ছে না এবং সিম্পলপিও কিছুটা জটিল। আমি আরও কিছুকে চেষ্টা করতে চাই তবে এই লিবিগুলিতে মন্তব্যগুলি কেবল লিঙ্কগুলি নয়, বোঝার জন্য লোকদের পক্ষে আরও ভাল।
নুব

169

এক্সএমএল ডকুমেন্টগুলি পার্স করার জন্য আমি পিএইচপিতে অন্তর্নির্মিত সিম্পল এক্সএমএল ফাংশনগুলি সর্বদা ব্যবহার করেছি । এটি সেখানে কয়েকটি জেনেরিক পার্সারের মধ্যে একটি যা এর স্বজ্ঞাত কাঠামো রয়েছে, যা আরএসএস ফিডের মতো নির্দিষ্ট কোনও কিছুর জন্য অর্থবিত বর্গ তৈরি করা অত্যন্ত সহজ করে তোলে। অতিরিক্তভাবে, এটি এক্সএমএল সতর্কতা এবং ত্রুটিগুলি সনাক্ত করবে এবং কোনও আবিষ্কার করার পরে আপনি এটি পরিষ্কার করার জন্য আবার চেষ্টা করার জন্য এইচটিএমএল পরিচ্ছন্নতার মতো (যেমন সিজেজোজ উল্লিখিত) উত্সটি চালাতে পারেন।

সিম্পল এক্সএমএল ব্যবহার করে এটি অত্যন্ত রুক্ষ, সাধারণ শ্রেণীর বিবেচনা করুন:

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;
    }
}

2
আপনার কোনও প্রারম্ভিক ট্যাগ সহ একটি শেষ ট্যাগ রয়েছে। ;)
তালভি ওয়াটিয়া

130
ভাল, আমার একটি ছিল, তবে এটির এসও কোড ফর্ম্যাটরটি খাচ্ছিল কারণ এটির উপরে কোনও খালি লাইন নেই। সম্পর্কিত নোটে, আপনি একটি বড় অক্ষর দিয়ে আপনার বাক্যটি শুরু করেননি। ;)
ব্রায়ান ক্লাইন

4
দয়া করে পরিবর্তিত $feed_uri = $feed_or_url;করুন $feed_uri = $file_or_url;... এর বাইরে, এই কোডের জন্য আপনাকে ধন্যবাদ! এটি দুর্দান্ত কাজ করে!
টিম

5
মনে রাখবেন যে এই সমাধানটি দুর্দান্ত হলেও এটি কেবলমাত্র বর্তমান ফর্মটিতে আরএসএস ফিডকে পার্স করবে। বিভিন্ন স্কিমার কারণে পরমাণু ফিডগুলি বিশ্লেষণ করা হবে না।
আন্দ্রেস সাজেপেশিজি

9
লক্ষ্য করুন eregi_replaceবর্তমানে অবচিত হয়েছে এবং দিয়ে প্রতিস্থাপিত করা হয়েছে preg_replaceএবং সেইসাথে eregiসঙ্গে preg_match। ডকুমেন্টেশনগুলি যথাক্রমে এখানে এবং এখানে পাওয়া যাবে
এটিস আলাস্কা

45

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);

2
আমি এটি চেষ্টা করেছিলাম। এটি কোনও অ্যারে দেয় না
সমায়ো 16'14

আপনি যে আরএসএস ফিড ব্যবহার করছেন তা আমাকে দিতে পারেন?
পি জুনিয়র

2
আপনি যদি ভাবছেন। দেখে মনে হচ্ছে তিনি একটি টাম্বলার আরএসএস ফিড ব্যবহার করছেন। Anytumblrsite.com/rss আপনাকে একই আউটপুট দেবে।
অ্যান্ড্রুক

3
4 টি লাইন ব্যবহৃত হয়েছে, দুর্দান্ত কাজ করেছে :) তবে তারপরে আমি 1 ম লাইনটি আবার লিখেছি: $feed = file_get_contents('http://yourdomains.com/feed.rss'); ফাইল +
ইমপ্লয়েডের

1
এক লাইন, $ ফিড = json_decode (json_encode (সিম্পল xML_load_file (' news.google.com/?output=rss' )), সত্য);

21

আরএসএস পার্স করার জন্য আমি সাধারণ স্ক্রিপ্টটি প্রবর্তন করতে চাই:

$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++;
}

পরিষ্কার এবং সহজ সমাধান! সুন্দরভাবে কাজ করে।
জন টি

13

যদি ফিডটি XML- এর সুগঠিত না হয়, তবে আপনাকে এটি অস্বীকার করার কথা, কোনও ব্যতিক্রম নেই। আপনি ফিড নির্মাতাকে বোজো বলার অধিকারী ।

অন্যথায় আপনি এইচটিএমএল শেষ হয়ে গিয়েছিল এমন গোলযোগের পথ তৈরি করছেন।


3
+1, আপনার কোনও এক্সএমএল যাতে সুগঠিত না হয় তার চারপাশে কাজ করার চেষ্টা করা উচিত নয়। তাদের সাথে আমাদের খারাপ অভিজ্ঞতা হয়েছে, আমার উপর বিশ্বাস করুন, এটি ছিল বড় ব্যথা :(
হেলেন নীলি

35
যাইহোক, প্রোগ্রামাররা ব্যবসায়িক অংশীদারদের পছন্দ করতে পায় না এবং তাদের দেওয়া অংশগুলি পার্স করতে হয়।
এডমন্ড মেইনফেল্ডার

2
আপনি যদি সার্বজনীন আরএসএস / এটম ফিড রিডার তৈরি করছেন? যদি কোনও দুর্বৃত্ত এক্সএমএল ফাইল আপনার এইচটিএমএলকে "গণ্ডগোল" করতে পারে তবে বোজো কে? ;) আপনি যা পান তাতে উদার হন।
yPhil

6

এইচটিএমএল পরিপাটি গ্রন্থাগারটি কিছু ত্রুটিযুক্ত এক্সএমএল ফাইলগুলি ঠিক করতে সক্ষম। আপনার ফিডগুলি পার্সারে পৌঁছে দেওয়ার আগে সেগুলি চালিয়ে যাওয়া আপনাকে সহায়তা করতে পারে।


2

আমি গুগল রিডার ফিড পার্স করার জন্য সিম্পলপিকে ব্যবহার করি এবং এটি বেশ ভালভাবে কাজ করে এবং একটি শালীন বৈশিষ্ট্য সেট রয়েছে।

অবশ্যই, আমি এটি অ-সুগঠিত আরএসএস / এটম ফিডগুলির সাথে পরীক্ষা করে দেখিনি যাতে এটি কীভাবে এটির সাথে মোকাবিলা করে তা আমি জানি না, আমি ধরে নিচ্ছি যে গুগল মোটামুটি মান সম্মত! :)


1

ব্যক্তিগতভাবে আমি বিএনসি অ্যাডভান্সড ফিড পার্সার ব্যবহার করি- আমি যে টেম্পলেট সিস্টেমটি ব্যবহার করতে পারি তা পছন্দ করি


1

পিএইচপি আরএসএস রিডার - http://www.scriptol.com/rss/rss-reader.php - হাজার হাজার ব্যবহারকারী দ্বারা ব্যবহৃত একটি সম্পূর্ণ তবে সাধারণ পার্সার ...


-2

আর একটি দুর্দান্ত ফ্রি পার্সার - http://bncscriptts.com/free-php-rss-parser/ এটি খুব হালকা (কেবল 3 কেবি) এবং ব্যবহার করা সহজ!


সুরক্ষার জন্য সাধারণত জিনফ্লেট এবং বেস 64_ ডিকোড ব্যবহার করে এটি "দুর্দান্ত" বলতে পারবেন না।
18_

এটি বিপণনের পারপাসগুলির জন্য একটি মৃত লিঙ্ক।
সেগিভ এসইও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.