Manipulando com PHP, de forma simples, dados do banco MySQL .

A ideia da classe é simplificar o acesso ao banco no que diz respeito as transações simples como:
- Create
- Read
- Update
- Delete

Não é nenhum conjunto de classes fantásticas,  é uma única classe com métodos básicos que podem servir para criar pequenas rotinas de forma rápida e limpa (isso é importante também).

A classe chamada aqui de Influx possui cerca de 15% dos métodos e funcionalidades da classe original que utilizo em meus projetos (é podem dizer, fora framework caseiro… mas me serve muito bem).

Eu peguei alguns trechos da classe afim de compartilhar com vocês no intuito de criarem coisas simples que tanto procuram aqui, como galerias por exemplo.

No geral, posso dizer que a classe “trabalha” com arrays no PHP, para tudo.
Todos os parâmetro são passados ou retornados em arrays, à partir daí vai contar a criatividade do programador (iniciante), lembrando que não é destinada à programadores experientes que procuram algo belo, a ideia é fazer com que um iniciante consiga criar pequenas rotinas com poucas linhas.

Primeiramente vamos ver alguns exemplos e depois falamos da configuração do banco (1 única linha).
Para todos os exemplos vamos utilizar uma tabela de 2 campos (item_id e item_desc)

1º – Retornando dados da tabela  (array)

<?php

$this->select()->from( 'item' )->execute();
 //verifica se há registros
 if ( $this->check() )
 {
 //printa o array retornado
 $this->printr( $this->data );
 }

?>

Os métodos estão  encadeados nesse exemplo acima, poderia ser normalmente como abaixo:

<?php

$this->select();
$this->from( 'item' );
$this->execute();
//verifica se há registros
if ( $this->check() )
{
//printa o array retornado
$this->printr( $this->data );
}

?>

Antes que questionem o título do post (manipulando registros com uma linha):

<?php

//removendo um registro
$this->delete()->from( 'item' )->where('item_id = 1')->execute();

//atualizando um registro
$this->update('item')->set(array('item_desc'), array('foobaz'))->where('item_id = 1')->execute();

?>

O retorno seria:

<?php

Array
(
 [1] => Array
 (
 [item_id] => 1
 [item_desc] => Bar
 )

[2] => Array
 (
 [item_id] => 2
 [item_desc] => Foo
 )
)
?>

A ideia da classe é utilizar métodos que criem (concatenem) uma string que será nossa query.

No exemplo acima utilizamos:
$this->select()->from(‘item’)->execute();

Que gera a query string : SELECT * FROM item;

A classe possui métodos para formar uma query string básica mas funcional, alguns métodos:


<?php
//se não passar nenhum parâmetro no select é assumido o * (todos os campos da tabela)
$this->select('campo1, campo2, campoN');
$this->from('tabela');
$this->where('item_id = 1');

$this->select()->from('tabela')->where('item_id  = 1')->execute();

$this->select()->from('tabela')->where( " item_desc like '%foo%' ")->execute();

$this->update('tabela');
$this->set(array('campo1','campo2'), array('valor1','valor2'));

$this->insert('tabela');
$this->fields(array('campo1','campo2'));
$this->values(array('valor1','valor2'));

//executa a query
$this->execute();

//verifica se houve resultados/registros (retorna true or false )
//utilizado após o select
$this->check();

//removendo um registro
$this->delete()->from('tabela')->where('id = 2')->execute();

//Utilizando join
$this->select()->from('categoria')->join('item','item_categoria = categoria_id','INNER')->execute();
?>

Esses foram alguns métodos simples,  agora é preciso criar uma classe que herde tudo isso e escrever alguns métodos para utilizarmos.
Vejamos uma classe estendida onde iremos utilizar os recursos básicos (CRUD);

<?php

//incluindo a classe influx
require_once 'influx/influx.class.php';

