Sunday, December 28, 2008

ssh无密码登录

製作不用密碼可立即登入的 ssh 用戶:

咦!既然 SSH 可以使用 Key 來比對資料,並且提供使用者資料的加密功能, 那麼可不可能利用這個 Key 就提供使用者自己進入主機,而不需要輸入密碼呢? 呵呵!好主意!我們可以將 Client 產生的 Key 給他拷貝到 Server 當中,所以, 以後 Client 登入 Server 時,由於兩者在 SSH 要連線的訊號傳遞中,就已經比對過 Key 了, 因此,可以立即進入資料傳輸介面中,而不需要再輸入密碼呢!在實作上的步驟可以是:
  1. 首先,先在 Client 上面建立 Public Key 跟 Private Key 這兩把鑰匙,利用的指令為 ssh-keygen 這個命令;
  2. 再來,將 Private Key 放在 Client 上面的家目錄,亦即 $HOME/.ssh/ , 並且修改權限為僅有該 User 可讀的狀態;
  3. 最後,將那把 Public Key 放在任何一個您想要用來登入的主機的 Server 端的某 User 的家目錄內之 .ssh/ 裡面的認證檔案即可完成整個程序。
說是好像很困難的樣子,其實步驟真的很簡單,我們依序來進行作業好了!假設前提:
  • Server 部分為 linux.dmtsai.tw 這部 192.168.0.2 的主機,欲使用的 User 為 test 這個帳號;
  • Client 部分為 test2.dmtsai.tw 這部 192.168.0.100 PC 的 test2 這個帳號, 他要用來登入 192.168.0.2 這部主機的 test 這個帳號。
  1. 在 Client 端建立 Public 與 Private Key :

  2. 建立的方法真的是簡單到不行!直接在 192.168.0.100 這個 Client 上面,以 test2 這個帳號,使用 ssh-keygen 這個指令來進行 Key 的產生即可!不過,需要注意的是, version 1 與 version 2 使用的密碼演算方式不同,此外, version 2 提供兩個密碼演算的方法,我們這裡僅針對 version 2 的 RSA 這個演算方法進行說明!
    [test2@test2 ~]$ ssh-keygen -t rsa  <==這個步驟在產生 Key pair
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/test2/.ssh/id_rsa): <==這裡按下Enter
    Enter passphrase (empty for no passphrase): <==這裡按 Enter
    Enter same passphrase again: <==再按一次 Enter
    Your identification has been saved in /home/test2/.ssh/id_rsa. <==這是私鑰
    Your public key has been saved in /home/test2/.ssh/id_rsa.pub. <==這是公鑰

    The key fingerprint is:
    c4:ae:d9:02:d1:ba:06:5d:07:e6:92:e6:6a:c8:14:ba test2@test2.linux.org
    # 注意: -t 指的是『使用何種密碼演算方式?』由於我們使用 RSA ,
    # 所以直接輸入 -t rsa 即可建立兩支 Keys !
    # 此外,建立的兩把 Keys 都放置在家目錄下的 .ssh 這個目錄中!
    # 察看一下這兩把 Keys 吧!


    [test2@test2 ~]$ ll ~/.ssh
    total 12
    -rw------- 1 test2 test2 887 Nov 12 22:36 id_rsa
    -rw-r--r-- 1 test2 test2 233 Nov 12 22:36 id_rsa.pub
    -rw-r--r-- 1 test2 test2 222 Oct 31 11:20 known_hosts
    請注意上面喔,我的身份是 test2 ,所以當我執行 ssh-keygen 時, 才會在我的家目錄底下的 .ssh/ 這個目錄裡面產生所需要的兩把 Keys ,分別是私鑰(id_rsa)與公鑰(id_rsa.pub)。另外一個要特別注意的就是那個 id_rsa 的檔案權限啦!他必須要是 -rw------- 才好!否則內容被人家知道了,那麼您的 Keys 不就有可能外洩了?所以請特別留意他的權限喔! 那麼那個 id_rsa.pub 則是『公鑰!』這個檔案必須要被放置到 Server 端才行!

  3. 在 Client 端放置私鑰:

  4. 在預設的條件中,我們的私鑰必需要放置在家目錄底下的 .ssh 裡面,那麼如果是 version 2 的 RSA 演算法,就需要放置在 $HOME/.ssh/id_rsa 當中!咦!剛好使用 ssh-keygen 就是已經產生在這個目錄下了,所以自然就不需要去調整他了!以我的 test2.dmtsai.tw 來看,那麼我的檔案就會放置在 /home/test2/.ssh/id_rsa 這個檔案就是私鑰啦!

  5. 在 Server 端放置可以登入的公鑰:

  6. 既然我們要讓 test2 可以用 test 這個帳號登入 linux.dmtsai.tw 這部主機,那麼這部主機自然需要保有 test2 的 public key 囉!對的!所以我們必需要將 Client 端建立的 id_rsa.pub 檔案給他拷貝到 linux.dmtsai.tw 裡頭的 test 這個使用者的家目錄之下!那麼如果您還記得上面的 sshd_config 這個檔案的設定的話,那麼應該就記得『 AuthorizedKeysFile 』這個設定吧!是的! 在被登入的主機的某個帳號,他的公鑰放置的檔案名稱預設就是這個項目所記載的!而他預設的檔名就是 authorized_keys 這個檔案名稱啦!那麼應該怎麼做呢?
    1. 先在 Client 端以 sftp 將公鑰丟到 test 上面去!
    [test2@test2 ~]$ cd ~/.ssh
    [test2@test2 .ssh]$ scp id_rsa.pub test@192.168.0.2:~/
    test@192.168.0.2's password:
    id_rsa.pub 100% 233 0.2KB/s 00:00

    2. 到 Server 上面,將公鑰轉存到 authorized_keys 檔案中!
    [test@linux ~]$ cd ~/.ssh
    [test@linux .ssh]$ cat ../id_rsa.pub >> authorized_keys
    請注意上面的機器!由於 authorized_keys 可以保存相當多的公鑰內容,因此, 可以使用 >> 的方式來將 Client 端的公鑰新增到該檔案內!呵呵!做完這一步一後,未來 test2 就可以直接在 test2.dmtsai.tw 以
    [test2@test2 ~]$ ssh test@linux.dmtsai.tw
    這樣就可以不需要輸入密碼囉!但是請注意, test 不能以 test2 登入 test2.linux.org 喔!
