[Áöµð³ÝÄÚ¸®¾Æ]À̹ø ±ÛÀº Áö³¹ø¿¡ ÀÌÀº ¸ÞŸ »çÀÌÆ® ¸¸µé±â °Á ¸¶Áö¸· ÆíÀ¸·Î XML ÆÄÀÏÀ» ÀÌ¿ëÇÏ¿© RSS ÁÖ¼ÒµéÀÇ ¸ñ·ÏÀ» °ü¸®Çϴ Ŭ·¡½ºÀÇ Á¦ÀÛ, RSS ÆÄÀϵé·ÎºÎÅÍ ÀÐÀº Á¤º¸µéÀ» µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸°Ú½À´Ï´Ù. ±×¸®°í ±×¸¦ ±¸ÇöÇÏ´Â Å×À̺í, ÀúÀå ÇÁ·Î½ÃÀú, Ŭ·¡½ºµéÀ» Á¦ÀÛÇϰí, °£´ÜÇÑ RSS ¼öÁý ·Îº¿ ÇÁ·Î±×·¥À» Á¦ÀÛÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
ÀÚµ¿Â÷´Â ¼ö¸¹Àº ºÎǰµéÀ» °¢°¢ »ý»êÇÏ¿© ¼³°èµµ¿¡ ¸Â°Ô °¢°¢À» ¿¬°áÇϰí Á¶¸³ÇÏ´Â °úÁ¤À» ÅëÇØ ¸¸µé¾îÁý´Ï´Ù. ¿ì¸®°¡ ¸¸µé°íÀÚ ÇÏ´Â ¸ÞŸ »çÀÌÆ®µµ ÇÙ½É ºÎǰµéÀ» ÇϳªÇϳª ¸¸µé°í ¸¶Áö¸·¿¡ ±×·¯ÇÑ °¢°¢ÀÇ ºÎǰµéÀ» Á¶¸³ÇÏ¿© ¿ì¸®°¡ ¿øÇÏ´Â ÇϳªÀÇ ±â´ÉÀ» ¼öÇàÇÏ´Â ÇÁ·Î±×·¥À» ¿Ï¼ºÇÏ´Â ´Ü°è·Î ÁøÇàµÇ°í ÀÖ½À´Ï´Ù. Áö³ ±ÛÀ» ÅëÇØ ¿ì¸®´Â ´ÙÀ½°ú °°Àº ³»¿ëÀ» ÁøÇàÇÏ¿´½À´Ï´Ù.
[1] ¸ÞŸ »çÀÌÆ®´Â RSS ÆÄÀϷκÎÅÍ ºí·Î±×ÀÇ Á¤º¸¸¦ ¾ò´Â´Ù´Â »ç½ÇÀ» ÀÌÇØÇÑ´Ù.
[2] RSS ÆÄÀÏÀÇ ±¸Á¶¿¡ ´ëÇØ¼ °øºÎÇÑ´Ù.
[3] RSS ÆÄÀÏÀÇ ³»¿ëÀ» ÀúÀåÇÒ Å¬·¡½º¸¦ Á¦ÀÛÇÑ´Ù.
[4] RSS ÆÄÀϷκÎÅÍ ³»¿ëÀ» Àоî¿À´Â RssReader Ŭ·¡½º¸¦ Á¦ÀÛÇÑ´Ù.
À̹ø ±ÛÀº Áö³ ½Ã°£¿¡ ÀÌÀº ¸ÞŸ »çÀÌÆ®ÀÇ ºÎǰ ¸¸µé±â °Á ¸¶Áö¸· ÆíÀ¸·Î RSS ÁÖ¼ÒµéÀ» ÀúÀåÇϴ Ŭ·¡½º¿Í, XML ÆÄÀÏÀ» ÀÌ¿ëÇÏ¿© RSS ÁÖ¼ÒµéÀÇ ¸ñ·ÏÀ» °ü¸®Çϴ Ŭ·¡½ºÀÇ Á¦ÀÛ, RSS ÆÄÀϵé·ÎºÎÅÍ ÀÐÀº Á¤º¸µéÀ» µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåÇÏ´Â ¹æ¹ý°ú ±×¸¦ ±¸ÇöÇÏ´Â Å×À̺í, ÀúÀåÇÁ·Î½ÃÀú, Ŭ·¡½ºµéÀ» Á¦ÀÛÇÏ°í °£´ÜÇÑ RSS ¼öÁý ·Îº¿ ÇÁ·Î±×·¥À» ¸¸µé¾î º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
RSS ÆÄÀϵéÀÇ ÁÖ¼ÒµéÀ» °ü¸®ÇÏÀÚ
Áö³ È£¸¦ ÅëÇØ ÇÑ °³ÀÇ ÆÄÀÏ ¶Ç´Â ÁּҷκÎÅÍ RSS Á¤º¸¸¦ ÀÐÀ» ¼ö ÀÖ´Â RssReader Ŭ·¡½º°¡ ¿Ï¼ºµÇ¾ú½À´Ï´Ù. ³²Àº ¹®Á¦´Â ¿©·¯ RSS ÁÖ¼ÒµéÀ» °ü¸®ÇÏ´Â ÀÛ¾÷ÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ÀÛ¾÷Àº µ¥ÀÌÅͺ£À̽º¸¦ ÀÌ¿ëÇÏ¸é ¼Õ½±°Ô Á¦ÀÛÇÒ ¼ö ÀÖÁö¸¸, µ¥ÀÌÅͺ£À̽º¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀº ÀÌÈÄ RSS ÆÄÀÏÀÇ ³»¿ëµéÀ» ±â·ÏÇÒ ¶§ Á¢ÇÒ ¿¹Á¤ÀÌ´Ï, ¿ì¼±Àº XML ÆÄÀÏÀ» ÀÌ¿ëÇÏ¿© ÀúÀåÇÏ´Â ¹æ¹ýÀ¸·Î RSS ÁÖ¼ÒµéÀÇ ¸®½ºÆ®¸¦ °ü¸®ÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
RSS ÁÖ¼ÒµéÀ» °ü¸®Çϱâ À§Çؼ´Â RSS ÁÖ¼Ò¿Í ´õºÒ¾î »çÀÌÆ®¿¡ ´ëÇÑ °£·«ÇÑ ¼³¸í°ú ºÎ°¡ÀûÀÎ ÀÚ·áµéÀÌ Æ÷ÇÔµÇ¸é µË´Ï´Ù. ¿¹¸¦ µé¾î ºí·Î±×ÀÇ À̸§ ¶Ç´Â ºí·Î±×ÀÇ Á¾·ù µî RSS ÁÖ¼Ò¸¦ º¸°í ÀÌÇØÇϱ⠽±µµ·Ï Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. Áö¸é»ó °¡Àå °£´ÜÇÏ°Ô RSS ÆÄÀÏÀÇ °æ·Î¿Í ºí·Î±×ÀÇ Á¦¸ñ Á¤µµ¸¸ °¡Áö°í Àִ Ŭ·¡½º¸¦ ¸¸µé¾î º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
Public Class RssAddress
Public RssURL As String
Public BlogName As String
Public Sub New()
End Sub
Public Sub New(ByVal RssURL As String, ByVal BlogName As String)
Me.New()
Me.RssURL = RssURL
Me.BlogName = BlogName
End Sub
End Class
¾Æ¹«·± ÀÛ¾÷À» ÇÏÁö ¾Ê´Â ±âº» »ý¼ºÀÚ¿Í µ¥ÀÌÅ͸¦ ÀÔ·ÂÇÏ¸ç °´Ã¼¸¦ »ý¼ºÇÏ±â Æí¸®ÇÏ°Ô Çϱâ À§ÇØ RSS ÆÄÀÏÀÇ ÁÖ¼Ò¿Í ºí·Î±×ÀÇ À̸§À» ÀÎÀÚ·Î ¹Þ´Â »ý¼ºÀÚ°¡ ÀÖ½À´Ï´Ù. ¿©±â¼´Â ¾Æ¹«·± ÀÛ¾÷µµ ÇÏÁö ¾Ê´Â ±âº» »ý¼ºÀÚ¸¦ ±»ÀÌ ¼±¾ðÇÑ ÀÌÀ¯°¡ ÀÖ½À´Ï´Ù.
¿ì¸®´Â RSS Á¤º¸µéÀ» ÀúÀåÇϱâ À§Çؼ XML ÆÄÀÏÀ» »ç¿ëÇÏ¸ç ¾ÆÁÖ °£ÆíÇÏ°Ô XML ÆÄÀÏ·Î ¸¸µé±â À§ÇØ Á÷·ÄÈ(serialization)¸¦ »ç¿ëÇÏ·Á°í ÇÕ´Ï´Ù. À̸¦ À§ÇØ ´å³Ý ÇÁ·¹ÀÓ¿öÅ©¿¡¼ Á÷·Äȸ¦ Áö¿øÇÏ´Â System.Xml.Serialization.XmlSerializer Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ·Á°í Çϴµ¥, ¾î¶² °´Ã¼¸¦ Á÷·ÄÈÇϱâ À§ÇÑ Á¶°Ç Áß Çϳª°¡ °´Ã¼´Â ¹Ýµå½Ã ±âº» »ý¼ºÀÚ¸¦ °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ÀÏ¹Ý »ý¼ºÀÚ¿¡ OptionalÀ» »ç¿ëÇÏ¿© ±âº» °ªÀ» ÁöÁ¤ÇØ ÁÖ´Â »ý¼ºÀÚ¸¦ ¸¸µé¾îµµ Á÷·ÄÈ´Â µÇÁö ¾Ê½À´Ï´Ù.
ÀÌ·¸°Ô ÇÑ °³ÀÇ RSS ÆÄÀÏÀÇ Á¤º¸¸¦ °¡Áö°í ÀÖ´Â RssAddress Ŭ·¡½º°¡ ¿Ï¼ºµÇ¾ú½À´Ï´Ù. ÀÌÁ¦ ´Ù¼öÀÇ RssAddressµéÀ» ÀúÀåÇÒ Ä÷º¼Ç Ŭ·¡½º¸¦ ¸¸µé¾î¾ß ÇÕ´Ï´Ù. CollectionBase Ŭ·¡½º¸¦ »ó¼Ó¹Þ°í, Àε¦¼¿Í ¸Þ½îµå µîÀ» ±¸ÇöÇÏ¿© Ä÷º¼Ç Ŭ·¡½º¸¦ ¸¸µå´Â ¹æ¹ýÀº Áö³ È£¿¡¼ RssItemCollection Ŭ·¡½º¸¦ ÅëÇØ ¼Ò°³Çß½À´Ï´Ù. ±×¿Í °°Àº ¹æ¹ýÀ¸·Î RssAddressCollection Ŭ·¡½º¸¦ ¸¸µé¾îÁÝ´Ï´Ù. ±×¸®°í ¿©±â¿¡ XML ÆÄÀϷκÎÅÍ ¼Õ½±°Ô µ¥ÀÌÅ͸¦ ºÒ·¯¿À°í, XML ÆÄÀÏ·Î ¼Õ½±°Ô ÀúÀåÇÒ ¼ö ÀÖ´Â 2°³ÀÇ ¸Þ½îµå¸¦ Ãß°¡ÇÏ·Á°í ÇÕ´Ï´Ù.
| <¸®½ºÆ® 1> RssAddressCollection Ŭ·¡½º | | | |
Imports System.IO
Imports System.Xml.Serialization
Public Class RssAddressCollection
Inherits CollectionBase
Public Shared Function LoadFromXml(ByVal XmlFileName As String) As RssAddressCollection
Dim serializer As New XmlSerializer(GetType(RssAddressCollection))
Dim rssAddrs As RssAddressCollection
Dim sr As New StreamReader(XmlFileName)
rssAddrs = serializer.Deserialize(sr)
sr.Close()
Return rssAddrs
End Function
Public Shared Sub SaveToXml(ByVal XmlFileName As String, ByVal RssAddrs As RssAddressCollection)
Dim serializer As New XmlSerializer(GetType(RssAddressCollection))
Dim sw As New StreamWriter(XmlFileName)
serializer.Serialize(sw, RssAddrs)
sw.Close()
End Sub
...
Collection ±¸Çö °ü·Ã ³»¿ëÀº »ý·«
...
End Class
| |
 |