//extendendo a classe
class Item extends Influx
{

//construtor
 public function __construct()
 {
 parent:: __construct();
 }

//retornando array
 public function show()
 {
 $this->select()->from( 'item' )->execute();
 //verifica se há registros
 if ( $this->check() )
 {
 //printa o array retornado
 $this->printr( $this->data );
 }
 else
 {
 //exibe mensagem caso nao haja registros
 echo $this->response;
 }
 }

//utilizando limite e offset
 public function showLimOff( $limit, $offset )
 {
 $this->select()->from( 'item' )->limit( $limit, $offset )->execute();
 if ( $this->check() )
 {
 $this->printr( $this->data );
 }
 }

//inserindo novo registro
 public function incluir( $fields, $values )
 {
 $this->insert( 'item' )->fields( $fields )->values( $values )->execute();
 }

//atualizando registro
 public function atualizar( $fields, $values, $item_id )
 {
 $this->update( 'item' )->set( $fields, $values )->where( "item_id = $item_id" )->execute();
 }

//removendo registro
 public function remover( $item_id )
 {
 $this->delete()->from( 'item' )->where( "item_id = $item_id" )->execute();
 }

//gerando uma tabela html
 public function lista()
 {
 $body = "0 results";
 $this->select()->from( 'item' )->execute();
 if ( $this->check() )
 {
 $body = "<table>";
 foreach ( $this->data as $item )
 {
 //array to object
 $obj = ( object ) $item;
 $body .= "<tr>";
 $body .= "<td>$obj->item_id</td>";
 $body .= "<td>$obj->item_desc</td>";
 $body .= "</tr>";
 }
 $body .= "<table>";
 return $body;
 }
 }

//recebendo dados via post
 public function incluirDoPost()
 {
 //verifica se há dados no post
 if ( isset( $_POST ) && !empty( $_POST ) )
 {
 //populando $this->post_fields e $this->post_values com método post2Query
 $this->post2Query( $_POST );
 //insere registro
 $this->insert( 'item' )->fields( $this->post_fields )->values( $this->post_values )->execute();
 }
 }

}
//novo objeto da classe Item
$b = new Item;
//incluindo um item
$b->incluir(array('item_desc'),array('PS2'));
//exibindo itens em array
$b->show();
//atualizando um registro
$b->atualizar( array( 'item_desc' ), array( 'XBOX' ), 4 );
//exibindo registro atualizado
$b->show();
//removendo item passando ID
$b->remover(1);
//exibindo a lista novamente
$b->show();
//gerando uma tabela HTML
echo $b->lista();
//exibindo registros utilizando limit e offset
$b->showLimOff(0,2);
?>

A configuração do acesso ao banco de dados é feita na própria classe, os dados são passados em um array, como abaixo:


//configuracao do banco
 public $config = array(
 'host' => 'localhost',
 'port' => 3306,
 'dbname' => 'dbteste',
 'user' => 'root',
 'password' => ''
 );

Para configurar o banco, basta abrir o arquivo influx.class.php e alterar os dados do array config;

Os métodos estão comentados e com exemplos breves na classe influx;

Importante: No exemplo de inserção direto do post os nomes do campos do formulário devem ser iguais aos campos da tabela;
Exemplo: na tabela existe o campo item_desc, então, no form html o input deve ter o name=”item_desc”;

É isso, dá para escrever códigos simples, coisas pequenas, só usar a criatividade…

Download dos fontes (incluindo um exemplo utilizando post e tabela exemplo)
- Classe Influx


<?php
 function getVimeo( $video )
{
 $hash = unserialize( file_get_contents( "http://vimeo.com/api/v2/video/$video.php" ) );
 echo $hash[0]['thumbnail_medium'];
}

function getYoutube( $video )
{
 $hash = file_get_contents( "http://youtube.com/get_video_info?video_id=$video" );
 parse_str( $hash, $arr );
 echo $arr['thumbnail_url'];
}
?>

 

<html>
 <head>
 <title>Thumbs</title>
 </head>
 <body>
 <h1>Youtube</h1>
 <img src="<?=getYoutube("Vg6LtMlHY_A")?>" />

 <h1>Vimeo</h1>
 <img src="<?=getVimeo("251266")?>" />
 </body>
</html>

Os códigos passados devem ser retirados dos links, no caso, o texto em vermelho nos links abaixo:

