روشن فکری بنیان ماست !

ما هرگز نمی گذاریم حوصله شما سربرود !

اللَّهُ نُورُ السَّمَاوَاتِ وَالْأَرْضِ مَثَلُ نُورِهِ کَمِشْکَاةٍ فِیهَا مِصْبَاحٌ الْمِصْبَاحُ فِی زُجَاجَةٍ الزُّجَاجَةُ کَأَنَّهَا کَوْکَبٌ دُرِّیٌّ یُوقَدُ مِن شَجَرَةٍ مُّبَارَکَةٍ زَیْتُونِةٍ لَّا شَرْقِیَّةٍ وَلَا غَرْبِیَّةٍ یَکَادُ زَیْتُهَا یُضِیءُ وَلَوْ لَمْ تَمْسَسْهُ نَارٌ نُّورٌ عَلَی نُورٍ یَهْدِی اللَّهُ لِنُورِهِ مَن یَشَاءُ وَیَضْرِبُ اللَّهُ الْأَمْثَالَ لِلنَّاسِ وَاللَّهُ بِکُلِّ شَیْءٍ عَلِیمٌ ( برخی از خواص آینه ۳۵ سوره نور از کتاب قرآن کریم )
هرگونه کپی برداری از فایل های اختصاصی پیگرد قانونی دارد لذا در صورت کپی مطالب لینک دریافت آن ها را تغییر ندهید .
روشن فکری بنیان ماست !

به نام او که یادش ترنم عارفانه زندگیست . سلام من سید امیرحسین طــاووســی هستم طــراح و برنامه نویس وب . فـعالیتم را در زمینه کــامپـیوتـر قبل از سـال اول دبـسـتـان شـروع کــردم و تا دوره راهنمایی اطلاعات کاملی از این تکنولوژی بدست آوردم . از ان دوره تا کنون در زمینه های مختلف فعالیت می کنم که مهـم ترین آن برنامه نویسی وب است یکی از عواملی که باعث شد تا به این سمت بیام کـدباز بودن زبان های وب هستش و روز به روز به دانستنیهایم در این زمینه می افزایم. شاد و سرزنده باشید , امیر

جستجو در وبلاگ
آخرین نظرات

درصد پیشرفت پروژه ها

Projects Progress
اسکریپت اشتراک ویدیو + منتظر بزرگترین سوپرایز وبلاگ من در فروردین ۹۵ باشید۷۹ درصد

دریافت جزیات اسکریپت اشتراک ویدیو

معرفی کلاس ABC_RSS

چهارشنبه, ۱۶ مهر ۱۳۹۳، ۰۸:۵۰ ب.ظ

اگر می خواهید برای سایت یا اسکریپت اختصاصی خودتان خروجی فید حرفه ای بنویسید دست نگه دارید بلکه یکی از قوی ترین کلاس های خروجی فید اینجاست . کلاس ABC_RSS به شما کمک می کند تا در هم شرایطی خروجی فید خود را راه اندازی کنید با دیتابیس یا بدون آن طبق آخرین نسخه منتشر شده خروجی فید نسخه ۲ می باشد و قابل نمایش در همه فیدخوان های اینترنت را داراست مستندات خود این سیستم شامل ۳ بخش کلیست که در ادامه مطلب به صورت حرفه ای و با توضیحات فارسی با معرفی آن ها می پردازیم .

خوب در ابتدا متذکر شوم که متن های بلند و دارای متغیرهای زیاد با صلاح دید کلاس در قالب CDATA قرار میگیرد و با UTF-8 هیچ گونه مشکلی ندارد . خوب به مثال اول نگاه کنید :

require_once( 'ABC_RSS.php' );

$rss = new ABC_RSS();

$channel =array();
$channel['title']       ='Tavousi.name Blog';
$channel['link']        ='http://tavousi.name/'; 
$channel['description'] ='This is my blog'; 
$channel['language']    ='fa-ir'; 
$channel['copyright']   ='Copyright 2013-2014, @Tavousi'; 
$channel['webMaster']   ='p30search@gmail.com (Tavousi)';

$channel['pubDate']     =date( DATE_RSS ); 
$channel['generator']   ='ABC_RSS PHP Class'; 
$channel['docs']        ='http://blogs.law.harvard.edu/tech/rss'; 

$channel['category'] =array();
$channel['category'][] =array( 'content' =>'Rock', 'domain' =>'genre' );
$channel['category'][] =array( 'content' =>'Folk', 'domain' =>'genre' ); 