Ãß°¡ÇÑ ¸Þ½îµåµéÀº Shared Ű¿öµå¸¦ ÀÌ¿ëÇÏ¿© °´Ã¼¸¦ »ý¼ºÇÏÁö ¾Ê¾Æµµ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¼±¾ðÇϰí ÀÖ½À´Ï´Ù. SaveToXml ¸Þ½îµå´Â ÀÎÀÚ·Î ÆÄÀϸí°ú RssAddressCollectionÀ» ¹Þ¾Æ À̸¦ ÇØ´ç ÆÄÀϷΠŬ·¡½ºÀÇ Á÷·ÄÈ °á°ú¸¦ ÀúÀåÇÕ´Ï´Ù. ±×¸®°í LoadFromXml ¸Þ½îµå´Â ÀÎÀÚ·Î ¹ÞÀº ÆÄÀϷκÎÅÍ ¿ªÁ÷·ÄÈµÈ RssAddressCollection Ŭ·¡½º¸¦ ¹ÝÈ¯ÇØ ÁÝ´Ï´Ù.
À̵éÀ» ÀÌ¿ëÇØ¼ ¼Õ½±°Ô °´Ã¼¸¦ XML ÆÄÀÏ·Î ¸¸µé°Å³ª, ÀÌ¹Ì ÀúÀåµÇ¾î ÀÖ´Â XML ÆÄÀϷκÎÅÍ °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ¸¸µé¾îÁø Ŭ·¡½ºµéÀº ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î »ç¿ëÇØº¼ ¼ö ÀÖ½À´Ï´Ù.
' RSS ÁÖ¼ÒµéÀ» Ãß°¡Çϰí, XML ÆÄÀÏ·Î ÀúÀå
Dim rssaddrs As New RssAddressCollection
rssaddrs.Add(New RssAddress("http://php.chol.com/~ppk314/tt/index.xml", "ÇÏ´ÃÀÌ³× ºí·Î±×"))
rssaddrs.Add(New RssAddress("http://namida.pe.kr/tt/index.xml", "³ª¹Ì´Ù´ÔÀÇ ºí·Î±×"))
RssAddressCollection.SaveToXml("MyRssAddressCollection.xml", rssaddrs)
' XML ÆÄÀϷκÎÅÍ °´Ã¼¸¦ »ý¼º
Dim loadedRssAddrs As RssAddressCollection = RssAddressCollection.LoadFromXml("MyRssAddressCollection.xml")
ÀÌÁ¦ RssReader Ŭ·¡½º¸¦ ÇÔ²² ÀÌ¿ëÇÏ¿© RSS ÁÖ¼Òµé·ÎºÎÅÍ ³»¿ëÀ» Àоî¿Í¼ Äֿܼ¡ Ç¥½ÃÇÏ´Â °£´ÜÇÑ ÇÁ·Î±×·¥À» Á¦ÀÛÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù. Å×½ºÆ®¿¡ »ç¿ëÇÒ RSS ÁÖ¼ÒµéÀº ¾ÕÀÇ RSS ÁÖ¼ÒµéÀ» XML ÆÄÀÏ·Î ÀúÀåÇÏ´Â ¿¹Á¦¿¡¼ »ý¼ºÇÑ MyRssAddressCollection.xmlÀ» ÀÌ¿ëÇϵµ·Ï ÇϰڽÀ´Ï´Ù.
| <¸®½ºÆ® 2> RSS ÆÄÀϵé·ÎºÎÅÍ ³»¿ëÀ» Àоî Ç¥½ÃÇÏ´Â ÇÁ·Î±×·¥ | | | |
Dim rssAddrs As RssAddressCollection = RssAddressCollection.LoadFromXml("MyRssAddressCollection.xml")
Dim rssReader As New RSSReader
For addrIndex As Integer = 0 To rssAddrs.Count - 1
Console.WriteLine(rssAddrs(addrIndex).BlogName + " ºí·Î±×ÀÇ ±Û ¸ñ·ÏÀÔ´Ï´Ù.")
rssReader.XmlAddress = rssAddrs(addrIndex).RssURL
rssReader.readItems()
For itemIndex As Integer = 0 To rssReader.Items.Count - 1
Console.WriteLine(rssReader.Items(itemIndex).PubDate.ToString("[MM:dd HH:mm] ") + rssReader.Items(itemIndex).Title)
Next
Next
| |
 |