http://youtube.com/watch?v=Vg6LtMlHY_A&feature=related
http://vimeo.com/251266

Demo

Download

Renderizando um Mapa (Google)  com marcadores customizados, adicionando os locais por CEP, Endereço, Latitude + Longitude …

Eu sempre quis usar esses mapinhas mesmo não tendo onde coloca-los, digo, sempre achei legal e nunca tive a oportunidade de utiliza-los.
Hoje em um projeto para Imobiliárias me deparei com a necessidade de incluir mapas de locais, tanto dos imóveis quanto do comércio e também, famárcias, hospitais, e a coisa toda!

O problema que eu sempre encontrava quando tentava arrumar um tempo para brincar com isso era:
- Para incluir um marcador no mapa é preciso informar latitude e longitude

Caras, que coisa chata isso, no geral basta abrir o mapa no google que ele retorna essas informações. Isso para um único mapa ou marcador é moleza, mas agora imagine incluir 200 marcadores em um mapa tendo que pegar lat + lng no google, chatãoooo demais!

Ninguém quer saber disso né?  eu me esqueço e acabo desabafando aqui!
Tá bom vamos para ao que interessa!

A idéia que tive (como se ninguém já tivesse feito isso anos luz atras, ao menos, se fizeram não compartilharam como eu, eu sou legal) foi a seguinte:

- Através do CEP recuperar o endereço e utilizar a API do Google para conseguir latitude e longitude

A API do google possibilita recuperar essas informações desde que você informe o endereço completo no seguinte formato:
- Av. Paulista, 1000, Sao Paulo, SP

De preferência sem acentos, ao menos obtive melhor resultado procurando sem acentos!
obs: Não vou entrar em detalhes sobre API do Google, a documentação é muito rica e é bem melhor ler as docs.

Bom, criei uma classe PHP para fazer o seguinte:
- informo um cep -> recebo um endereço -> repasso à  API -> recebo latitude e longitude -> repasso ao Gmaps API -> ganho um mapinha lindo

As vezes acabo me empolgando e indo além do proposto, isso tem que ser divertido, certo?
Assim eu pude criar a classe com os seguintes métodos:

- Adicionar  Marcador por CEP
- Adicionar  Marcador por Endereço
- Adicionar  Marcador por LAT + LNG
- Adicionar  Marcador por XML
- Escolher o Ícone do Marcador
- Inserir Conteúdo HTML ao clicar no Marcador

No print acima, você pode ver 4 marcadores, todos inseridos através do CEP + Número

Vamos ver um exemplo básico dos métodos, neste exemplo vamos apenas adicionar os marcadores (sem HTML ou Icon/Pin personalizado)

<?php
require_once 'gmaps.class.php';
$gmaps = new gMaps;
// Adiciona um marcador p/ endereco informado
$gmaps->addMarkerAddress( "Av Paulista, 10, Sao Paulo, SP");
// Adiciona um marcador p/ CEP + Num informado
$gmaps->addMarkerCep( "08615060","500");
// Adiciona um marcador p/ LAT + LNG informados
$gmaps->addMarker("-23.5462057","-46.3022458");
// Retorna em JSon todos os marcadores
$gmaps->getMarkers();

?>

Vamos colocar mais detalhes no próximo exemplo

<?php
require_once 'gmaps.class.php';
$gmaps = new gMaps;
// Adiciona um marcador p/ CEP + Num + HTML
$gmaps->addMarkerCep( "08615060","500","Conteudo HTML");
// Retorna em JSon todos os marcadores
$gmaps->getMarkers();
?>

Exemplo com Marcador Customizado

<?php
require_once 'gmaps.class.php';
$gmaps = new gMaps;
//cria novo icon/pin supondo que o arquivo esteja no diretorio icons
$gmaps->addIcon( "kart", "icons/kart.png", "45", "45" );
// Adiciona um marcador p/ CEP + Num + HTML + Icon
$gmaps->addMarkerCep( "08615060","500","Conteudo HTML","kart");
// Retorna em JSon todos os marcadores
$gmaps->getMarkers();
?>

