Acoplamento YUI e YQL para construir widgets dinâmicos
17 de junho de 2009 às 11:14 por Jonathan LeBlanc | Em Desenvolvimento | 14 Comments
Sobre o Autor: Jonathan LeBlanc (twitter: jcleblanc ) trabalha com o grupo de integração sócio no Yahoo! Developer Network como evangelista sênior de software engenheiro / tecnologia. Focando relacionamentos com parceiros e formação, bem como a integração desenvolvedor externo, Jonathan trabalha com as tecnologias emergentes e promove a contribuir para a adopção e utilização de novas técnicas de desenvolvimento social. Como engenheiro de software, Jonathan trabalha extensivamente com o desenvolvimento da interação social na web, desenvolvendo novos métodos para a ligação de redes sociais para impulsionar o ideal de uma web aberta. Antes de Yahoo!, Jonathan trabalhou tanto no de produção de mídia e as equipes de desenvolvimento de produto da fantasia CBSSports.com, onde desenvolveu em produtos como o premiado Emmy March Madness no jogador vídeo sob demanda. Nascido e criado no Canadá, Jonathan formou-se Algonquin College de Artes Aplicadas e Tecnologia com uma licenciatura em ciência da computação e atualmente vive em Dublin, Califórnia, com sua esposa.
YUI tem uma lista maravilhosamente rico de manipulação de dados e utilitários UI em sua biblioteca, mas esbarra com dados igualmente rica e interessante é geralmente sua responsabilidade como um implementador. Da mesma forma, YQL tem busca de dados ricos e habilidades de interação, mas que carece de ferramentas de visualização YUI. Tomando a visualização e recursos de controle de YUI e acoplá-las com o tubo de dados brutos de YQL, podemos construir incrivelmente rica, widgets interativos sem a necessidade de criar qualquer uma das visualizações ou mecanismos de armazenamento de dados a nós mesmos.
Vou te dar uma excursão de dois widgets construídos com YUI e YQL neste post. Uma exibe o conteúdo publicamente disponível e as compilações outros sobre aquela widget original com um componente do lado do servidor PHP para mostrar dados particulares do usuário por meio da autenticação com OAuth.
Acessando dados Pública
Usando o YUI Get Utility , somos capazes de fazer pedidos ao público YQL URL consulta sem ter a dor de lidar com a mesma origem, questão política que normalmente nos impede de fazer XHR baseado em solicitações para um servidor que não estiver na mesmo domínio que o pedido originário. Abaixo está um exemplo de código pequeno que mostra como você chamaria YQL usando o YUI Get Utility :
<script type="text/javascript"> var getYQLData = function (query) { / / Prepara a URL do YUI GET: var yqlPublicQueryURL = "http://query.yahooapis.com/v1/yql?"; var sURL = yqlPublicQueryURL + "q =" + consulta + "& Format = json & callback = yqlWidget.getYQLDataCallback"; / / Fazer pedido GET para YQL com consulta fornecida transactionObj var = YAHOO.util.Get.script (sURL, { onSuccess: onYQLReqSuccess, onFailure: onYQLReqFailure, scope: this }); retorno transactionObj; } </ Script>
A URL de consulta ( sURL ) é composto de várias partes diferentes de fazer o pedido. O yqlPublicQueryURL variável contém o URI público para fazer pedidos de YQL. Há também três parâmetros de consulta que estamos passando junto a esta URI. O q parâmetro é a consulta YQL que usamos em nosso pedido (por exemplo select * from flickr.photos.search where text="YDN" ), format é o formato que queremos retornado (JSON ou XML) a partir da solicitação, e se nós quero quebrar o JSON retornado de dados em uma função (a la JSONP ) podemos definir uma função de callback usando o callback parâmetro. Quando esta função é executado, o utilitário Get fará um pedido para query.yahooapis.com com a consulta especificada. Em caso de sucesso, uma mensagem de depuração será exibido na onSuccess callback para o Utilitário Get então o callback definida na consulta YQL serão chamados para analisar os resultados retornados JSON.
Configurar este widget em seu site ou blog é tão simples como baixar o código do js-yql-display pasta no github em http://github.com/jonleblanc/yql-utilities/tree/master e instanciar o widget como o seguinte:
<-! Arquivo widget incluem: -> <script type="text/javascript" src="yql_js_widget.js"> </ script> <-! Estilos widget -> <style> div.imgCnt {border: 1px solid rgb (96, 96, 96); margin: 5px 5px 5px 0px; float: left; background-color: rgb (241, 241, 241); width: 100px; height: 140px;} div.imgCnt img {border: 0; margin: 5px;} div.imgCnt div.imgTitle {padding: 5px; tamanho da fonte: 11px; text-align: center;} </ Style> <script type="text/javascript"> var config = {'debug': true}; var format = '<div class="imgCnt" align="center">' + '<A href = "http://www.flickr.com/photos/ {proprietário} / {id} /"' + "Target =" _blank "> <img src =" http://farm3.static. + 'Flickr.com / {server} / {id} _ {secret}. Jpg? V = 0 "' + 'Width = height "80" = "80" /> </ a>' + '<div Class="imgTitle">' + '<A href = "http://www.flickr.com/photos/ {proprietário} /' + '{Id título }/">{} </ a>' + '</ Div> </ div>'; var yqlQuery = 'Select * from flickr.photos.search onde text = "YDN"'; var insertEl = 'widgetContainer'; yqlWidget.push (yqlQuery, configuração, formato, insertEl); </ Script>
Qualquer número de consultas públicas YQL podem ser feitas usando o exemplo acima - toda a documentação para saber como funciona o script de configuração pode ser encontrado no github . Se executar o código acima, podemos visualizar facilmente nossas fotos mais recentes flickr:
Então, por que todo o alarido sobre o uso de YQL e YUI juntos assim? Bem, para mim esses utilitários trazer-me bem perto de um tradicional MVC tipo (Model View Controller) do padrão de design. YQL é uma agregação de dados e maravilhosa ferramenta de manipulação, mas ao final do dia é apenas de dados. Vamos inserir a funcionalidade do controlador usando os utilitários YUI, como o utilitário Get ou Connection Manager , então podemos construir a nossa camada de apresentação em cima do que widgets utilizando como DataTable e gráficos .
Acessando dados particulares do usuário
Vamos explorar o emparelhamento de YUI e YQL um pouco mais longe, tendo a base construída no widget consulta pública JavaScript e anexar um componente do lado do servidor para autenticar e armazenar uma sessão OAuth. Usando o Y! OS PHP SDK , somos capazes de estender o widget JavaScript para mostrar o fluxo de atualização e detalhes crachá pessoal do usuário que originalmente autenticada do widget. Como estamos utilizando o SDK PHP no mesmo domínio como o nosso widget para tornar a nossa chama autenticado para YQL, já não precisa se preocupar com a mesma origem, questões de política. Isto significa que podemos trocar o uso do utilitário YUI Get com o Connection Manager YUI . A vantagem de usar o Gerenciador de conexão aqui é que podemos usar uma solicitação ajax padrão e os manipuladores de eventos do utilitário em vez de um callback dentro da consulta YQL. Nossa função novo pedido seria algo parecido com isto:
<script type="text/javascript"> var getYQLData = function (query) { / / URL preparar e enviar dados para YUI POST Connection Manager: var sURL = "private_data_fetch.php"; var postData = "q =" + consulta; / / Define callbacks Connection evento do Gerenciador var callback = { sucesso: parseYQLResults, falha: onYQLReqFailure }; / / Fazer solicitação POST para YQL com consulta fornecida var transactionObj YAHOO.util.Connect.asyncRequest = ('POST', sURL, callback, postData); retorno transactionObj; } </ Script>
O Connection Manager é usado para fazer requisições AJAX para o SDK PHP (cujas referências estão alojados em private_data_fetch.php dentro do código acima) com a consulta como um parâmetro POST. O SDK, por sua vez faz uma solicitação autenticada dos dados pessoais do usuário e despeja uma string JSON como o retorno do pedido. Então tudo que você precisa fazer é analisar a cadeia de JSON usando o YUI Utility JSON ; depois de você ter chamado YAHOO.util.JSON.parse() nos resultados da transação, seus dados podem ser tratados da mesma maneira como os dados no primeiro exemplo.
Desde YQL gera resultados quando a solicitação é chamado, não há necessidade para abrigar esses dados por si mesmo. YQL pode extrair dados de qualquer fonte disponível para que você possa criar widgets como estas para mostrar resultados dinâmicos a cada atualização.
Ambos os widgets apresentou neste post estão disponíveis gratuitamente para download no github e contribuição na
http://github.com/jonleblanc/yql-utilities/tree/master . Estes elementos são:
-
js-yql-display: JavaScript widget para mostrar dados públicos YQL -
php-yql-display: JavaScript / PHP widget para mostrar dados privados YQL
Compartilhar e ampliar: Bookmark com del.icio.us | digg it! | reddit!
14 Comentários
Desculpe, o formulário de comentário é fechado neste momento.

