Mostrando postagens com marcador Blogspot. Mostrar todas as postagens
Mostrando postagens com marcador Blogspot. Mostrar todas as postagens

terça-feira, 12 de dezembro de 2006

1

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.

segunda-feira, 4 de dezembro de 2006

0

Sobre este blog

O médico disse que escrever pode ajudar a fazer as vozes parerem. Vamos ver.

Hi ALL! Has been a long time...

Pois é, depois de um longo tempo sem escrever na internet, resolvi criar este blog como uma forma de devolver o conteúdo do ASP4Developers.com.br para a comunidade e poder voltar a ter um canal pra falar um pouco do que estou fazendo.

Certamente o conteúdo antigo está desatualizado em relação às novas tecnologias disponíveis, mas é bom pra matar a saudade. E também foi bom por poder olhar para o namespace Google.GData.Client, que permite escrever código gerenciado para subir e ler conteúdo no Blogger.

Depois de penar um pouco, por conta de estar usando o Blogspot beta e pela falta de códigos consistentes na documentação, montei o snippet abaixo:

using System;
using System.IO;
using System.Net;
using System.Xml;
using Google.GData.Client;

namespace Testes
{
///


/// Summary description for Class1.
///

class Class1
{
///
/// The main entry point for the application.
///

[STAThread]
static void Main(string[] args)
{
string blogId = "6668893451803848875";
Uri postUrl = new Uri(String.Format("http://beta.blogger.com/feeds/{0}/posts/full", blogId));

Service blogger = new Service("blogger", "ASP4D-DataTransfer");
blogger.setUserCredentials("rubens.farias@gmail.com", "password");

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"C:\Projetos\Testes\asp4d.xml");
XmlNodeList links = xmlDoc.SelectNodes("//Link[@URL='' and @GroupId != 'g0001' and @GroupId != 'g0006']");
i = 0;
foreach(XmlElement link in links)
{
Console.WriteLine( "Carregando {0} de {1}", ++i, links.Count);
XmlElement user = (XmlElement)xmlDoc.SelectSingleNode(String.Format("//User[@UserId='{0}']", link.GetAttribute("UserId")));

XmlElement group = (XmlElement)xmlDoc.SelectSingleNode(String.Format("//Group[@GroupId='{0}']", link.GetAttribute("GroupId")));
AtomCategory category = new AtomCategory(group.GetAttribute("Name"));

AtomEntry newPost = new AtomEntry();
newPost.Title.Text = link.GetAttribute("Subject");
newPost.Published = DateTime.Parse(link.GetAttribute("TS"));
newPost.Content.Content = link.InnerText;
newPost.Categories.Add(category);
blogger.Insert(postUrl, newPost);
}
}
}
}

Agora estou querendo subir os comentários dos posts, mas não é possível fazer isso diretamente. Vou pensar em um gato e depois posto ele aqui.

[]'s

Rubens