很簡單的步驟吧!這樣一來,就可以不需密碼的手續了!無論如何,您要記得的是:
  • Client 必須製作出 Public & Private 這兩把 keys,且 Private 需放到 ~/.ssh/ 內;
  • Server 必須要有 Public Key ,且放置到使用者家目錄下的 ~/.ssh/authorized_keys;
未來,當您還想要登入其他的主機時,只要將您的 public key (就是 id_rsa.pub 這個檔案) 給他 copy 到其他主機上面去,並且新增到某帳號的 ~/.ssh/authorized_keys 這個檔案中!哈哈!成功!

Sunday, July 20, 2008

xmlhttprequest json cross-domain

javascript中快速创建对象:obj=({property:data},[...])
xmlhttprequest跨站:跨域代理(Cross Domain Proxy)。主要原理就是用php或者其他语言写一个代理请求的转发过程。客户端请求自己的服务器,服务器把请求转发到目标地址并且得到回应,服务器再 把结果返回给客户端。这个过程,对于开发者来说还是不错的选择,因为你可以在服务器上对回应的结果做自己的处理,可以决定需不需把结果要返回给客户端。
json也是一个好方法

Using JSON (JavaScript Object Notation) with Yahoo! Web Services

Tuesday, July 08, 2008

The Anatomy fo an RSS Feed

The Anatomy fo an RSS Feed


The Anatomy of an RSS Feed

RSS has become the standard data format for communicating news, updates or any other type of information that a company or individual wants to syndicate to a large audience. The name is an acronym that stands for Really Simple Syndication, which is an XML format that consists of designated elements that are consistent for all RSS feeds and conform to the XML 1.0 specification. These elements need to stay consistent to allow for a standardized data format that RSS aggregators can then consume. In this article we'll take a look at the elements in this structure.

An RSS feed always starts with an element, which contains an attribute called version, which specifies the version of the RSS feed. Here we focus on the RSS 2.0 format because it's the most commonly used today.


