Le format yql
de SPIP facilite l’interrogation du service, en passant comme source de données la requête YQL : {source yql, SELECT * FROM service WHERE condition}
On peut aller y chercher par exemple :
Des vidéos YouTube concernant SPIP
Boucle :
<BOUCLE_youtube(DATA)
{source yql, "select * from youtube.search(50) where query='spip'"}
{datapath /query/results/video}
{pagination 5}
>
<dt>
<a href="#URL"><img src="#VALEUR{thumbnails/thumbnail/0/content}" /></a></dt>
<dd><a href="#VALEUR{url}">#VALEUR{title}</a></dd>
</BOUCLE_youtube>
#PAGINATION
<p>#TOTAL_BOUCLE / #GRAND_TOTAL</p>
</B_youtube>
Résultat :
...
Adressage. Il faut noter qu’on a ici deux adressages « complexes » du tableau de résultats :
— {datapath /query/results/video}
indique à la boucle qu’elle doit itérer sur le tableau de vidéos, qui se trouve dans un sous-sous-sous-tableau du résultat brut fourni par YQL.
— #VALEUR{thumbnails/thumbnail/0/content}
va chercher la première des images de prévisualisation fournies dans les résultats.
Pour voir comment on détermine cet adressage, vous pouvez analyser dans la console YQL la structure du tableau des résultats : http://developer.yahoo.com/yql/cons... (cliquer sur TREE).
Balises #URL
et #VALEUR{url}
. Autre remarque, les balises #URL
et #VALEUR{url}
sont strictement équivalentes dans les boucles (DATA)
. En revanche, pour des adressages de données complexes (avec un chemin contenant un /
), il n’y a pas de balise pour obtenir directement le contenu, et il faut passer par #VALEUR{xxx/yyy}
.
Une carte du Mont Saint-Michel
YQL permet de faire une recherche sur YahooMaps.
Boucle :
#SET{place,#ENV{place,Mont Saint-Michel}}
<form action="#SELF" method="POST">
[(#SELF|form_hidden)]
<input type="text" name="place" value="#GET{place}" />
<input type="submit" name="go" value="go" />
</form>
<BOUCLE_map(DATA)
{source yql, select * from maps.map where city=(#GET{place}|_q)}
>
<img src="#VALEUR{results/Result/content}" />
</BOUCLE_map>
Résultat :
Mélange de boucles : {liste ...}
, google.translate
et flickr.photos.search
Attention, accrochez-vous : voici un mélange de trois boucles de nature différente : une {liste ..}
, et deux YQL, l’une faisant appel aux données du site Flickr, l’autre à Google translate.
Boucle :
<BOUCLE_topic(DATA){liste red, green, blue}>
<BOUCLE_trad(DATA)
{source yql, select * from google.translate where q="#VALEUR" and target="fr"}>
<h3>[(#_topic:VALEUR) =] #VALEUR{results/translatedText}</h3>
</BOUCLE_trad>
#SET{query,select * from flickr.photos.search(5) where text="#VALEUR" AND extras='url_sq'}
<!-- #GET{query} -->
<BOUCLE_r10(DATA)
{source yql, #GET{query}}
{datapath query/results/photo}
>
<img src="#URL_SQ" height=#HEIGHT_SQ width=#WIDTH_SQ[
title="(#TITLE|attribut_html)"]
/>
</BOUCLE_r10>
</BOUCLE_topic>
La boucle _topic
liste trois mots en anglais, qu’on va traduire en français grâce à l’interface YQL pour google.translate, et pour lesquels on va rechercher des photos dans Flickr.
Résultat :
red = rouge
![]()
![]()
![]()
![]()
![]()
green = vert
![]()
![]()
![]()
![]()
![]()
blue = bleu
![]()
![]()
![]()
![]()
![]()
Rien n’interdit bien entendu de mixer des boucles SPIP classiques (SQL) avec des boucles (DATA)
et des boucles YQL, pour enrichir votre site. Par exemple, en affichant une carte dans la page de chaque mot-clé géographique.
Autres exemples YQL
Je vous laisse deviner ce que font :
{source yql, select * from geo.places where text="Mazangé"}
{source yql, select * from google.search(5) where q='spip'}
{source yql, select * from delicious.feeds.popular where tag='spip'}
{source yql, select * from twitter.search where q='earthquake'}
{source yql, select * from github.user.repos where id='fil'}
Remarque : en YQL, le nombre d’enregistrements souhaité est le plus souvent indiqué entre parenthèses après le nom du service, et non sous la forme SQL LIMIT n
.
Christian Heilmann vient de signer un bon article d’introduction (en anglais) à YQL : http://www.smashingmagazine.com/2010/12/21/yql-using-web-content-for-non-programmers/
21 Messages de forum