$rss->set_channel( $channel );

$item =array(); $item['title'] ='Love Machine'; $item['description'] ='This is a power ballad evocative of MC Bubblicious Fish-eyes.'; $item['link'] ='http://www.band-name.dom/band/songs/love_machine.html $item['enclosure'] =array(); $item['enclosure']['url'] ='http://www.band-name.dom/band/songs/love_machine.mp3'; $item['enclosure']['length'] ='12216320'; $item['enclosure']['type'] ='audio/mpeg'; $item['category'] = array(); $item['category'][] =array( 'content' =>'Rock', 'domain' =>'genre' ); $rss->set_item( $item ); $item =array(); $item['title'] ='Mud Puppet Square Dance'; $item['description'] ='A folksy taste of Americana'; $item['link'] ='http://www.band-name.dom/band/songs/mud_puppet.html $item['enclosure'] =array(); $item['enclosure']['url'] ='http://www.band-name.dom/band/songs/mud_puppet.mp3'; $item['enclosure']['length'] ='14005740'; $item['enclosure']['type'] ='audio/mpeg'; $item['category'] = array(); $item['category'][] =array( 'content' =>'Folk', 'domain' =>'genre' ); $rss->set_item( $item ); $rss->export();

در ابتدا کد با فراخونی کلاس و نوشتن متغیری برای اجرای آن شروع می شود :

$rss =new ABC_RSS();

در قسمت بعد المنت های اولیه فایل خروجی را تعیین می کنیم هیچ محدودیتی ندارد :

$channel =array();
$channel['title']       ='Tavousi.name Blog';
$channel['link']        ='http://tavousi.name/'; 
$channel['description'] ='This is my blog'; 
$channel['language']    ='fa-ir'; 
$channel['copyright']   ='Copyright 2013-2014, @Tavousi'; 
$channel['webMaster']   ='p30search@gmail.com (Tavousi)';

$channel['pubDate']     =date( DATE_RSS ); 
$channel['generator']   ='ABC_RSS PHP Class'; 
$channel['docs']        ='http://blogs.law.harvard.edu/tech/rss'; 

در ابتدا کد دیدیم که در قسمت های المنت های اولیه از المنت category هم استفاده شده اما این المنت نحوه استفاده ازش متفاوت است نسبت به بقیه المنت ها برای مثال باید از کد زیر استفاده کرد :

$channel['category'] =array();
$channel['category'][] =array( 'content' =>'Rock', 'domain' =>'genre' );
$channel['category'][] =array( 'content' =>'Folk', 'domain' =>'genre' );

domain نام المنتی است که داخل تگ category قرار می گیرد و مقدار آن مثلا genre هست و content که در array دیده می شود متن داخل تگ هست خوب خروجی آن به شکل زیر در کنال بقیه المنت های اولیه رویت می شود :

<category domain='genre'>Rock</category> 
<category domain='genre'>Folk</category>

خوب [نکته : شما به جای category می توانید هر نامی را که نیاز دارید به کار ببرید این یه مثال برای استفاده از array ها در این بخش بود] خوب احتمالا قابلیت افزودن بیش از یک المنت در تگ باشد ولی من بررسی نکردم و برای استفاده از تگی با چندین المنت به همراه مقدار به صورت زیر :

<cloud domain="rpc.news.dom" port="80" path="/RPC2" registerProcedure="pingMe" protocol="soap"/>

می توانید از این کد استفاده کنید تا در المنت های اولیه که اینجا منظورمان همان تگ های اول فایل هستند ساخته شود :

$channel['cloud'] = array();
$channel['cloud']['domain']            ='rpc.news.dom';
$channel['cloud']['port']              ='80';
$channel['cloud']['path']              ='/RPC2';
$channel['cloud']['registerProcedure'] ='pingMe';
$channel['cloud']['protocol']          ='soap';

بررسی درست بودن وضعیت کدهای المنت اولیه یا داده های ورودی ($channel) با کد زیر صورت میگیرد :

$rss->set_channel( $channel );

خوب به سراغ قرار دادن پست ها و یا همان آیتم ها می رویم بعد از کدهای بالا و تاییدیه set_channel برای ساخت ایتم می توانیم از کد زیر استفاده کنیم :

$item = array(); 
$item['title']       ='Love Machine'; 
$item['description'] ='This is a power ballad evocative of MC Bubblicious Fish-eyes.';
$item['link']        ='http://www.band-name.dom/band/songs/love_machine.html

سپس قرار دادن موضوع و یا چندین موضوع با array :