<¸®½ºÆ® 2>¸¦ ½ÇÇàÇÏ¸é °¢°¢ÀÇ ÁÖ¼Òµé·ÎºÎÅÍ RSS ÆÄÀÏÀ» ºÒ·¯¿Í¼ ´ÙÀ½°ú °°ÀÌ °á°ú¸¦ Ç¥½ÃÇØ ÁÖ°Ô µË´Ï´Ù.
ÇÏ´ÃÀÌ³× ºí·Î±× ºí·Î±×ÀÇ ±Û ¸ñ·ÏÀÔ´Ï´Ù.
[11:09 11:25] »ý°¢¸¸À¸·Ð ¹Ù²îÁö ¾Ê´Â´Ù.
... »ý·« ...
³ª¹Ì´Ù´ÔÀÇ ºí·Î±× ºí·Î±×ÀÇ ±Û ¸ñ·ÏÀÔ´Ï´Ù.
[11:09 15:14] BRIDGET JONES: THE EDGE OF REASON
... »ý·« ...
¿©±â±îÁöÀÇ °úÁ¤À» ÅëÇØ¼ ¿ì¸®´Â RSS ÆÄÀÏ ÁÖ¼Òµé·ÎºÎÅÍ ¸ðµç Á¤º¸¸¦ ¾ò¾î¿À´Â °úÁ¤±îÁö ¿Ï¼ºÇÏ°Ô µÇ¾ú½À´Ï´Ù. RSS ¼öÁý ·Îº¿ Á¦ÀÛ¿¡ ÀÖ¾î¼ °¡Àå ¹ÙÅÁÀÌ µÇ´Â ó¸® ºÎºÐÀ» ¿Ï¼ºÇÑ °ÍÀÔ´Ï´Ù.
RSSÀÇ ³»¿ëÀ» Á¤¸®ÇÏÀÚ
RSS ÆÄÀϵé·ÎºÎÅÍ ºí·Î±×ÀÇ ¸ðµç ³»¿ëµéÀ» °¡Á®¿À´Â °úÁ¤±îÁö ¿Ï¼ºÇÏ°Ô µÇ¾ú½À´Ï´Ù. ÀÌÁ¦ ÀÌ·¯ÇÑ ºí·Î±×ÀÇ ³»¿ëµéÀ» Çϳª·Î Á¤¸®ÇÏ´Â ÀÛ¾÷¸¸À» ³²°ÜµÎ°í ÀÖ½À´Ï´Ù.
Á¤¸®ÇÑ´Ù´Â °ÍÀÇ Àǹ̴ ÀÌ·¸°Ô º¼ ¼ö ÀÖ½À´Ï´Ù. ³»¿ëµé Áß¿¡¼ »õ·Ó°Ô ¾÷µ¥ÀÌÆ®µÈ ³»¿ë°ú ÀÌÀüÀÇ ³»¿ëµéÀ» ºÐ·ùÇØ³»°í, °¢°¢ÀÇ µ¥ÀÌÅ͵éÀ» °¢°¢ ´Ù¸¥ ±âÁØÀ¸·Î ÀúÀåÇÏ´Â °Í°ú ¸¹Àº ºí·Î±×µéÀÇ °¢ ±ÛµéÀÇ ³²´Ù¸¥ ±âÁØÀº ¹«¾ùÀϱî¿ä? ±× ±Û¸¸ÀÌ °¡Áö´Â À¯ÀÏÇÑ Á¤º¸ ¸»ÀÔ´Ï´Ù. ³¯Â¥³ª Á¦¸ñµµ ÀÖÀ» ¼ö ÀÖ°ÚÁö¸¸ ±×°ÍµéÀº ´Ù¸¥ ±ÛÀ̶ó°í ÇÏ´õ¶óµµ °°À» ¼ö ÀÖ´Â °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ À¥¿¡¼ ±× ±ÛÀ» Ç¥½ÃÇÏ´Â ÁÖ¼Ò´Â ´Ü 1°³»ÓÀ̰ÚÁö¿ä?
±×¸®°í Ȥ½Ã¶óµµ RSS ÁÖ¼ÒµéÀÇ ¸®½ºÆ®¿¡ °°Àº RSS ÆÄÀÏÀÌ ¿©·¯ °³°¡ ÀúÀåµÇ´Â ¹®Á¦°¡ »ý±â´õ¶óµµ ÁÖ¼Ò¸¦ ±âÁØÀ¸·Î ÀúÀåÇÑ´Ù¸é °°Àº ±ÛÀÌ 2°³·Î ÀúÀåµÇ´Â ¹®Á¦´Â ¹ß»ýÇÏÁö ¾Ê°Ô µË´Ï´Ù. ÀÌ·¯ÇÑ ³»¿ëµéÀ» ¹ÙÅÁÀ¸·Î RSS ÆÄÀÏÀÇ ³»¿ëµéÀ» ÀúÀåÇÒ µ¥ÀÌÅͺ£À̽º Å×À̺íÀ» ¸¸µé¾îº¸µµ·Ï ÇϰڽÀ´Ï´Ù.
 |