Você viu acima:
- como adicionar marcadores por CEP, Endereço, Lat + Lng
- como adicionar conteúdo HTML ao marcador
- como inserir um icon/pin personalizado (imagem png)

Falta o método via XML

<?php
require_once 'gmaps.class.php';
$gmaps = new gMaps;
//carrega o XML markers.xml
$gmaps->loadFromXML("markers.xml");
$gmaps->getMarkers();
?>

Abaixo o código XML

<?xml version="1.0" encoding="iso-8859-1"?>
<markers>

<marker latitude="-23.5490776" longitude="-46.6527575">
 <icon name="pizza" url="icons/pizza.png" width="45" height="45" />
 <html>
 <![CDATA[<p>Lanchonete João</p><p><img src="http://tinyurl.com/897xozw" width="60" height="60" /></p><p>R$ 4,50</p>]]>
 </html>
 </marker>

<marker latitude="-23.5559008" longitude="-46.6659718">
 <icon name="kart" url="icons/kart.png" width="45" height="45" />
 <html>
 <![CDATA[<p>Hipermercado Tatendo</p>]]>
 </html>
 </marker>

<marker latitude="-23.5650044" longitude="-46.6519832">
 <icon name="imovel" url="icons/imovel.png" width="45" height="45" />
 <html>
 <![CDATA[<p>Imobiliária 123Mudar</p>]]>
 </html>
 </marker>

</markers>

Assim é bem simples criar N marcadores no Mapa, no entanto vamos destacar alguns pontos

1 – A cada marcador inserido via CEP ou Endereço uma solicitação a mais é realizada para obter Lat + Lng
2 – É mais rápido utilizar o método $gmaps->addMarker(lat,lng), dessa forma o processo é mais rápido
3 – Você pode usar os métodos $gmaps->addMarkerCep e $gmaps->addMarkerAddress para gravar Lat + Lng em um BD, assim poderá utilizar o carregamento via XML
4 – Mesmo com tudo isso que eu disse acima, o processo só ficará lento com addMarkerCep e addMarkerAddress se houver milhares de marcadores, pois serão milhares de consultas de endereço para recuperar Lat+Lng.

O que é inteligente fazer ?
O ideal é (como disse acima) utilizar os métodos e gravar Lat+Lng no banco, todos os métodos retornam Lat+Lng, o método  $gmaps->getMarkers() é quem gera a lista deles e retorna para o API Jquery.

A classe PHP que escrevi serve apenas para recuperar as informações necessárias para renderizar o Mapa e essas informações são passadas à API.
Logo, temos o seguinte código para que a coisa funcione:

<!doctype html>
<html>
 <head>
 <meta charset="iso-8859-1" />
 <title>gMaps</title>
 <link type="text/css" href="style.css" rel="stylesheet" />
 <script type="text/javascript" src="jquery-1.6.1.min.js"></script>
 <script type="text/javascript" src="jquery.gmap.min.js"></script>
 </head>
 <body>
 <div id="wrap">
 <div id="map">
 <p class="loader"><img src="icons/loader.gif"/><br/>carregando locais, aguarde...</p>
 </div>

</div>
 <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
 <script type="text/javascript" src="gmap.load.js"></script>
 </body>
</html>

Nada precisa ser alterado nos arquivos JScript, a única coisa que dever ser feita é: – Escolher um método para adicionar os marcadores, seja por CEP, Endereço ou XML. No exemplo que irei disponibilizar temos o seguinte código no arquivo que adiciona os marcadores:

<?php
addIcon( "pizza", "icons/pizza.png", "45", "45" );
$gmaps->addIcon( "kart", "icons/kart.png", "45", "45" );
$gmaps->addIcon( "green", "icons/green.png", "45", "45" );
$gmaps->addIcon( "imovel", "icons/imovel.png", "45", "45" );