$item['category'] =array(); 
$item['category'][] =array( 'content' = >'Rock', 'domain' =>'genre' );

همچنین متذکر شوم که برای ساخت تگی با چندین المنت و مقدار در آیتم ها همانند مثال چند خط قبل باید اقدام کنید و در آخر با کد زیر تاییدیه درستی اطلاعات را برای آیتم بگیرید :

$rss->set_item( $item );

خوب حال بهتر است در مورد خروجی فید صحبت کنیم خروجی فید همان طور که در کد پایین مشاهده میکنید به ۳ شکل می باشد :

// خروج اطلاعات در همان فایل داینامیک با هدر : text/xml
// همانند همه اسکریپت های مدیریت محتوا
// header("Content-type: text/xml");
$rss->export();
// دانلود فیلد با فرمت : xml
$rss->export('download');
//ساخت فایل فید با فرمت : xml
$rss->export('write','/home/user/htdocs/xml/rss.xml');

خوب به سراغ مثال دوم میرویم حال به کمک چند خط کد کاری کردیم که این کلاس از دیتابیس آیتم ها را دریافت کند :

require_once( 'ABC_RSS.php' ); 

// اطلاعات اتصال به دیتابیس $hostname ="host"; $database ="database"; $username ="username"; $password ="password"; $errors =array(); $destination_file ='home/user/htdocs/xml/local_news.xml'; try { if ( !$connection =mysql_connect( $hostname, $username, $password )) throw new Exception( mysql_error(), mysql_errno() ); if ( !mysql_select_db( $database, $connection )) throw new Exception( "Unable to connect to database '$database'." ); $query ="SELECT `id`, `title`, `description`, `datetime` ". "FROM `articles` ". "WHERE `scope` = 'local' ". "ORDER BY `datetime` DESC ". "LIMIT 0, 10"; if ( !$result =mysql_query( $query, $connection )) throw new Exception( mysql_error(), mysql_errno() ); $row_count =@mysql_num_rows( $result ); if ( $row_count > 0 ) { $rss =new ABC_RSS(); $channel =array(); $channel['title'] ='News.dom - All the News You Can Stand'; $channel['link'] ='http://www.news.dom/'; $channel['description'] ='The Latest Ten Local News Stories from News.dom'; $channel['language'] ='en-us'; $channel['copyright'] ='Copyright 2010-2012, News.dom'; $channel['managingEditor'] ='editor@news.dom (John Smith)'; $channel['webMaster'] ='webmaster@news.dom (Jane Doe)'; $channel['pubDate'] =date(DATE_RSS); $channel['generator'] ='ABC_RSS PHP Class'; $channel['docs'] ='http://blogs.law.harvard.edu/tech/rss'; $channel['skipHours'] ='0,1,2,3'; $channel['skipDays'] ='Saturday'; $channel['category'] =array(); $channel['category'][] =array( 'content' =>'news', 'domain' =>'local' ); if ( !$rss->set_channel( $channel )) { $errors =&$rss->errors; throw new Exception( "Failed to set the channel." ); } for ( $i =0 ; $i <$row_count ; $i++ ) { $row =mysql_fetch_assoc( $result ); $item =array(); $item['title'] =$row['title']; $item['description'] =$row['description']; $item['link'] =sprintf( "http://www.news.dom/articles/?id=%d", $row['id'] ); $item['pubDate'] =date( DATE_RSS, strtotime( $row['datetime'] )); $item['category'] =array(); $item['category'][] =array( 'content' =>'news', 'domain' =>'local' ); if ( !$rss->set_item( $item )) { $errors =&$rss->errors; throw new Exception( "Failed to set the item." ); } } if ( !$rss->export( 'write', $destination_file )) { $errors =&$rss->errors; throw new Exception( "Failed to write the XML to file." ); } } else throw new Exception( "No articles were found in the database." ); } catch ( Exception $e ) { $errors[] =$e->getMessage(); } if ( count( $errors ) > 0 ) foreach ( $errors as $error ) printf( "<p>%s</p>", $error ); else exit ( "<p>The XML file was written without errors.</p>" );

۲ تگ <skipHours> و <skipDays> در این جا نیاز به توضیح دارد این ۲ تگ به فید دستور می دهد که در چه ساعاتی از شبانه روز و چه روزهایی این آیتم را نمایش ندهد به اصطلاح خودش Skip کند . خروجی این ۲ تگ بصورت زیر در آیتم رویت می شود :