1<rss version="2.0">
2</rss>

The child of the <rss> element is the <channel>. This element is the containing element for the important data or content within the feed.


1<rss version="2.0">
2 <channel>
3 </channel>
4</rss>
5

In order to describe an RSS feed there are some tags that can be added to the beginning of a feed. The required <channel> elements are <title>, <link> and <description>. Optional channel elements are <language>, <copyright>, <managingEditor>, <webmaster>, <pubDate>, <lastBuildDate>, <category>, <generator>, <docs>, <cloud>, <ttl>, <image>, <rating>, <textInput>, <skipHours> and <skipDays>.





    1. language – The language of the content in the channel.

    2. copyright – The copyright notice for the content of the channel.

    3. managingEditor – An e-mail address for the editorial content producer.

    4. webMaster – An e-mail address for the webmaster.

    5. pubDate – A date that represents the publication date for the content in the channel.

    6. lastBuildDate – The last date and time that the content was changed.

    7. category – Allows for the ability to add one or multiple categories that a channel belongs to.

    8. generator – The program that created the channel.

    9. docs – URL for the documentation for the format of the RSS feed.

    10. cloud – Provides a process to register with a “cloud” that will be used to notify about updates.

    11. ttl – Stands for time to live, which tells the length of time the channel can be cached.

    12. image – Specifies an image file to be displayed in the channel.

    13. rating – PICS rating for the channel.

    14. textInput – A text input field that can be displayed with the channel.

    15. skipHours – Tells aggregators to skip for specified hours.

    16. skipDays – Tells aggregators to skip for specified days.

Following is an example of the RSS feed data that can be found in a blog.


1 <rss version="2.0">
2<channel>
3<title>Kris Hadlock: Designing with Code</title>
4<link>http://www.krishadlock.com/blog/index.php</link>
5<description/>
6<copyright>Copyright 2006 Kris Hadlock</copyright>
7<language>en-us</language>
8<lastBuildDate>Fri, 01 Sep 2006 23:36:55 +0000</lastBuildDate>
9<image>
10<url/>
11<title/>
12<link/>
13</image>
14</channel>
15</rss>

PHP and RSS: Getting it together

PHP and RSS: Getting it together

RSS Syndication is virtually ubiquitous these days, so it's imperative that a PHP developer at least understand RSS and how it works. This article explains the basics of RSS, some of its many uses, how to use PHP to create an RSS feed from a database, and how to use the XML_RSS module to read an existing RSS feed and translate it into HTML.

What? You haven't heard of RSS?

RSS syndication is one of the most common TLAs around (TLA stands for Three Letter Acronym). RSS as an acronym has stood for various things, but the current standard is: Really Simple Syndication. This is the most recent variation of this very common and very useful standard.

Back when the Internet was young(er), a piece of software called Pointcast pushed data to a screensaver application on a user's computer, providing news updates of all kinds. Eventually browser developers such as Netscape and Microsoft worked to create something similar to this immensely popular service. Netscape produced the most widely accepted variant and that eventually was released into the development wilds of the Internet, to eventually become the RSS of today.

RSS distributes recently updated information to many receivers, much like a broadcast system. Once you have a substantial number of users, the RSS feed acts like a beacon to draw your users back to look at updates. It is little wonder that RSS has increased in popularity and use among content providers, as it provides a much needed method of maintaining an audience's attention.

When you see the icon in Figure 1 you can bet that an RSS feed is available on that site. This icon is the de-facto standard icon representing the availability of RSS for updates at a site. The curved lines represent radio waves, a symbol of the broadcast nature of the RSS feed.

Figure 1. The RSS standard icon

The RSS standard icon

Back to top


RSS applications

A good number of applications, many of them free, can read an RSS feed and many of them allow you to aggregate the feeds. The aggregation features allow a user even further refinement over the amount and nature of content they receive. Each reader has different features, designed to help make sense of the incredible amount of information coming from the Internet.

Some examples are Thunderbird and Firefox by Mozilla, Internet Explorer 7 and upcoming versions of Office by Microsoft and many others, as close to you as the nearest search engine. With all the various ways to get and read feeds, it is very likely that you will find something that suits you. Unless of course you are a picky software developer and want to write your own! This article will get into that soon enough!