| <Ç¥ 1> RSS ³»¿ëÀ» ÀúÀåÇÒ Rss_Datas Å×À̺í |
Å×À̺íÀÇ ±¸Á¶´Â RssItem°ú ºñ½ÁÇÑ ¸ð¾çÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¿©±â¿¡ Link¿Í PubDate¿¡ À妽º¸¦ °É¾îÁÖµµ·Ï ÇϰڽÀ´Ï´Ù. Â÷ÈÄ¿¡ ÁÖ¼Ò¸¦ ±âÁØÀ¸·Î µ¥ÀÌÅ͸¦ ÀÚÁÖ ºÒ·¯¿À°í, ³¯Â¥¼øÀ¸·Î Á¤·ÄÀ» ¸¹ÀÌ ½ÃµµÇÒ ¿¹Á¤À̱⠶§¹®ÀÔ´Ï´Ù. ¿©±â¿¡ Â÷ÈÄ ºÎ°¡ÀûÀÎ ³»¿ëµéÀ» Ãß°¡ÇÏ¸é µÇÁö¸¸ ÀÌ ½Ã°£¿¡´Â °¡Àå ±âº»ÀûÀÎ ³»¿ëµéÀ» ±âÁØÀ¸·Î ¸¸µé¾î º¸¾Ò½À´Ï´Ù.
ÀÌÁ¦ ÀÌ·¸°Ô ¸¸µé¾îÁø Å×ÀÌºí¿¡ °£ÆíÈ÷ µ¥ÀÌÅ͸¦ µ¿±âÈÇÒ ¼ö ÀÖ´Â ÀúÀå ÇÁ·Î½ÃÀú ÇÑ °³¸¦ ¸¸µé¾î º¸µµ·Ï ÇϰڽÀ´Ï´Ù. ÀÌ ÀúÀåÇÁ·Î½ÃÀú´Â ÀÎÀÚ °ªÀ¸·Î RssItemÀÇ ³»¿ëÀ» ÁÖ¸é µ¥ÀÌÅͺ£À̽º¿Í µ¿±âÈÇÏ°Ô µË´Ï´Ù. Áï µ¥ÀÌÅͺ£À̽º¿¡ ÀÌ¹Ì Á¸ÀçÇÏ´Â °æ¿ì ³»¿ëÀ» ¾÷µ¥ÀÌÆ®Çϰí, Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì »õ·Î¿î ±ÛÀ» Ãß°¡ÇÏ°Ô µË´Ï´Ù. Â÷ÈÄ µ¿±âÈ¿¡ µû¸¥ ¸î °¡Áö Á¶°ÇµéÀ» Ãß°¡ÇϰíÀÚ ÇÒ ¶§¿¡µµ ÀÌ ÀúÀå ÇÁ·Î½ÃÀú¸¦ ÅëÇØ ¸¸µé¸é µË´Ï´Ù. ¿ì¼±Àº °¡Àå ±âº»ÀûÀÎ µ¿±âÈ ÇÁ·Î½ÃÀú¸¦ ¸¸µé¾îº¸µµ·Ï ÇսôÙ.
| <¸®½ºÆ® 3> RSS Á¤º¸¸¦ µ¥ÀÌÅͺ£À̽º¿Í µ¿±âÈÇÏ´Â ÀúÀå ÇÁ·Î½ÃÀú | | | |
CREATE PROCEDURE sp_Rss_DataSync
@Link varchar(200),
@PubDate smalldatetime,
@Title varchar(200),
@Author varchar(50),
@Description text
AS
DECLARE @OldLink varchar(200)
SELECT @OldLink = Link FROM Rss_Datas
WHERE Link = @Link
IF @OldLink IS NULL
BEGIN
INSERT INTO Rss_Datas(Link, GroupIdx, PubDate, Title, Author, Description)
VALUES (@Link, @GroupIdx, @PubDate, @Title, @Author, @Description)
END
ELSE
BEGIN
UPDATE Rss_Datas SET
PubDate = @PubDate,
Title = @Title,
Author = @Author,
Description = @Description
WHERE Link = @Link
END
GO
| |
 |