// adicionar marcadores</pre>
$gmaps->addMarkerAddress( "Rua Benjamin Constant, 1500, Suzano, SP", "<p>Lanche do Chico <br/><img src=http://tinyurl.com/897xozw /></p>", "pizza" );
$gmaps->addMarkerAddress( "Rua Ipes, 300, Suzano, SP", "<p>Hipermercado NoName</p>", "kart" );
$gmaps->addMarkerAddress( "Rua Felicio de Camargo, 300, Suzano, SP", "<p>Imobiliária RedFox</p>", "imovel" );
$gmaps->addMarkerAddress( "Rua Antonio Augusto,10 Suzano, SP", "<p>Coisa Verde</p>", "green" );
$gmaps->addMarkerAddress( "Rua Jose de Almeida, 300, Suzano, SP");
$gmaps->addMarkerAddress( "Av Brasil, 100, Suzano, SP");
?>

Esse código está contido no arquivo markers.php, além desse código, todos os demais métodos e funcionalidades estão no arquivo com exemplos comentados, sintaxes e tudo que é preciso para entender o funcionamento; Um resumo do que acontece é o seguinte:
- O arquivo index.html chama um método que via Ajax/Post requisita o arquivo markers.php (que tem esse código acima / do exemplo)
- O arquivo markers.php retornar em Json os dados de cada marcador – O arquivo map.load.js apenas repassa os dados para a API GMaps, ou seja, a única coisa que você precisa alterar é o markers.php, adicionando os locais com seu método preferido ou então via XML, lembrando que seria ideal poder utilizar o banco de dados, não vou entrar em detalhes sobre o assunto!

[{latitude:-23.5711520,longitude:-46.6442116,html:'<p>Text</p><p>Av Paulista, 10, Sao Paulo, SP</p>'}]

Esse trecho acima é suficiente para incluir um marcador, é essa string que você deve montar a partir do banco de dados.
Se você tiver, por exemplo, 3 marcadores salvos no banco de dados o retorno deve ser separado por vírgula, como à seguir:

[{latitude:-23.5711520,longitude:-46.6442116,html:'<p>Text 1</p><p>Av Paulista, 10, Sao Paulo, SP</p>'},
{latitude:-23.52342423,longitude:-46.5675616,html:'<p>Text 2</p><p>Rua Augusta, 10, Sao Paulo, SP</p>'},
{latitude:-23.4562340,longitude:-46.87972116,html:'<p>Text 3</p><p>Rua Ipes, 500, Suzano, SP</p>'}]

Nesse exemplo acima está ausente o icon/pin personalizado, para utiliza-lo é preciso informar no Json o atributo icon, como abaixo:

[{latitude:-23.5711520,longitude:-46.6442116,html:'<p>Text</p><p>Av Paulista, 10, Sao Paulo, SP</p>',icon:{image: 'icons/imovel.png',iconsize: [45, 45],iconanchor: [12, 46],infowindowanchor: [12, 0]}}]

Onde o trecho pode ser entendido separadamente, como abaixo

icon:{
image: ‘icons/imovel.png’, # caminho da imagem
iconsize: [45, 45],   # largura e altura da imagem
iconanchor: [12, 46], # isso nao precisa alterar
infowindowanchor: [12, 0] # nao precisa alterar
}

Com o código em mais de uma linha é fácil entender, acontece que essa deve ser uma linha única, ao montar a string você deve retirar todo o espaço e quebras de linhas.

Bom, é isso, da metade para o fim do post  eu apenas comentei sobre como utilizar a partir de um BD e resumidamente o que você precisa saber é:
- Para utilizar com BD você precisa guardar os dados que você pode adquirir com os métodos que vimos já que todos retornam os dados necessários
- Você pode armazenar no banco em campos separados (lat, lng, endereco, icon) ou pode até armazenar a string inteira em um único campo, talvez seja mais fácil

Exemplo de como obter a string a ser guardada no banco :

<?php
require_once 'gmaps.class.php';
$gmaps = new gMaps;
$gmaps->addIcon( "kart", "icons/kart.png", "45", "45" );
$gmaps->addMarkerCep( "08615060","500","Conteudo HTML","kart");
// recuperando a string e removendo os caracters [ e ]
$strJson = preg_replace(array('/\[/','/\]/'),array('',''),$gmaps->getMarkers());

