Postei nesse último final-de-semana uma classe em PHP que fiz para acessar a API do BlogBlogs de uma forma fácil.
A API do BlogBlogs retorna através da arquitetura REST arquivos XML que representam informações do perfil de um usuário do BlogBlogs e de blogs cadastrados no sistema.
Primeiramente, criei duas classes, que abstraem esses dados em forma de objetos. Uma classe é a BlogBlogsBlog, um bean para a entidade blog, e outra a BlogBlogsUser, que por sua vez é um bean para o usuário do sistema. Cada classe recebe no construtor os atributos.
/**
* Dados do usuário do BlogBlogs
*/
class BlogBlogsUser {
function __construct($username, $firstname, $lastname, $fullname, $thumbnailpicture, $profilepage, $blogs, $favorites, $fans) {
$this->userName = $username;
$this->firstName = $firstname;
$this->lastName = $lastname;
$this->fullName = $fullname;
$this->thumbnailPicutre = $thumbnailpicture;
$this->profilePage = $profilepage;
$this->blogsCount = $blogs;
$this->favoritesCount = $favorites;
$this->fansCount = $fans;
$this->blogs = array();
}
}
/**
* Dados de um blog do BlogBlogs
*/
class BlogBlogsBlog {
function __construct($name, $url, $rssurl, $blogpage, $lastupdate, $inboundblogs, $inboundlinks, $rank, $lang) {
$this->name = $name;
$this->url = $url;
$this->rssUrl = $rssurl;
$this->blogPage = $blogpage;
$this->lastUpdate = $lastupdate;
$this->inboundBlogs = $inboundblogs;
$this->inboundLinks = $inboundlinks;
$this->rank = $rank;
$this->lang = $lang;
}
}
Com isso, podia continuar a implementação. Criei a classe BlogBlogsService. Guardei no atributo apiUrl a url da API, e no construtor da classe recebo o valor da chave da API do BlogBlogs (semelhante ao processo de se usar a API do Google Maps, por exemplo).
Então criei alguns métodos, e os que são úteis para o desenvolvedor:
- setUserName(): seta o username do usuário pelo qual faremos a busca no sistema do BlogBlogs. O método automaticamente busca todos os blogs e os dados do perfil do usuário
- getBlogByUrl(): faz a busca por um blog através da sua url
Assim, temos implementadas todas as buscas possíveis pela API.
class BlogBlogsService {
private $apiUrl = "http://api.blogblogs.com.br/api/rest/";
private $userKey;
private $doc;
/**
* construtor: recebe a chave da API do BlogBlogs
* para gerar, acesse http://blogblogs.com.br/dev/chave
*/
function __construct($k) {
$this->userKey = $k;
$this->user = null;
}
/**
* recebe o userName no blogblogs e faz a consulta
*/
function setUserName($userName) {
$path = $this->apiUrl . "userinfo?key=" . $this->userKey . "&username=" . $userName;
$this->doc = new DOMDocument();
$this->doc->load($path);
//verifica erros: caso tenha um nó com namespace error
if($this->doc->getElementsByTagName("error")->length==1) {
$this->errorMsg = $this->doc->getElementsByTagName("error")->item(0)->nodeValue;
throw new Exception($this->errorMsg);
return false;
}
if($this->doc->getElementsByTagName("result")->length!=1)
return;
//dados do usuário
$userset = $this->doc->getElementsByTagName("result")->item(0);
$blogBlogsUser = new BlogBlogsUser($userset->getElementsByTagName("username")->item(0)->nodeValue,
$userset->getElementsByTagName("firstname")->item(0)->nodeValue,
$userset->getElementsByTagName("lastname")->item(0)->nodeValue,
$userset->getElementsByTagName("fullname")->item(0)->nodeValue,
$userset->getElementsByTagName("thumbnailpicture")->item(0)->nodeValue,
$userset->getElementsByTagName("profilepage")->item(0)->nodeValue,
$userset->getElementsByTagName("blogs")->item(0)->nodeValue,
$userset->getElementsByTagName("favorites")->item(0)->nodeValue,
$userset->getElementsByTagName("fans")->item(0)->nodeValue);
//dados de cada blog
foreach($this->doc->getElementsByTagName("weblog") as $blog) {
$blog = $this->createBlogWithXMLNode($blog);
//$blogBlogsUser->addBlog($blog);
$this->addBlogToUser($blogBlogsUser, $blog);
}
$this->user = $blogBlogsUser;
return true;
}
/**
* recupera um blog por uma url
*/
function getBlogByUrl($url) {
$path = $this->apiUrl . "bloginfo?key=" . $this->userKey . "&url=" . $url;
$this->doc = new DOMDocument();
$this->doc->load($path);
if($this->doc->getElementsByTagName("weblog")->length!=1)
return;
$blog = $this->doc->getElementsByTagName("weblog")->item(0);
$myBlog = $this->createBlogWithXMLNode($blog);
return $myBlog;
}
function createBlogWithXMLNode($node) {
$blog = new BlogBlogsBlog($node->getElementsByTagName("name")->item(0)->nodeValue,
$node->getElementsByTagName("url")->item(0)->nodeValue,
$node->getElementsByTagName("rssurl")->item(0)->nodeValue,
$node->getElementsByTagName("blogpage")->item(0)->nodeValue,
$node->getElementsByTagName("lastupdate")->item(0)->nodeValue,
$node->getElementsByTagName("inboundblogs")->item(0)->nodeValue,
$node->getElementsByTagName("inboundlinks")->item(0)->nodeValue,
$node->getElementsByTagName("rank")->item(0)->nodeValue,
$node->getElementsByTagName("lang")->item(0)->nodeValue);
return $blog;
}
function addBlogToUser($user, $blog) {
array_push($user->blogs, $blog);
}
}
Vamos ver um passo-a-passo de como ver um atributo de um usuário:
$minha_chave = “XXXXXXXXXXXXXXX”;
$bbService = new BlogBlogsService($minha_chave);
$bbService->setUserName("ChrisB");
echo $bbService->user->fullName;
Se quisermos listar os blogs dele, exibindo as urls dos mesmos, acessamos a lista de BlogBlogsBlog que o BlogBlogsUser possue:
foreach($bbService->user->blogs as $blog) {
$blog->url . “<br />”;
}
Ainda podemos fazer a busca diretamente po um blog, pela sua url:
$bbService->getBlogByUrl(”http://www.chrisb.com.br/blog/”)
//para exibir o nome do blog
$bbService->getBlogByUrl(”http://www.chrisb.com.br/blog/”)->name;
Creio que os exemplos, mesmo simples, mostram a facilidade de uso. []s!