ÇØ´ç ¸µÅ©¿Í °°Àº ±ÛÀÌ ÀÖ´ÂÁö¸¦ üũÇÏ°í °á°ú¿¡ µû¶ó¼ ±ÛÀ» ÀúÀåÇϰųª, ¾÷µ¥ÀÌÆ®ÇÏ´Â °£´ÜÇÑ Äõ¸® ¹®ÀåµéÀ» »ç¿ëÇÑ ÀúÀå ÇÁ·Î½ÃÀúÀÔ´Ï´Ù. Â÷ÈÄ¿¡ µ¿±âÈ¿¡ ´ëÇÑ ¿©·¯ °¡Áö ±â´ÉµéÀ» Ãß°¡ÇϰíÀÚ ÇÒ ¶§ ÀÌ ÀúÀå ÇÁ·Î½ÃÀú¸¸À» ¼öÁ¤ÇÏ¸é µË´Ï´Ù.
°£´ÜÇÑ ¿¹¸¦ µé¸é, ºí·Î±×¿¡´Â ±ÛÀ» ¾²°í »èÁ¦ÇÏ´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. °°Àº ³»¿ëÀε¥ ´Ù½Ã Á¤¸®Çؼ »õ·Ó°Ô ¾²°íÀÚ ÇÏ´Â °æ¿ìÀÌÁö¿ä.
ÀÌ·± °æ¿ì °°Àº µµ¸ÞÀÎÀ̳ª °°Àº ºí·Î±× ÁÖ¼ÒÀÌÁö¸¸, ¸µÅ©°¡ ¾à°£ ´Þ¶óÁý´Ï´Ù. ÀÌ·± °æ¿ì Á¦¸ñ°ú ÁÖ¼ÒÀÇ ÀϺΰ¡ °°Àº °æ¿ì ±âÁ¸ ±ÛÀÇ ÁÖ¼Ò¸¦ ¾÷µ¥ÀÌÆ®ÇѴٰųª, ¶Ç´Â ½Ã°£´ëº°·Î µ¿±âȸ¦ Á¦ÇÑÇÏ´Â ±â´É µîÀ» µé ¼ö ÀÖ½À´Ï´Ù. ÀÌÁ¦ ÀÌ·¸°Ô ¸¸µç ÀúÀå ÇÁ·Î½ÃÀú¸¦ ½±°Ô »ç¿ëÇÒ ¼ö ÀÖ´Â RssItemSync Ŭ·¡½º¸¦ ¸¸µé¾îº¸µµ·Ï ÇϰڽÀ´Ï´Ù.
| <¸®½ºÆ® 4> RssItemSync Ŭ·¡½º | | | |
Imports System.Data.SqlClient
Public Class RssItemSync
Private sqlCon As SqlConnection
Public Sub New(ByVal ConnectionObject As SqlConnection)
sqlCon = ConnectionObject
End Sub
Public Sub ItemSync(ByVal Item As RSSItem)
Dim isClosed As Boolean = False
If sqlCon.State = ConnectionState.Closed Then
isClosed = True
sqlCon.Open()
End If
Dim sqlCmd As New SqlCommand("sp_Rss_DataSync", sqlCon)
With sqlCmd
.CommandType = CommandType.StoredProcedure
.CommandTimeout = 180
.Parameters.Add(New SqlParameter("@Link", SqlDbType.VarChar)).Value = Item.Link
.Parameters.Add(New SqlParameter("@PubDate", SqlDbType.SmallDateTime)).Value = Item.PubDate
.Parameters.Add(New SqlParameter("@Title", SqlDbType.VarChar)).Value = Item.Title
.Parameters.Add(New SqlParameter("@Author", SqlDbType.VarChar)).Value = Item.Author
.Parameters.Add(New SqlParameter("@Description", SqlDbType.Text)).Value = Item.Description
End With
sqlCmd.ExecuteNonQuery()
If isClosed Then
sqlCon.Close()
End If
End Sub
End Class
| |
 |