Back to top


How can I use RSS?

Your site has content that you want to get out to the masses, which is why you put it on the Internet in the first place. Once a substantial number of users know about your site and content, will they come back each day to check for updates? Probably not. Of all the sites you frequent, do you go to each one daily to check for updates? Probably not. This is where RSS comes in.

For your users, RSS can be a huge benefit, especially if they value opinions or news listed on your site. Without having to return to your site frequently, they will know exactly when you update or add content, allowing them to save time and effort, and they won't miss anything either!

Content generation isn't a problem, if you incorporate RSS feeds to fuel content aggregation for your own site. If you pull data off a feed and include it in your site, it can add a good amount of content to your site with only a little bit of time investment.

Personally, I like to use RSS to gather feeds from filtered results from various sites such as Craigslist (www.craigslist.org). A little trick I use is for shopping for used electronics. You can set up a site search and then RSS the resulting page. If you set up a feed for a search for cameras within a certain price range, you can see when anyone posted a camera for sale within your price range, on your RSS feed! Gives you a big advantage when you are trying to be the first bidder!


Back to top


The RSS 2.0 standard format

The RSS standard defines and contains the content of a feed. These feeds can be from any data source, defining Internet documents and in a very basic sense, make up a list of links and their descriptions.

Look at the RSS format in Listing 1, which uses a sample document from the NASA "Liftoff News" feed.

Listing 1. A sample RSS 2.0 document
              
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>Liftoff News</title>
<link>http://liftoff.msfc.nasa.gov/</link>
<description>Liftoff to Space Exploration.</description>
<language>en-us</language>
<pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate>
<lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<generator>Weblog Editor 2.0</generator>
<managingEditor>editor@example.com</managingEditor>
<webMaster>webmaster@example.com</webMaster>

<item>
<title>Star City</title>
<link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link>
<description>How do Americans get ready to work with Russians aboard the
International Space Station? They take a crash course in culture, language
and protocol at Russia's Star City.</description>
<pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate>
<guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid>
</item>

<item>
<title>Space Exploration</title>
<link>http://liftoff.msfc.nasa.gov/</link>
<description>Sky watchers in Europe, Asia, and parts of Alaska and Canada
will experience a partial eclipse of the Sun on Saturday, May 31st.</description>
<pubDate>Fri, 30 May 2003 11:06:42 GMT</pubDate>
<guid>http://liftoff.msfc.nasa.gov/2003/05/30.html#item572</guid>
</item>

<item>
<title>The Engine That Does More</title>
<link>http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp</link>
<description>Before man travels to Mars, NASA hopes to design new engines
that will let us fly through the Solar System more quickly. The proposed
VASIMR engine would do that.</description>
<pubDate>Tue, 27 May 2003 08:37:32 GMT</pubDate>
<guid>http://liftoff.msfc.nasa.gov/2003/05/27.html#item571</guid>
</item>

<item>
<title>Astronauts' Dirty Laundry</title>
<link>http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp</link>
<description>Compared to earlier spacecraft, the International Space
Station has many luxuries, but laundry facilities are not one of them.
Instead, astronauts have other options.</description>
<pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate>
<guid>http://liftoff.msfc.nasa.gov/2003/05/20.html#item570</guid>
</item>
</channel>
</rss>

The first child object of the XML formatted document is the definition of a <channel>. A channel is simply the feed itself and it's associated information. Many RSS feeds have one channel object, but you can have several, perhaps if you wanted to separate feeds by an arbitrary filter. The objects: title, link and description are required by the channel object. They define the basic descriptive information about the feed. The optional objects are: language, copyright, managingEditor, webMaster, pubDate, lastBuildDate, category, generator, docs, cloud, ttl, image, rating, textInput, skipHours, and skipDays.

A channel can contain an unlimited number of items. All elements of the ITEM element are optional, however, at least one title or description are needed to validate the element. The elements are: title, link, description, author, category, comments, enclosure, guide, pubDate, and source.


Back to top


Where does PHP come in?

This article assumes that you have some experience using PHP already and can use a function to pass a variable and return a result. PHP has many functions that make short work of XML both in and out of an application.

