|
<%@ Import Namespace="System" %> <%@ Import Namespace="System.IO" %> <%@ Import Namespace="System.Net" %> <%@ Import Namespace="System.Text" %> <script runat="server"> Dim discussionGroupPage As String = "http://graph.facebook.com/YOURPUBLICGROUP/feed?limit=" ' URL to Graph API of Group Wall Dim rssCacheClear As Integer = 0 ' 1 = clear server-cache, 0 = do not clear server-cache. ' RSS Content Provider Data Dim rssDescriptionLen As Integer = 60 ' Number of characters to allow in the poster's post (description) Dim rssIncludeHeader As Integer = 0 ' 0 = do not include RSS provider data (below), 1 = include Dim feed_title As String = "Public Group Wall Title" Dim feed_link As String = "http://www.facebook.com/YOURPUBLICGROUP/" Dim feed_description As String = "Discussion Feed" Dim feed_language As String = "en-us" Dim feed_pubdate As String = "20 Apr 2007 9:40:00 GMT" Dim feed_copyright As String = String.Empty Dim feed_webmaster As String = "webmaster@yoursite.com" ' Do Not Use Dim discussionPageData() As String Dim discussionPageDataCount As Integer = 1 Dim crawlAgent As String = Nothing Dim crawlError As String = Nothing ' TRAP CONNECT ERRORS IN CRAWLPAGE - SEND TO GLOBAL FOR CHECKING Private Function crawlPage(ByVal URL As String) As String Dim crawlOutput As String = Nothing Dim crawlMethod As String = "GET" Dim crawlURL As String = URL Try Dim myRequest As HttpWebRequest = CType(WebRequest.Create(crawlURL), HttpWebRequest) myRequest.UserAgent = crawlAgent myRequest.Method = crawlMethod Dim myResponse As HttpWebResponse = CType(myRequest.GetResponse(), HttpWebResponse) Dim streamResponse As Stream = myResponse.GetResponseStream() Dim streamRead As New StreamReader(streamResponse, Encoding.ASCII) ' .Net not swift enough to pick up line breaks via vbcrlf or vbcr in the stream. Hodge-podge it. Dim hodgepodge As String = Replace(streamRead.ReadToEnd(), " ", "***REPLACEHERE***") ' 27 spaces hodgepodge = Replace(hodgepodge, " ", "***REPLACEHERE***") ' 25 spaces hodgepodge = Replace(hodgepodge, " ", "***REPLACEHERE***") ' 23 spaces hodgepodge = Replace(hodgepodge, " ", "***REPLACEHERE***") ' 21 spaces hodgepodge = Replace(hodgepodge, " ", "***REPLACEHERE***") ' 20 spaces hodgepodge = Replace(hodgepodge, " ", "***REPLACEHERE***") ' 15 spaces hodgepodge = Replace(hodgepodge, " ", "***REPLACEHERE***") ' 12 spaces hodgepodge = Replace(hodgepodge, " ", "***REPLACEHERE***") ' 9 spaces hodgepodge = Replace(hodgepodge, " ", "***REPLACEHERE***") ' 6 spaces hodgepodge = Replace(hodgepodge, " ", "***REPLACEHERE***") ' 3 spaces Dim docTmp() As String = Split(hodgepodge, "***REPLACEHERE***") For Z As Integer = 0 To UBound(docTmp) redim preserve discussionPageData(discussionPageDataCount) : discussionPageData(discussionPageDataCount) = docTmp(Z) discussionPageDataCount = discussionPageDataCount + 1 Next streamRead.Close() streamResponse.Close() myResponse.Close() Catch ex As Exception crawlError = Server.HtmlEncode(ex.Message) End Try End Function Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) ' Get User's Agent Data crawlAgent = Request.UserAgent ' Querystring Data Dim feedName As String = CStr(Request.QueryString("name")) If Len(feedName) = 0 Then : feedName = "default" : End If Dim maxFeedsTotalAccept As Integer = CInt(Request.QueryString("feedNumber")) If maxFeedsTotalAccept <= 0 Then : maxFeedsTotalAccept = 10 : End If discussionGroupPage = discussionGroupPage & maxFeedsTotalAccept ' Do Not Use Dim saved_ids() As String Dim saved_messages() As String Dim savedCount As Integer = -1 Dim rssFeed As String = Nothing Dim feedContent As String = Nothing If rssCacheClear = 0 Then ' Build Fresh RSS If HttpContext.Current.Cache(feedName) Is Nothing Then ' Load Wall Page crawlPage(discussionGroupPage) dim likes_flag As Integer = 0 dim comments_flag As Integer = 0 dim likes_comments_reset As Integer = 0 dim step_started As Integer = 0 dim step_completed As Integer = 0 dim id_data As String = Nothing dim message_data As String = Nothing For X As Integer = 0 TO discussionPageDataCount - 2 dim line As String = discussionPageData(X) dim line_advance As String = discussionPageData(X + 1) If InStr(line, """likes""") > 0 Then likes_flag = 1 End if If InStr(line, """comments""") > 0 Then comments_flag = 1 End if if likes_comments_reset = 1 Then likes_flag = 0 : comments_flag = 0 End if if likes_flag = 0 AND comments_flag = 0 AND likes_comments_reset = 0 Then if step_started = 1 Then if step_completed > 0 Then if step_completed = 3 Then if InStr(line, """message"": """) > 0 Then message_data = Split(line, """")(3) step_completed = 4 savedCount = savedCount + 1 ' Clip excess text If Len(message_data) > rssDescriptionLen Then : message_data = Mid(message_data, 1, rssDescriptionLen) & "..." : End If redim preserve saved_ids(savedCount) : saved_ids(savedCount) = "http://graph.facebook.com/" & id_data & "/picture" : id_data = "" redim preserve saved_messages(savedCount) : saved_messages(savedCount) = message_data : message_data = "" End if End if if step_completed = 2 Then if InStr(line, """id"": """) > 0 Then id_data = Split(line, """")(3) step_completed = 3 End if End if if step_completed = 1 Then if InStr(line, """from"": {") > 0 OR InStr(line, """to"": {") > 0 Then step_completed = 2 End if End if End if if InStr(line, "{") > 0 AND step_completed = 0 Then if InStr(line_advance, """id"":") > 0 Then step_completed = 1 End if End if if step_completed = 4 Then : step_completed = 0 : End if End if if InStr(line, """data"": [") > 0 AND step_started = 0 Then : step_started = 1 : End if Else if likes_comments_reset = 1 Then : likes_comments_reset = 0 : End if if InStr(line, """count""") > 0 Then likes_comments_reset = 1 End if End if Next ' Generate Output if savedCount > -1 Then ' Assemble Data Into RSS Dim feedStep As Integer = 0 For R As Integer = 0 To savedCount feedStep = feedStep + 1 if feedStep <= maxFeedsTotalAccept Then feedContent = feedContent & "<item>" & vbCrLf feedContent = feedContent & "<title>" & feed_title & "</title>" & vbCrLf feedContent = feedContent & "<link>" & feed_link & "</link>" & vbCrLf feedContent = feedContent & "<description>" & Server.HtmlEncode("<img align=""left"" src=""" & saved_ids(R) & """ border=""0"" /> ") & Server.HtmlEncode(Replace(saved_messages(R), "'", "'")) & "</description>" & vbCrLf feedContent = feedContent & "<author></author>" & vbCrLf feedContent = feedContent & "<date>" & feed_pubdate & "</date>" & vbCrLf feedContent = feedContent & "</item>" & vbCrLf End if Next Else ' Nothing Found If Len(crawlError) <= 0 Then feedContent = feedContent & "<item>" & vbCrLf feedContent = feedContent & "<title>Page Found But Data Not Recognized</title>" & vbCrLf feedContent = feedContent & "<link></link>" & vbCrLf feedContent = feedContent & "<description>Page Found But Data Not Recognized</description>" & vbCrLf feedContent = feedContent & "<author></author>" & vbCrLf feedContent = feedContent & "<date>01 Jan 1900 00:00:01 GMT</date>" & vbCrLf feedContent = feedContent & "</item>" & vbCrLf End If End if If Len(crawlError) <= 0 Then ' Compile RSS Data if rssIncludeHeader = 1 Then rssFeed = rssFeed & "<rss version=""2.0"">" & vbCrLf End if rssFeed = rssFeed & "<channel>" & vbCrLf If rssIncludeHeader = 1 Then rssFeed = rssFeed & "<title>" & feed_title & "</title>" & vbCrLf rssFeed = rssFeed & "<link>" & feed_link & "</link>" & vbCrLf rssFeed = rssFeed & "<description>" & feed_description & "</description>" & vbCrLf rssFeed = rssFeed & "<language>" & feed_language & "</language>" & vbCrLf rssFeed = rssFeed & "<date>" & feed_pubdate & "</date>" & vbCrLf rssFeed = rssFeed & "<copyright>" & feed_copyright & "</copyright>" & vbCrLf rssFeed = rssFeed & "<webmaster>" & feed_webmaster & "</webmaster>" & vbCrLf End If rssFeed = rssFeed & feedContent rssFeed = rssFeed & "</channel>" & vbCrLf if rssIncludeHeader = 1 Then rssFeed = rssFeed & "</rss>" End if ' Save Into Server Cache HttpContext.Current.Cache.Add(feedName, rssFeed, Nothing, DateTime.Now.AddDays(1), System.Web.Caching.Cache.NoSlidingExpiration, CacheItemPriority.Normal, Nothing) End If ' End Len(crawlError) <= 0 Else ' Use RSS From Server Cache rssFeed = CType(HttpContext.Current.Cache(feedName), String) End if ' End HttpContext.Current.Cache(feedName) Is Nothing Else ' Clear Server Cache HttpContext.Current.Cache.Remove(feedName) ' Compile RSS Data feedContent = feedContent & "<item>" & vbCrLf feedContent = feedContent & "<title>Server Cache Cleared</title>" & vbCrLf feedContent = feedContent & "<link></link>" & vbCrLf feedContent = feedContent & "<description>Server Cache Cleared</description>" & vbCrLf feedContent = feedContent & "<author></author>" & vbCrLf feedContent = feedContent & "<date>01 Jan 1900 00:00:01 GMT</date>" & vbCrLf feedContent = feedContent & "</item>" & vbCrLf if rssIncludeHeader = 1 Then rssFeed = rssFeed & "<rss version=""2.0"">" & vbCrLf End if rssFeed = rssFeed & "<channel>" & vbCrLf If rssIncludeHeader = 1 Then rssFeed = rssFeed & "<title>" & feed_title & "</title>" & vbCrLf rssFeed = rssFeed & "<link>" & feed_link & "</link>" & vbCrLf rssFeed = rssFeed & "<description>" & feed_description & "</description>" & vbCrLf rssFeed = rssFeed & "<language>" & feed_language & "</language>" & vbCrLf rssFeed = rssFeed & "<date>" & feed_pubdate & "</date>" & vbCrLf rssFeed = rssFeed & "<copyright>" & feed_copyright & "</copyright>" & vbCrLf rssFeed = rssFeed & "<webmaster>" & feed_webmaster & "</webmaster>" & vbCrLf End If rssFeed = rssFeed & feedContent rssFeed = rssFeed & "</channel>" & vbCrLf if rssIncludeHeader = 1 Then rssFeed = rssFeed & "</rss>" End if End if ' End rssCacheClear = 0 ' Generate Output Response.Buffer = False If rssIncludeHeader = 1 Then Response.ContentType = "application/rss+xml" Else Response.ContentType = "text/xml" End If Response.Write("<" & "?" & "xml version=""1.0"" encoding=""utf-8""" & "?" & ">" & vbCrLf) Response.Write(rssFeed) End Sub </script> |