¿ì¼± ÀÌ Å¬·¡½º´Â »ý¼ºÀÚ·Î SqlConnectionÀ» ¹Þ½À´Ï´Ù. ±×¸®°í ItemSync ¸Þ½îµå¿¡¼´Â ¿¬°á °´Ã¼°¡ ´ÝÇô ÀÖ´Â °æ¿ì ¿°í ÀÛ¾÷À» ÇÏ°í ´Ù½Ã ´Ý¾ÆÁÖ°í, ¿·Á ÀÖ´Ù¸é ¿¸° »óÅ·ΠÀ¯ÁöÇϵµ·Ï Äڵ带 ¸¸µé¾ú½À´Ï´Ù. ÀÌ´Â ÀÌ ¸Þ½îµå°¡ µ¥ÀÌÅÍ µ¿È¿¡¼ ¿©·¯ ¹ø ¹Ýº¹ »ç¿ëµÇ¹Ç·Î ¿¬°á?´Ý±âÀÇ ÀÛ¾÷À» ¹Ýº¹ÇÏÁö ¾Ê°Ô Çϱâ À§Çؼ °£´ÜÇÏ°Ô ±¸ÇöÇØ º¸¾Ò½À´Ï´Ù.
ÀÌÁ¦ ¿©±â±îÁöÀÇ ¿Ï¼ºµÈ °¢°¢ÀÇ Å¬·¡½ºµéÀ» ÀÌ¿ëÇÏ¿© RSS ÆÄÀϵé·ÎºÎÅÍ µ¥ÀÌÅͺ£À̽º¿Í µ¿±âÈÇÏ´Â ÇÁ·Î±×·¥À» °£´ÜÈ÷ ¸¸µé¾î º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
| <¸®½ºÆ® 5> RSS Á¤º¸¸¦ ÀÐ¾î µ¥ÀÌÅͺ£À̽º¿Í µ¿±âÈÇÏ´Â RSS ¼öÁý ·Îº¿ | | | |
Dim rssAddrs As RssAddressCollection = RssAddressCollection.LoadFromXml("MyRssAddressCollection.xml")
Dim rssReader As New RSSReader
Dim sqlcon As New SqlClient.SqlConnection("[µ¥ÀÌÅͺ£À̽º ¿¬°á ¹®ÀÚ¿]")
Dim ris As New RssItemSync(sqlcon)
Console.WriteLine(rssAddrs.Count + "°³ÀÇ ºí·Î±×ÀÇ ½ÌÅ©¸¦ ½ÃÀÛÇÕ´Ï´Ù.")
sqlcon.Open()
For addrIndex As Integer = 0 To rssAddrs.Count - 1
Console.WriteLine(rssAddrs(addrIndex).BlogName + " ºí·Î±×¸¦ ½ÌÅ© ½ÃÀÛ")
rssReader.XmlAddress = rssAddrs(addrIndex).RssURL
rssReader.readItems()
For itemIndex As Integer = 0 To rssReader.Items.Count - 1
ris.ItemSync(rssReader.Items(itemIndex))
Next
Console.WriteLine(rssAddrs(addrIndex).BlogName + " ºí·Î±× ½ÌÅ© ¿Ï·á!")
Next
sqlcon.Close()
Console.WriteLine("Àüü ½ÌÅ©°¡ ¿Ï·áµÇ¾ú½À´Ï´Ù.")
| |
 |