First you want to take information from a locally stored data source, a content management system, blog or any content which fits the format of an Internet document and put that out as a feed to your users. You will need to get this data, format it into an RSS object, and serve requests for it.

Portions of your site require additional content and rather than go out into the world seeking additional content documents for your site, you can take advantage of the multitudes of RSS feeds already prepared. You will use XML_RSS to get and handle these feeds for your site.


XML_RSS() is a PEAR package to help you get through the more complex tasks of interpreting an XML RSS file more easily. PEAR is an open source library of PHP functions which is free for your use and under continual development. You might already have PEAR installed with your PHP installation, but you might need to install it for this article (see Resources for a link). XML_RSS() is simply a function, which given the location of an RSS feed, will load the XML of the feed into an array, ready for your use in your PHP application. The elements of the array will have named keys, associated with the elements and attributes of the RSS file read.



Back to top


Getting data out

Now that you know what the RSS data format is, you can look at the data you want to hand out to the world, and put it in that format. Thankfully PHP has some powerful RSS and XML handling features to speed your development along. Like many of the common Web standards, PHP has a number of great functions ready for use in this application.



Getting the word out

You create a feed in order for others to read it, but how do you let
people know it exists? You can tell Mozilla Firefox and Microsoft
Internet Explorer, as well as other readers, about your feed by adding
the following tag to the top of your home page:


<link rel="alternate" type="application/rss+xml"
href="URL_FOR_YOUR_FEED" title="FEED_TITLE" />


Make sure to update the tag with your URL and feed title.




For this article, you will pull data out of a database, using "" and format it into an RSS feed. You will set it up so that it looks for the most recent additions to your dataset whenever the RSS feed is called upon and returns a fresh RSS to the requester.


The feed can come from any data source on your site, but in the end you need to make sure there is enough data that the person receiving the RSS feed will be able to use the data. At a minimum the URL name and description is needed. Any data that is published on your site can be turned into a feed.


You will use PHP to connect to your Web application database, pull updated information out, and format it into an XML RSS document.

Basic functions to get the data out

Assuming you have a database of choice, you will create a connection as normal, and generate a page displaying the XML laid out in a user readable fashion.

Sending the page to the requestor

Now that you have the data all well formatted in your own code, you need to make sure you hand the data out properly so when someone inputs your URL into their reader, they will get the XML RSS feed they expect (see Listing 2).

Listing 2. The complete RSS.php
              
<?php

$database = "nameofthedatabase";
$dbconnect = mysql_pconnect(localhost, dbuser, dbpassword);
mysql_select_db($database, $dbconnect);
$query = "select link, headline, description from `headlines` limit 15";
$result = mysql_query($query, $dbconnect);

while ($line = mysql_fetch_assoc($result))
{
$return[] = $line;
}

$now = date("D, d M Y H:i:s T");

$output = "<?xml version=\"1.0\"?>
<rss version=\"2.0\">
<channel>
<title>Our Demo RSS</title>
<link>http://www.tracypeterson.com/RSS/RSS.php</link>
<description>A Test RSS</description>
<language>en-us</language>
<pubDate>$now</pubDate>
<lastBuildDate>$now</lastBuildDate>
<docs>http://someurl.com</docs>
<managingEditor>you@youremail.com</managingEditor>
<webMaster>you@youremail.com</webMaster>
";

foreach ($return as $line)
{
$output .= "<item><title>".htmlentities($line['headline'])."</title>
<link>".htmlentities($line['link'])."</link>

<description>".htmlentities(strip_tags($line['description']))."</description>
</item>";
}
$output .= "</channel></rss>";
header("Content-Type: application/rss+xml");
echo $output;
?>


So let's go through this step by step. First, you set up a database connection object to a local database. In that database, you have a table with records containing headline, link and description fields, which you will request to put into your XML response. You execute an SQL query against your table with MYSQL_QUERY() and with the result, you reformat using WHILE to walk through the resulting object, and reformat the data into a new simple array.

With the new array ready, you start to build the XML file in the $output variable, appending new elements by walking through the $line array once for each returned response. This shouldn't take too long because back in your SQL statement you limited the responses to 15. To use this code fragment as a starter building block, you will need to replace the dummy links, database name, and login information to reflect your own environment.