Copyright © 2006-2011 Yahoo! Inc. Todos os direitos reservados. Política de Privacidade - Termos de Serviço
Alimentado por WordPress em Yahoo! Web Hosting .




[...] Não sei o que fazer? Bem, eles têm alguns exemplos usando dados do terremoto. Ou você pode verificar a sua orientação na construção de widgets. [...]
Pingback por Hacking dados públicos com YQL no salão hacker / Ponte Open Source: A conferência de código aberto cidadãos / Junho 17-19, 2009 / Portland, OR - 17 de junho de 2009 #
Você me fez pensar sobre o desenvolvimento de uma subclasse de DataSource para lidar com solicitações YQL. Você pode vê-lo em ação neste exemplo em conjunto com o widget DataTable.
Obrigado pela idéia.
Comentário por Satyam - 21 de junho de 2009 #
Isso é um grande exemplo - você chegou antes de mim:). Eu estava dando uma olhada em usar YQL como fonte de dados para diferentes componentes YUI e este é um exemplo perfeito disso. O benefício adicional é que você não tem que manter a fonte de dados em um banco de dados.
- Jon
Comentário por Jonathan LeBlanc - 22 de junho de 2009 #
Graças. De qualquer forma, ele mostra uma fraqueza menor na resposta do YQL: não fornecer qualquer meta-dados sobre os resultados.
Eu só acho que o primeiro registro em query.results é um bom modelo para todo o resto, mas isso não pode ser verdade, não há realmente nenhuma razão para supor que seja assim.
Além disso, ele não dá informações datatype, eu deveria ser capaz de analisar datas, números e booleanos em seus tipos de JavaScript nativo, mas eu não posso menos que o desenvolvedor me diz, que é uma pena porque a informação é, provavelmente, lá de qualquer maneira. Eu poderia pedir um DESC, mas fazer dois pedidos iria duplicar o tempo de latência, uma pena, realmente.
Comentário por Satyam - 22 de junho de 2009 #
Jon,
YUI faz plano para apoiar local-funções / funções criados usando fechamentos como callbacks jsonp no futuro?
A única maneira que vejo é jsonp apoiado através de funções global.
Vipul
Comentário por Vipul - 24 de junho de 2009 #
Talvez não seja necessário mencionar, mas JSON YUI é util vive sob YAHOO.lang, não YAHOO.util.
Erro comum. Eu fiz isso sozinho algumas vezes.
Comentário por Lucas - 24 de junho de 2009 #
Oi Lucas, você está absolutamente certo - parece que eu copiar / colar rápido demais ao escrever essa parte do post. Eu verifiquei que no check-in de código dentro github ele está corretamente referenciada sob lang para que o widget não vai precisar de uma atualização e deve ser utilizável.
Obrigado por apontar isso.
- Jon
Comentário por Jonathan LeBlanc - 01 de julho de 2009 #
Vipul - para ser honesto eu não estou certo, a equipe YUI provavelmente seria melhor para responder isso do que I.
Comentário por Jonathan LeBlanc - 02 de julho de 2009 #
[...] Jonathan LeBlanc em YUI 3: YUIBlog contribuinte Jonathan LeBlanc, um evangelista técnico da equipe Yahoo Developer Network, foi na Carolina do Sul [...]
Pingback por In the Wild de 17 de julho de 2009 »Yahoo! Blog Interface de Usuário - 17 de julho de 2009 #
[...] Para uma explicação mais em profundidade do que foi construído com esta ferramenta dar uma olhada no meu post no blog do YUI em http://www.yuiblog.com/blog/2009/06/17/yui- e-yql / [...]
Pingback por Coupling YUI e YQL para construir JavaScript Widgets | O Tecnólogo Nua - 17 de julho, 2009 #
Oi Jon,
Eu fiz algumas pesquisas mas não conseguiram localizar nenhum código python exemplo lib / / base de acesso a dados privados. Você sabe se "coisa" como existe?
Graças.
Comentário por Antonio - 10 de setembro de 2009 #
Antonio,
Há um Yahoo! Abra Estratégia Python SDK disponível, que deve ajudá-lo acesso privado Yahoo! dados do perfil do usuário. SDK que está localizado na http://github.com/yahoo/yos-social-python/tree
- Jon
Comentário por Jonathan LeBlanc - 14 setembro de 2009 #
Olá,
Sou testado "Acessando Dados Público" e tenho uma pergunta. Ao gerar uma consulta e ter todos os dados reterned é ok, mas o que fazer se não há dados para retornar ou o "Servidor Público" não está trabalhando no momento. E se temos um "push" alguns e um "render" função para fazer o acesso a alguns servidores difrent, se o impulso do meio não é o retorno de dados, a todos os "push" ao lado é um trabalho parar! Como evitar isso. Muito obrigado!
Comentário por Jovchev - 8 de outubro de 2009 #
[...] YQLDataSource para YUI 2: "Graças ao artigo Jonathan LeBlanc sobre o Blog YUI eu pensei que seria legal ter uma YQLDataSource para torná-lo mais fácil de usar dados YQL em YUI 2 [...]
Pingback por In the Wild de 11 de março de 2010 »User Interface de Yahoo! Blog (YUIBlog) - 12 mar 2010 #