¿©±â¿¡ ½Ã°£´ëº°·Î ¹Ýº¹Çؼ ÀÛ¾÷À» ¼öÇàÇÏ°Ô Çϰųª, MyRssAddressCollection.xml ÆÄÀÏÀ» ¸Þ¸ðÀåÀÌ ¾Æ´Ñ Á» ´õ ½±°Ô ¼öÁ¤ÇÒ ¼ö ÀÖ´Â ¹æ¹ý¸¸ ¸¸µé¾îÁÖ°í, Ç¥Çö °èÃþÀ» ¸ÚÁö°Ô ²Ù¹Ì´Â °Ç ¿©·¯ºÐµé¿¡°Ô ¸Ã±âµµ·Ï ÇϰڽÀ´Ï´Ù. ¸ÚÁø RSS ¼öÁý ·Îº¿À» ¿Ï¼ºÇØ ÁÖ¼¼¿ä.
RSS ¼öÁý ·Îº¿ÀÇ ¹®Á¦Á¡
À̹ø °Á¸¦ ÅëÇØ¼ ¸¸µé¾îº» RSS ¼öÁý ·Îº¿Àº RSS ÆÄÀÏÀ» ÀÐ°í °ü¸®ÇÏ´Â ÃÖ¼ÒÇÑÀÇ ±â´ÉµéÀ» ºñ±³Àû ½±°Ô ±¸ÇöÇϱâ À§Çؼ ¸¸µé¾îÁø ÇÁ·Î±×·¥ÀÔ´Ï´Ù. ´öºÐ¿¡(?) ÀÌ RSS ¼öÁý ·Îº¿À» ¸¸µé¸é¼ ¿©·¯ ¹®Á¦Á¡µéÀ» ¹ß°ßÇÒ ¼ö ÀÖ¾úÀ» °ÍÀÔ´Ï´Ù. ¹Ù·Î RSS ÆÄÀÏÀ» ÀÏÁ¤ ½Ã°£ °£°ÝÀ¸·Î °è¼ÓÇØ¼ ÀÐ´Â´Ù¸é ³×Æ®¿öÅ© Æ®·¡ÇȰú ±×°ÍÀ» µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåÇÏ´Â °úÁ¤¿¡¼ µ¥ÀÌÅͺ£À̽º 󸮷®ÀÌ »ó´çÈ÷ Áõ°¡ÇÑ´Ù´Â Á¡Àä.
ÀÌ·¯ÇÑ ¹®Á¦Á¡µéÀ» ÇØ°áÇϱâ À§Çؼ´Â RSS ÆÄÀÏÀ» Áö±Ý°ú °°ÀÌ RssTextReader Ŭ·¡½º¸¦ ÀÌ¿ëÇÏÁö ¾Ê°í, HttpRequest, HttpResponse Ŭ·¡½º¸¦ ÀÌ¿ëÇØ¼ RSS ÆÄÀÏÀ» Àд ¹æ¹ýÀ» »ç¿ëÇÏ¸é µË´Ï´Ù. ÀÌ °æ¿ì ÆÄÀÏÀ» ¿äûÇÒ ¶§ HTTP ÇÁ·ÎÅäÄÝ¿¡ ÀÖ´Â If-Modified-Since Çʵ带 »ç¿ëÇÏ¸é º¯°æµÇÁö ¾ÊÀº ÆÄÀÏÀÇ °æ¿ì µ¥ÀÌÅÍÀÇ ³»¿ë ´ë½Å¿¡ Çì´õÀÇ °ª¸¸ ³Ñ¾î¿À°Ô µÇ¹Ç·Î Æ®·¡ÇÈÀº ¹°·Ð ó¸®ÇØ¾ß ÇÒ µ¥ÀÌÅ͵µ ÁÙ¾îµé°Ô µË´Ï´Ù.
 |