When this script is executed, you get a nice clean RSS file output similar to that in Listing 3.

Listing 3. RSS.php output
              
<?xml version="1.0"?>
<rss version="0.97">
<channel>
<title>Our Demo RSS</title>
<link>http://www.tracypeterson.com/RSS/RSS.php</link>
<description>A Test RSS</description>
<language>en-us</language>
<pubDate>Mon, 13 Nov 2006 22:46:06 PST</pubDate>
<lastBuildDate>Mon, 13 Nov 2006 22:46:06 PST</lastBuildDate>
<docs>http://someurl.com</docs>
<managingEditor>you@youremail.com</managingEditor>
<webMaster>you@youremail.com</webMaster>
<item rdf:about="http://www.tracypeterson.com/">
<title>This is Tracy's Web Page!</title>
<link>http://www.tracypeterson.com/</link>
<description>This is a demonstration of how to get PHP to work for
your RSS feed.</description>
</item><item rdf:about="http://www.tracypeterson.com">
<title>This is Tracy's site again!</title>
<link>http://www.tracypeterson.com</link>
<description>Again, this is a demonstration of the power of PHP
coupled with RSS.</description>
</item></channel></rss>

Anyone can now enter the URL to RSS.php and load up a fresh RSS file with all your great new content contained within!



Back to top

Bringing data in

You will use the XML_RSS() functions to get your RSS feeds into your PHP scripts, ready for use like any other array. Just like a query to a database, you will have an array, ready to use as you see fit.

In this case, you will connect to the RSS.php and load up a copy, displaying it in an unordered list (see Listing 4).

Listing 4. showfeed.php
              
<?php
require_once "XML/RSS.php";

$rss =& new XML_RSS("http://www.tracypeterson.com/RSS/RSS.php");
$rss->parse();

echo "<h1>Headlines from <a
href=\"http://www.tracypeterson.com/RSS/RSS.php\">Tracy
Peterson's Site</a></h1>\n"; echo "<ul>\n";

foreach ($rss->getItems() as $item) {
echo "<li><a href=\"" . $item['link'] . "\">" . $item['title'] .
"</a></li>\n";
}
echo "</ul>\n";
?>

The example shown in Listing 4 comes directly from the PEAR manual, and I used it because it so concise. Let's go through it line by line and see that it really only uses a couple of the methods available to the XML_RSS() class, the constructor and parse(). Parse simply renders the output as the array that I mentioned before.

First, you use the require_once() function to load the RSS.php file from your PEAR installation. If PEAR is set up properly and XML_RSS installed, it will find this include file correctly and you will now have the XML_RSS object ready for your use. Next, you create a new object called $rss, which is the result of passing the URL to the feed to your XML_RSS constructor.

You simply use the parse() method to return the values in the RSS feed. The first echo line begins to set up the basic HTML you use to make the RSS feed human readable. In this case you announce that the unordered list is a list of headlines from my site!

The foreach() statement gets each item element from the parsed feed, using the getItems() method as a new array $items. Each of the array elements are named after the actual XML tag they are contained within. In this case you only use link and title, in a moment you will add description to explore this point. Each time the foreach loop processes, it will move to the next element until the entire RSS feed is laid out in this fashion.

Now, add descriptions to each of your displayed results.

Inside the foreach() loop, add the line in bold shown in Listing 5.

Listing 5. Adding the description
              
foreach ($rss->getItems() as $item) {
echo "<li><a href=\"" . $item['link'] . "\">" . $item['title'] .
"</a></li><br>";
echo $item['description'] . "<br><br>\n"; }

You simply add a line break and description line to the unordered list. Below is an example of the output of showfeed.php.


Figure 2. showfeed.php output

showfeed.php output



Back to top


Summary

The Internet as a whole is only beginning to realize the incredible potential it contains. With the increased accessibility that RSS provides, you can now simplify the process of keeping up to date for your users. Rather than spend their time checking if you have any new information, you can alert them with right-on-time updates.


You just explored the standard of the RSS format and how to create a feed as well as receive one and transform it into useable HTML. Now you will be ready to use these skills in a larger application.

Resources

Learn

Get products and technologies

Labels

关于我

海淀, 北京, China