//conexao com banco
$query = mysql_query("insert into markers (str) values ("$strJson");

//recuperando as strings
$query = mysql_query("select * from markers");
//montando a string completa com todos os marcadores do banco
$markers = "[";
while($row = mysql_fecth_object($query))
{
 //concatenando a string com resultados da consulta
 //supondo que armazenou no campo str, a virgula é necessária após cada marcador
 $markers .= "$row->str,";
}
//fechando json
$markers = "]";
//retornando a string montada a partir do banco
echo $markers;
?>

É mais ou menos isso, basta se atentar no formato da string/json que deve ser retornada, como no exemplo de 3 marcadores que passei mais acima!
Veja o exemplo online, empolgue-se, baixe os fontes, abra o arquivo markers.php que é o cérebro da coisa e entenda como funciona!

No exemplo online dá para você adicionar marcadores para simular a nossa brincadeira (adicione locais próximos)!

Links:

- demo online
- demo custom
- download dos fontes

Referências
- GMaps API
O código contido no pacote dos fontes tem todos os métodos e sintaxes comentadas.

Valeu, até a próxima!

Galeria de Fotos PHP utilizando API do Flickr (Class PHPFlickr)

O que tem nessa Galeria:

- Álbuns e Fotos de sua conta do Flickr
- LightBox2

O que não tem na Galeria:
- Painel admin  (as fotos são enviadas ao Flickr)
- Banco de Dados

Vou contar uma histórinha

Essa é uma galeria simples como as demais que vocês já viram aqui, no entanto, essa galeria busca e exibe os álbuns/fotos de uma dada conta do flickr!

Por exemplo:
Fotos:  http://www.flickr.com/photos/rafaelclares/
Álbuns: http://www.flickr.com/photos/rafaelclares/sets/

Essa conta eu criei para testar nossa galeria, bem, através da API do Flickr conseguimos exibir essas fotos em nossa galeria!


Como podem ver, as fotos exibidas na Galeria são minhas fotos do Flickr!

Como funciona:
1 – Você precisa criar uma conta no Flickr (dããã)   em http://www.flickr.com
2 – Você precisa criar/obter a sua API KEY em http://www.flickr.com/services/apps/create

Depois que criar/obter a API KEY você pode visualiza-la em http://www.flickr.com/services/apps/by/seuUsuario
Onde seuUsuario, é claro, você substitui pelo seu nome de usuário do flickr!

Importante: Não irei ensinar a usar o Flickr, mesmo porque eu não sei.
Todas as perguntas relacionadas a utilização do Flickr não serão respondidas, esse é outro assunto, procure no google como:
- Usar o Flickr
- Obter API KEY
- Enviar Fotos

IMPORTANTE: Ao subir as fotos para o Flickr essas devem ser “Públicas” para que a galeria funcione! 

E depois volte ao post para pegar sua galeria!

Antes de tudo dê uma olhada na Galeria

http://clares.com.br/learn/darkgallery_free/

Como configura? É muito, muito simples, vejam:

No arquivo index.php existe o seguinte trecho de código:


<?php
 require_once('phpflickr/helper_flickr.php');
 echo flickr_sets_html("APIKEY","USUARIO");
?>

Onde é claro, APIKEY você vai substituir pela sua Api Key e a mesma coisa com USUARIO, irá substituir pelo seu usuário.
No flickr, por padrão o usuário é algo como: 76293097@N02
Assim como no facebook, mas você pode criar um login personalizado nas preferências/opções, algo como: rafaelclares

Procurem no Flickr essa opção mas isso não influencia no funcionamento da galeria, você precisa apenas informar o login no local indicado.

Feito isso, está pronta sua galeria. No Flickr você pode criar Álbuns e é essa opção que a nossa galeria utiliza, ou seja, mesmo que você vá utilizar apenas um único álbum, crie um para que a galeria funcione e coloque todas as fotos dentro dele. Você pode criar N álbuns com N fotos (é bem melhor);

Vou mostrar aqui também uma versão paga (mixaria)
Qual a diferença da versão Free?
Quase nada, tem apenas um Slideshow que é um álbum específico que você informa, por exemplo:
- Slideshow exibirá o álbum “fotos recentes” ou “Novidades”
Assim para mudar as fotos do slideshow basta mudar as fotos desse álbum no Flickr;

Link da versão paga:
http://clares.com.br/learn/darkgallery/

Valor: R$ 50,00  (a grana da cerveja pow)

Versão com upload de fotos: R$ 100,00  (não utiliza flickr, você cria os álbuns e envia as fotos para servidor)

Agora todos os links que vocês tanto amam ;D
Flickr:
http://www.flickr.com

Flickr API KEY:
http://www.flickr.com/services/apps/create/

Referências:
http://phpflickr.com/

Demo Free:
http://clares.com.br/learn/darkgallery_free/

Demo Mixaria:
http://clares.com.br/learn/darkgallery/

Download versão free:
http://clares.com.br/learn/darkgallery_free/darkgallery_free.rar
Coisas que não irei responder:
- Como utilizar o Flickr
- Como criar API KEY
- Como criar  o SlideShow
- Como alterar o layout
- Como adicionar campo preço  (????)
- Como fazer aparecer o reptile ( mortal kombat 1 )

Até logo,

Obs: Usuários recém criados no Flickr precisam passar como parâmetro o nome real de usuário, para isso veja o seu ID no link abaixo:
http://www.flickr.com/services/api/explore/?method=flickr.people.getInfo

Conforme a imagem abaixo:

Então no index.php ficaria algo como:
echo flickr_sets_html( “8063d2e765af6005s3234210407fc057bfe”, “76293097@N02″ );

Alguns funcionam assim:
echo flickr_sets_html( “8063d2e765af6005s3234210407fc057bfe”, “rafaelclares” );

e outros
echo flickr_sets_html( “8063d2e765af6005s3234210407fc057bfe”, “76293097@N02″ );

Optem pela segunda opção, com ID real do Flickr, é certeza que funcionará!
No link:
http://www.flickr.com/services/api/explore/flickr.people.findByUsername

Você pode fazer uma busca pelo seu nome de usuário, como na imagem abaixo:

Ler Atributos XML – Extendendo a Classe SimpleXMLElement

Opa!

Vamos criar uma Classe Extendida para ler os atributos de um XML,  iremos extender  a SimpleXMLElement.
Para carregar o XML vamos utilizar o SimpleXml, não se assuste com tantos nomes de classes, o que precisamos fazer para ler os atributos é bem simples! 

O XML é o padrão de sempre, uma playlist…  =D

<?xml version="1.0" encoding="iso-8859-1"?>
<playlist>
 <faixa>
 <titulo id="55" duracao="04:08" mp3="http://site.com/mp3/atari/01.mp3">Revolution Action</titulo>
 <album>60 Second Wipe Out</album>
 <autor>Atari Teenage Riot</autor>
 </faixa>
 <faixa>
 <titulo id="50" duracao="03:55" mp3="http://site.com/mp3/atari/03.mp3">Speed</titulo>
 <album>60 Second Wipe Out</album>
 <autor>Atari Teenage Riot</autor>
 </faixa>
</playlist>

Extendendo a Classe SimpleXMLElement e lendo o XML

<?php
//extendendo a classe SimpleXMLElement
//neste caso a classe SimpleXMLAttribute extende a classe SimpleXMLElement
//com o novo método Attribute
class SimpleXMLAttribute extends SimpleXMLElement
{
// metodo retorna o valor do atributo
 public function Attribute( $name )
 {
 // percorre os atributos
 foreach( $this->Attributes() as $key => $val )
 {
 // verifica existencia e retorna o valor
 if( $key == $name )
 {
 //converte/retorna valor string
 return (string) $val;
 }
 }
 }
}

//carregando o XML com o simplexml passamos como parametro a classe SimpleXMLAttribute
//esse parametro deve ser uma classe que extenda o SimpleXMLElement
$xml = simplexml_load_file( "playlist.xml", 'SimpleXMLAttribute' );
//percorrendo o nó faixa da playlist
foreach( $xml->faixa as $faixa )
{
 //printando valores e atributos
 echo
 $faixa->titulo
 . "<br />"
 //retorna o atributo id passado ao método Attribute()
 . $faixa->titulo->Attribute( 'id' )
 . "<br />"
 //retorna o atributo duracao
 . $faixa->titulo->Attribute( 'duracao' )
 . "<br />"
 //ja deu para entender né
 . $faixa->titulo->Attribute( 'mp3' )
 . "<br />"
 //retorna o album
 . $faixa->album
 . "<br />"
 //retorna o autor
 . $faixa->autor
 . "<br /> <br />";
}
//descomente a linha abaixo p/ ver os atributos
//echo "<pre>"; print_r($xml->faixa); print_r($xml->faixa->titulo);
?>

Output’s:

Download dos fontes

Referências:
Extends
SimpleXMLElement
SimpleXML
Enjoy!!!

Ler Atributos XML com PHP

Publicado: janeiro 27, 2012 em PHP, XML

Ler atributos de XML usando a classe PHP Simple Large XML Parser 

Olá, neste exemplo vamos utilizar a classe Simple Large XML Parser para ler/exibir  XML contendo atributos.

O arquivo XML é um exemplo de playlist, contendo título, album e autor, sendo que título possui os atributos: ID, Duracao e MP3 (este último seria o caminho do arquivo)

<?xml version="1.0" encoding="iso-8859-1"?>
<playlist>
 <faixa>
 <titulo id="55" duracao="04:08" mp3="http://site.com/mp3/atari/01.mp3">Revolution Action</titulo>
 <album>60 Second Wipe Out</album>
 <autor>Atari Teenage Riot</autor>
 </faixa>
 <faixa>
 <titulo id="50" duracao="03:55" mp3="http://site.com/mp3/atari/03.mp3">Speed</titulo>
 <album>60 Second Wipe Out</album>
 <autor>Atari Teenage Riot</autor>
 </faixa>
</playlist>

 


<?php
// incluindo a classe
require_once('SimpleLargeXMLParser.class.php');
// seta o caminho do XML
$xml = dirname(__FILE__)."/playlist.xml";
// cria objeto
$parser = new SimpleLargeXMLParser();
// carrega XML
$parser->loadXML($xml);
// seta no parser o nó a ser listado/percorrido
$playlist = $parser->parseXML("//playlist/faixa", true);
// percorre o XML
foreach($playlist as $faixas)
{
 //percorre o nó faixa
 foreach($faixas as $faixa => $titulos)
 {
 if(isset($titulos[0]['value']['titulo']))
 {
 // armazena no objeto titulo o nó atual
 $titulo = (object) $titulos[0]['value']['titulo'];
 // adiciona o nó album no objeto titulo
 $titulo->album = $faixas['album'][0]['value']['album']['value'];
 // adiciona o nó autor no objeto titulo
 $titulo->autor = $faixas['autor'][0]['value']['autor']['value'];
 // print o valor do nó titulo
 echo $titulo->value
 . "<br />"
 // printa o atributo id do titulo
 . $titulo->attributes['id']
 . "<br />"
 // printa o atributo duracao
 . $titulo->attributes['duracao']
 . "<br />"
 // printa o atributo mp3
 . $titulo->attributes['mp3']
 . "<br />"
 // printa o nó album
 . $titulo->album
 . "<br />"
 // printa o nó autor
 . $titulo->autor
 . "<br /><br />" ;
 }
 }
}
?>

Output:
print result

É isso, é bom dar um print_r($playlist) para ver a estrutura criada pelo Parser!

Download: XMLAttr
Parser : PHP Simple Large XML Parser

Voltei!!!

Sobre o que deve ser o próximo Post?

Publicado: junho 15, 2011 em PHP

Opa,
Estou fraco de imaginação, gostaria que cada um comentasse este POST com o assunto sobre qual iremos tratar no próximo post!
É preciso que o comentário seja objetivo para eu poder “filtrar” e ver qual assunto iremos tratar!
Ex:  XML, Jquery, PHP + BD, Login, Session, Upload, etc…

Conto com o apoio de vocês para que o post seja realmente útil, principalmente aos que acompanham fielmente minhas postagens.
Você vai perder apenas 15 segundos para comentar com o assunto!

Obrigado à todos pela participação que está cada vez maior!
Abraços,