<skipHours> 
<hour>0</hour>
<hour>1</hour>
<hour>2</hour>
<hour>3</hour>
</skipHours>

<skipDays>
<day>Saturday</day>
</skipDays>

مقادیر skipHours شامل ۰ تا ۲۴ می باشد که منظور همان ساعات شبانه روز می باشد و مقادیر skipDays نام روزها به انگلیسی می باشد و می توانید مقداریز را با کاما (,) از هم جدا کنیم یکبار دگیر کد ساخت این ۲ تگ را در بخش آیتم ها به صورت خلاصه می بینیم :

$channel['skipHours'] = '0,1,2,3';
// And for the <skipDays> element:
$channel['skipDays'] = 'Saturday';

حال که به کلاس مسلط شدید در نهایت مثال ۳ را با هم مشاهده می کنیم که آنالیز آن باعث یادگیری بهتر شما می شود اما در این مثال فایل rss.xml ساخته می شود در فولدر :

require_once( 'ABC_RSS.php' ); 

$destination_file ='rss.xml'; 

$rss = new ABC_RSS(); 

try { 

   // All possible channel elements 

  $channel =array(); 
  $channel['title']          ='News.dom'; 
  $channel['link']           ='http://www.news.dom/'; 
  $channel['description']    ='All the News You Can Stand'; 
  $channel['language']       ='en-us'; 
  $channel['copyright']      ='Copyright 2010-2012, News.dom'; 
  $channel['managingEditor'] ='editor@news.dom (John Smith)'; 
  $channel['webMaster']      ='webmaster@news.dom (Jane Doe)'; 
  $channel['pubDate']        =date( DATE_RSS ); 
  $channel['lastBuildDate']  =date( DATE_RSS ); 

  $channel['category'] =array(); 
  $channel['category'][] =array( 'content' =>'news', 'domain' =>'local,regional,national,world' );
  $channel['category'][] =array( 'content' =>'sports', 'domain' =>'local,regional,national' );
  $channel['category'][] =array( 'content' =>'entertainment', 'domain' =>'local,regional,national' );

  $channel['generator'] ='ABC_RSS PHP Class'; 
  $channel['docs']      ='http://blogs.law.harvard.edu/tech/rss'; 

  $channel['cloud'] = array(); 
  $channel['cloud']['domain']            ='rpc.news.dom'; 
  $channel['cloud']['port']              ='80'; 
  $channel['cloud']['path']              ='/RPC2'; 
  $channel['cloud']['registerProcedure'] ='pingMe'; 
  $channel['cloud']['protocol']          ='soap';

  $channel['ttl'] = '60'; 
 
  $channel['image'] =array(); 
  $channel['image']['url']    ='http://www.news.dom/logo.jpg'; 
  $channel['image']['title']  ='News.dom'; 
  $channel['image']['link']   ='http://www.news.dom/'; 
  $channel['image']['width']  ='88'; 
  $channel['image']['height'] ='31'; 

  $channel['rating'] ='(PICS-1.1 "http://www.gcf.org/v2.5" '. 
                      'l r (suds 0.5 density 0 color/hue 1) '. 
                      'r (subject 2 density 1 color/hue 1))'; 

  $channel['textInput'] =array(); 
  $channel['textInput']['title']       ='Search'; 
  $channel['textInput']['description'] ='Find an article on News.dom'; 
  $channel['textInput']['name']        ='q'; 
  $channel['textInput']['link']        ='http://www.news.dom/search/'; 

  $channel['skipHours'] ='0,1,2,3'; 
  $channel['skipDays']  ='Saturday';

  if ( !$rss->set_channel( $channel )) 
  { 
    $errors =&$rss->errors; 
    throw new Exception( 'Unable to set the RSS channel.' ); 
  } 

  // All possible item elements 

  $item =array(); 
  $item['title']       ='New Water Park Makes Big Splash in Local Economy'; 
  $item['description'] ='Reporter Peter Griffin talks to Bob Smith, the owner-operator '. 
                        'of Quahog\'s new attraction, Wetworld.';
  $item['link']        ='http://www.news.dom/headlines/'; 
  $item['author']      ='Peter Griffin'; 

  $item['category'] =array(); 
  $item['category'][] =array( 'content' =>'news', 'domain' =>'local' );
  $item['category'][] =array( 'content' =>'entertainment', 'domain' =>'local' );

  $item['comments'] ='http://www.news.dom/comments/?article=7836453'; 

  $item['enclosure'] =array(); 
  $item['enclosure']['url']    ='http://www.news.dom/video/?id=68737'; 
  $item['enclosure']['length'] ='12216320'; 
  $item['enclosure']['type']   ='video/quicktime'; 

  $item['guid'] =array(); 
  $item['guid']['isPermaLink'] ='true'; 
  $item['guid']['content']     ='http://www.news.dom/articles/?id=7836453'; 

  $item['pubDate'] ='Sun, 19 May 2002 15:21:36 GMT'; 

  if ( !$rss->set_item( $item )) 
  { 
    $errors =&$rss->errors; 
    throw new Exception( 'Unable to set the RSS item.' ); 
  } 

  if ( !$rss->export( 'write', $destination_file )) 
  { 
    $errors =&$rss->errors; 
    throw new Exception( 'Unable to write the RSS file.' ); 
  } 
} 