| <±×¸²1> RSS ³»¿ëÀ» ÀúÀåÇÒ Rss ¼öÁý·Îº¿ÀÇ ¿ø¸® |
±×¸®°í RSS ÆÄÀÏÀÇ ÁÖ¼Ò°¡ ¸î °³ ¾È µÇ´Â Áö±Ý »óÅ¿¡¼´Â »ó°üÀÌ ¾øÁö¸¸, 100°³°¡ ³Ñ¾î°¡´Â °æ¿ì Àüü RSS ÆÄÀÏÀ» ½ÌÅ©ÇÏ´Â ½Ã°£Àº Á¡Á¡ ±æ¾îÁö°Ô µË´Ï´Ù. ÇÏÁö¸¸ ÀÚ¼¼È÷ »ìÆìº¸¸é µ¥ÀÌÅͺ£À̽º¸¦ ó¸®ÇÏ´Â ½Ã°£º¸´Ù´Â ³×Æ®¿öÅ©¿¡¼ ÆÄÀÏÀ» ºÒ·¯¿À´Â °Í¿¡ »ó´çÇÑ ½Ã°£ÀÌ ¼Ò¿äµÇ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ºÎºÐÀº ¾²·¹µå¸¦ ÀÌ¿ëÇÏ¿© ó¸®ÇÏ¸é ´õ¿í ºü¸¥ ¼Óµµ·Î ½ÌÅ© ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Â RSS ¼öÁý ·Îº¿À» ¸¸µé ¼ö ÀÖÀ» °ÍÀ¸·Î »ý°¢µË´Ï´Ù.
À̹ۿ¡µµ ÀÏÁ¤ ½Ã°£ °£°ÝÀ¸·Î ¿Ã¶ó¿À´Â, ÈçÈ÷ ¡®µµ¹è¡¯¶ó°í ºÒ¸®´Â ±Ûµé¿¡ ´ëÇØ¼´Â ½ÌÅ©ÇÏÁö ¾Ê°Ô ÇÏ´Â ¹æ¹ý µî ¿©·¯ °¡Áö ±â´Éµé¿¡ ´ëÇØ¼ »ý°¢ÇØ º¸±â ¹Ù¶ø´Ï´Ù. ¿©±â±îÁö ¿Ï¼ºµÇ¾ú´Ù¸é ASP.NETÀ» ÀÌ¿ëÇÏ¿© ¸ÞŸ »çÀÌÆ®ÀÇ ¸ð½ÀÀ» ¸¸µå´Â ¸¶Áö¸· °úÁ¤Àº ¿©·¯ºÐ¿¡°Ô ¸Ã°Üµµ µÇ°ÚÁö¿ä?
¸ÞŸ »çÀÌÆ® ¿Ï¼ºÀ» À§Çؼ ¾ÕÀ¸·Î ÇØ¾ß ÇÒ Àϵé
[1] RSS ÆÄÀÏÀ» Àоî¿À´Â ºÎºÐÀÇ º¸¿Ï
[2] ½ÌÅ© ±â´ÉÀ» ¸ÖƼ ¾²·¹µå¸¦ ÀÌ¿ëÇÏ¿© ó¸®Çϱâ
[3] µ¥ÀÌÅͺ£À̽º ½ÌÅ© ±â´ÉÀÇ °È(µµ¹è ¹æÁö µîÀÇ ±â´É)
[4] ASP.NETÀ¸·Î À¥ »çÀÌÆ® Á¦ÀÛÇϱâ
´õ ¸ÚÁø ¸ÞŸ »çÀÌÆ®¸¦ ²Þ²Ù´Ù
¾Æ½±°Ôµµ ±¹³» 3°³ ¸ÞŸ »çÀÌÆ®µéÀÇ ±â´ÉÀº ¸ðµÎ ºñ½ÁÇÕ´Ï´Ù. RSS ÆÄÀÏÀ» ÀÐ°í ±×°ÍÀ» Ç¥½ÃÇØ ÁÖ´Â ±âº»ÀûÀÎ ±â´ÉµéÀÌÁÒ. ¸ÞŸ »çÀÌÆ®ÀÇ µîÀåÀº ¿À·¡ µÇ¾úÁö¸¸ ¾ÆÁ÷µµ ¸ÞŸ »çÀÌÆ®´Â °ÉÀ½¸¶ ¼öÁØÀ̶ó°í ¸»ÇÏ°í ½Í½À´Ï´Ù. ÀÌ ¸»Àº ¾ÆÁ÷µµ ÀÌ ºÎºÐÀº ¸¹Àº ½ÇÇè°ú µµÀü Á¤½ÅÀ» Å×½ºÆ®ÇØ º¼ ¼ö ÀÖ´Â ¹Ì°³Ã´Áö¶õ ¸»ÀÔ´Ï´Ù.
ÀÌ °Á¸¦ ÅëÇØ ¸ÞŸ »çÀÌÆ®¸¦ ¸¸µé±â À§ÇÑ ¾ÆÁÖ ±âº»ÀûÀÎ ±â¼úµéÀ» ÀÍÇû´Ù¸é ÀÌÁ¦ ±×°ÍÀ» Ȱ¿ëÇÏ¿© Áö±Ý±îÁö ¾ø¾ú´ø »õ·Î¿î ¸ÞŸ »çÀÌÆ®¸¦ ¼³°èÇØ º¸´Â °ÍÀº ¾î¶³±î¿ä? Àú´Â ÀÎÅÍ³Ý °±¹ ´ëÇѹα¹ÀÌ ºí·Î±×¿¡¼µµ °±¹ÀÌ µÇ±â¸¦ ¹Ù¶ó¸ç ¿À´Ãµµ ´õ ¸ÚÁø ¸ÞŸ »çÀÌÆ®¸¦ ²Þ²Ù°í ÀÖ½À´Ï´Ù. ÀÌÁ¦ ¿©·¯ºÐÀÇ »ó»ó·ÂÀ» º¸¿©ÁÖ¼¼¿ä.@
* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ Á¦ÈÞ¸ÅüÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.