Malfunzionamento Feed Rss corretto

Per un baco presente in SubText i feed Rss non sono formattati correttamente in quanto i link alle immagini sono assoluti (con link del tipo "/aaa/bbb.ccc") mentre i feed Rss permettono l'utilizzo esclusivamente di url complete (con link del tipo "http://hostname.domain/aaa/bbb.ccc").

Ho 2 scelte: modificare la base dati e le relative sp di inserimento in modo che vi siano solo url complete, oppure modificare la stored procedure di estrazione dei dati per la creazione dei feed.

Da  un punto di vista di performance sarebbe preferibile modificare la parte di inserimento dei dati in quanto questi vengono modificati poche volte, ma la potenziale molteplicità di punti di ingresso e il risultato di non avere più url assolute (che da un punto di vista web sono preferibili a quelle complete non fosse altro nel caso si volesse modificare il dominio...) mi ha convinto a modificare la SP di estrazione.

Il problema si è complicato quando ho notato che la Stored Procedure in questione viene utilizzata sia per creare il feed in questione sia per la visualizzazione dei contenuti. Inoltre il campo contente l'articolo è di tipo ntext il che non permette di utilizzare la funzione replace necessaria per correggere il contenuto del db. Per utilizzare tale funzione è necessario convertire il campo in un nvarchar la cui lunghezza massima è di 4000 caratteri e quindi potenzialmente si possono troncare gli articoli più lunghi cosa accettabile per un feed Rss mano per il blog.

Il risultato della reingenierizzazione della SP subtext_GetConditionalEntries è il seguente:

"

CREATE PROC [dbo].[subtext_GetConditionalEntries]
(
 @ItemCount int
 , @PostType int
 , @PostConfig int
 , @BlogId int = NULL
 , @IncludeCategories bit = 0
)
AS

CREATE Table #IDs 

  TempId int IDENTITY (0, 1) NOT NULL, 
  Id int not NULL 
)

INSERT #IDs (Id) 
SELECT [Id]  
FROM [dbo].[subtext_Content]
WHERE PostType = @PostType
 AND BlogId = COALESCE(@BlogId, BlogId)
 AND PostConfig & @PostConfig = @PostConfig
ORDER BY ISNULL([DateSyndicated], [DateAdded]) DESC

IF @IncludeCategories = 0
BEGIN
 SET ROWCOUNT @ItemCount
 SELECT BlogId
  , [dbo].[subtext_Content].[Id]
  , Title
  , DateAdded
 -- Fix Complete URL for Rss Feed (make absolute url complete)
  , [Text]
 -- End Fix
  , [Description]
  , PostType
  , Author
  , Email
  , DateUpdated
  , FeedbackCount = ISNULL(FeedbackCount, 0)
  , PostConfig
  , EntryName
  , DateSyndicated
 FROM [dbo].[subtext_Content]
  INNER JOIN #IDs ON #IDs.[Id] = [dbo].[subtext_Content].[Id]
 ORDER BY #IDs.TempId
END
ELSE  -- @IncludeCategories =1 (mostly used for RSS Feed)
BEGIN
-- Fix Complete URL for Rss Feed (find out the hostname)
 DECLARE @CompleteURL varchar(100)
 SELECT  @CompleteURL = '="http://' + host + '/' FROM Subtext_Config WHERE blogid=@blogID
-- End Fix
 SET ROWCOUNT @ItemCount
 SELECT BlogId
  , [dbo].[subtext_Content].[Id]
  , Title
  , DateAdded
-- Fix Complete URL for Rss Feed (make absolute url complete)
  , replace(convert(nvarchar(4000), [Text]), '="/', @CompleteURL) AS [Text]
-- End Fix
  , [Description]
  , PostType
  , Author
  , Email
  , DateUpdated
  , FeedbackCount = ISNULL(FeedbackCount, 0)
  , PostConfig
  , EntryName
  , DateSyndicated
 FROM [dbo].[subtext_Content]
  INNER JOIN #IDs ON #IDs.[Id] = [dbo].[subtext_Content].[Id]
 ORDER BY #IDs.TempId

 SELECT c.Title 
   , p.[Id]
 FROM [dbo].[subtext_Links] l
  INNER JOIN #IDs p ON l.[PostID] = p.[ID] 
  INNER JOIN [dbo].[subtext_LinkCategories] c ON l.CategoryID = c.CategoryID
 ORDER BY p.[TempID] DESC
END
DROP TABLE #IDs
GO

"

Ora è tutto OK

Michele

posted @ Sunday, January 28, 2007 7:26 PM

Print
Comments have been closed on this topic.
«November»
SunMonTueWedThuFriSat
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345