catch ( Exception $e ) { $errors[] =$e->getMessage(); } 

if ( !empty( $errors )) 
 	foreach ( $errors as $error ) 
   	printf( "<p>%s</p>", $error ); 

else 
 	print '<p>The RSS was created without errors.</p>';

خروجی مثال ۳ به صورت زیر می باشد :

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>News.dom</title>
    <link>http://www.news.dom/</link>
    <description><![CDATA[All the News You Can Stand]]></description>
    <language>en-us</language>
    <copyright>Copyright 2010-2012, News.dom</copyright>
    <managingEditor>editor@news.dom (John Smith)</managingEditor>
    <webMaster>webmaster@news.dom (Jane Doe)</webMaster>
    <pubDate>Sat, 11 Oct 2014 15:14:31 +0000</pubDate>
    <lastBuildDate>Sat, 11 Oct 2014 15:14:31 +0000</lastBuildDate>
    <category domain="local,regional,national,world">news</category>
    <category domain="local,regional,national">sports</category>
    <category domain="local,regional,national">entertainment</category>
    <cloud domain="rpc.news.dom" port="80" path="/RPC2" registerProcedure="pingMe" protocol="soap" />
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>ABC_RSS PHP Class</generator>
    <ttl>60</ttl>
    <rating><![CDATA[(PICS-1.1 "http://www.gcf.org/v2.5" l r (suds 0.5 density 0 color/hue 1) r (subject 2 density 1 color/hue 1))]]></rating>
    <textInput>
      <title>Search</title>
      <description><![CDATA[Find an article on News.dom]]></description>
      <name>q</name>
      <link>http://www.news.dom/search/</link>
    </textInput>
    <image>
      <url>http://www.news.dom/logo.jpg</url>
      <title>News.dom</title>
      <link>http://www.news.dom/</link>
      <width>88</width>
      <height>31</height>
    </image>
    <skipHours>
      <hour>0</hour>
      <hour>1</hour>
      <hour>2</hour>
      <hour>3</hour>
    </skipHours>
    <skipDays>
      <day>Saturday</day>
    </skipDays>
    <item>
      <title>New Water Park Makes Big Splash in Local Economy</title>
      <link>http://www.news.dom/headlines/</link>
      <description><![CDATA[Reporter Peter Griffin talks to Bob Smith, the owner-operator of Quahog's new water recreation park, Wetworld.]]></description>
      <author>Peter Griffin</author>
      <category domain="local">news</category>
      <category domain="local">entertainment</category>
      <comments>http://www.news.dom/comments/?article=7836453</comments>
      <enclosure url="http://www.news.dom/video/?id=68737" length="12216320" type="video/quicktime" />
      <pubDate>Sun, 19 May 2002 15:21:36 GMT</pubDate>
      <guid isPermaLink="true">http://www.news.dom/articles/?id=7836453</guid>
    </item>
</channel>
</rss>

منبع کلاس : http://j.gs/4aYG

من سید امیرحسین طــاووســی هستم طــراح و برنامه نویس وب . فـعالیتم را در زمینه کــامپـیوتـر قبل از سـال اول دبـسـتـان شـروع کــردم و تا دوره راهنمایی اطلاعات کاملی از این تکنولوژی بدست آوردم . از ان دوره تا کنون در زمینه های مختلف فعالیت می کنم که مهـم ترین آن برنامه نویسی وب است یکی از عواملی که باعث شد تا به این سمت بیام کـدباز بودن زبان های وب هستش و روز به روز به دانستنیهایم در این زمینه می افزایم. شاد و سرزنده باشید .

رمز فایل ها در بیان باکس : tavousi.name

در صورت مشکل در دانلود فایل ها و یا حذف شدن آن ها ما را مطلع نمایید .

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی