terça-feira, 12 de dezembro de 2006

Migração de comentários dos posts antigos

Estou aqui tentando migrar os posts antigos. O script anterior funciona bem, mas não conseguiu ajustar os labels e nem trazer os comentários dos posts. Sobre esse último item, a interface Google.GData não permite fazer como eu gostaria, que envolve manter o nome do autor original. Então tivemos que improvisar:

string blogId = "6668893451803848875"
string postId = "8836808573838150306";

WebClient client = new WebClient();
string conteudo =
Encoding.Default.GetString(
client.DownloadData(
String.Format(
"https://beta.blogger.com/comment.g?blogID={0}&postID={1}",
blogId, postId)));

string securityToken =
conteudo.Substring(
conteudo.IndexOf("securityToken") + 22, 42);
string postData =
String.Format(
"iden=Other&username=&password=&blogID={0}&postID={1}&securityToken={2}&anonName={3}&anonURL=&postBody={4}&publish=true",
blogId, postId,
HttpUtility.UrlEncode(securityToken),
HttpUtility.UrlEncode("John Doe"),
HttpUtility.UrlEncode("lalala"));

client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
byte[] responseArray =
client.UploadData(
"https://beta.blogger.com/comment.do",
"POST", Encoding.Default.GetBytes(postData));
Bom, primeiro pegamos o token de autorização na página onde o post é feito manualmente, e depois setamos os campos para refletir todas as informações do formulário, fazendo o encoding destas informações.

Os métodos HTTP GET e POST, como a imensa maioria deve saber, tem como diferença básica a presença (GET) ou não (POST) dos parâmetros de formulário no endereço da página. NO caso do POST, um tipo de conteúdo diferente é informado na solicitação HTTP, enquanto os dados do formulário vão no corpo da solicitação.

Como você já deve ter imaginado, isso permite que você interaja com qualquer tipo de formulário online, postando os dados que desejar. Bom por um lado, ruim pelo outro: é assim que os spammers conseguem obter informações de emails em diversas páginas, bem como postar de maneira indevida em blogs. Para dificultar isso, foi criado o conceito de CAPTCHA, para obter informações que "só um humano" conseguiria informar.

Voltando ao lado bom, você pode coletar informações de outras aplicações web e talvez consolidá-la em um único local. Caso esta aplicação de terceiros solicite alguma autenticação, que na grande maioria dos casos terá sua evidência de autorização armazenada em cookies (de sessão ou não), consulte sobre a classe System.Net.CookieCollection que ela pode te ajudar a adaptar seu código a essa situação.

1 comentários:

Fabio Lima disse...

Olá Rubens!

Estou tentando fazer aqui um form para postar comentários diretamente na página inicial de meu blog (fabiolimace.blogspot.com). Pra falar a verdade ele está quase pronto. O único problema eu acho que é esse parametro "securityToken". Parece ser uma chave com validade. Com ele eu posso comentar em vários posts. Quando passa um tempo, já não consigo mais. Aparece uma mensagem de erro na pagina "comment.g". Você sabe como driblar esse problema do securityToken?

A propósito, gostei do seu blog. Aceita parceria? (fabiolimace.blogspot.com)